string[]の[]ってなんですか
Q&A
知りたいこと
検索しても出てこないのでよくわかっていません。
コード
string[] readText = File.ReadAllLines(file);
この [] っていうのが何なのかわかりません。
Q&A
検索しても出てこないのでよくわかっていません。
string[] readText = File.ReadAllLines(file);
この [] っていうのが何なのかわかりません。
検索しても出てこないはずはありません。出てこないのはキーワードの選び方の問題では?
c# string[] をキーワードにググると最初にヒットするのがこれ:
C#で配列を宣言するには?
https://atmarkit.itmedia.co.jp/ait/articles/0502/11/news021.html
2 番目がこれ:
1 次元配列 (C# プログラミング ガイド)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/arrays/single-dimensional-arrays
ホントに自分で調べてるのですか?
「c# カッコ」とかでググると出てきますよ!
雑に答えると、
文字列 = string
整数値 = int
文字列の配列 = string[]
整数値の配列 = int[]
って感じで、配列の変数を宣言する際の記号と思ってもらえればよいかと。
この [] っていうのが何なのかわかりません。
[]
自体の意味[]
は、日本語では「角括弧」ですが、英語では Square brackets
もしくは brackets
と呼ばれます。[急募] パートナー求む [当方独身貴族]
などのように、基本的に「何かを括る・束ねる」時に使われる記号というのはご存知かと思います。
プログラムでも []
は「何かを括る・束ねる」時に使われるのですが、実は、これ単体では「何を束ねるための括弧なのか」が定義できません。他のものと組み合わせて、はじめて利用目的が決まるためです。
[]
が使われる先[]
が利用される先の 1 つに「型」があります。
「型」というのは、相手に「何であるか」を伝えるものです。「ほら、刀で、こう ... バサッとやるやつ。最後にキュッと刃先が上がって」と言って伝えるより「水の呼吸 壱ノ型」と言った方が、わかっている同士であれば正確かつ早く伝わります。
「型」は、英語で type
と言いますが、タイプ・ライターも「何であるか」を書く器械だったり、「人の話しを聞かないタイプ」のように「何であるか」を伝えるようなものです。
プログラムも似ていて、プログラムにおける「型」は、プログラムの内部が持つデータの形式のことです。
というのも、123
と言われても、計算に使う数値としての 123 なのか、表示に使う文字としての "123" なのかは、人間が教えて上げないとプログラムは理解できません。そこで「型」を定義することで伝えてあげます。
そして string
というのが「文字列の型」です。
文字の列、つまり複数の文字を糸で 1 つにまとめたようなものなので string
と呼ばれます。江戸時代の1貫文(紐に銅銭を通したアレ)みたいなイメージです。
ちなみに「文字列」を構成する「文字」は、英語で character
と呼ばれます。略して char
と書かれます。「キャラクター」とは「何かの表現を構成する要素」のことです。アニメのキャラなども同様の意味です。
string name = "Tanjirou"
というのは、「name
には文字列の "Tanjirou" が入っているよ」という意味になり、型を指定してくれたおかげでプログラムは「何のデータであるか」を推測する必要がなくなり、処理しやすくなります。
ここで、先の []
が出てきます。プログラムでも「何かを括る・束ねる」時に使われると言った、アレです。
string[]
と、string
に []
が付いた場合は、「string
を束ねたもの」という意味になります。
先の string
を「1貫文」を例にすると、複数本あるようなイメージです。これを「配列」と言いますが、英語で array
と呼ばれ、「ずらりと並ぶ」といった意味があります。
画像や動画で、ミサイルがズラリと並んでいるのを見たことはないでしょうか。アレのようなものです。array
だけに。
つまり、string[] names
ときた場合は「names
には複数の strings
が入ってる array」という意味になります。そして int[] numbers
ときた場合は「numbers
には複数の整数が入っている配列」ということです。
string[] names = { "Tanjirou", "Nezuko", "Zenitu", "Inosuke" };
int[] numbers = { 123, 456, 789, 5963 };
以上を踏まえて以下をご覧ください。ご質問にあったものです。
string[] readText = File.ReadAllLines(file);
まず、わかることは string[]
とあるので「readText
には、複数の strings
が入る」ことです。つまり、readText
は文字列の配列型であることがわかります。
次に、readText
には File.ReadAllLines()
なる謎の関数からの出力結果が代入されるということは、この関数は string[]
型で吐き出してくるということです。
そして、関数名の File.
から察するに「ファイルを扱う」系の関数で、ReadAllLines
とあるので「すべての行を読み込む」関数と思われます。となると、引数の file
はおそらく、そのファイルの場所が入っているんだろうなと推測できます。
しかし、推測だけでは危険です。実際にどのような関数なのか調べる必要があります。
このような時に、私がまず調べるのが「公式ドキュメント」です。
"File.ReadAllLines" で検索すると、トップに「File.ReadAllLines メソッド (System.IO)
」がヒットしたので、開いてみます。
ReadAllLines(String)
テキスト ファイルを開き、ファイルのすべての行を読み取った後、ファイルを閉じます。public static string[] ReadAllLines (string path);
(File.ReadAllLines メソッド (System.IO) | v6.0 | .NET @ docs.microsoft.com より)
これにより、このメソッド(クラスの関数)は、引数の path
は文字列で、ファイルのパス(ファイルのある場所)が渡されると、そこにあるテキスト・ファイルを読み込んでくれ、確かに string[]
を返すのだと確信が持てます。そして、「すべての行を読み取った後」とあるので、配列に読み込んだ行が各々に入っていることがわかります。
もし、公式ドキュメントの検索が使いづらい場合は、site:docs.microsoft.com/ja-jp/dotnet/csharp <検索文字>
で、Google を使って公式ドキュメントをググったりもします。
【
File.ReadAllLines
をググる URL 例】
https://www.google.com/search?q=site%3Adocs.microsoft.com%2Fja-jp%2Fdotnet%2Fcsharp+File.ReadAllLines
ちなみに、ブラウザの検索エンジンに https://www.google.com/search?q=site%3Adocs.microsoft.com%2Fja-jp%2Fdotnet%2Fcsharp+%s
を追加して、c#
というキーワードに割り当てると、アドレスバーから c# File.ReadAllLines
と打つだけで C# の公式ドキュメントから File.ReadAllLines
を Google で検索できます。
手前ミソですが、以下の記事をご覧ください。
確かに必ずしも公式ドキュメントがわかりやすいとは言えません。しかし、少なくとも「どのような用語を知らないと、ドキュメントが読めないのか」がわかります。また、何を言っているのか分からないながらも「一番正しいことを言っている」のが公式ドキュメントです。
そこから、用語やキーワードを元に検索し、まずは自分に合った説明をしてくれるサイトを見つけるようにしています。そして内容を公式ドキュメントと照らし合わせながら、サイトの更新日なども見て、信用できるサイトか絞っていきます。
このようにして「情報の場所」と「情報の探し方」のボキャブラリーを増やすことで、検索スキルを上げていきます。
検索は経験です。ただ闇雲にググってもビミョいものしかヒットしません。まずは「何を調べたいのか」を明確にしないといけません。
実は、この時の「何を」を明確にするのには経験が必要です。と言うのも、検索も質問も同じスキルが必要なのです。Google に聞くか、人間に聞くかの違いでしかないからです。
「この [] っていうのが何なのかわかりません。
」というご質問も、一見「[]
が何かわからない」と明確な質問に見えます。
しかし「使い方」なのか、「記号の意味」なのか、「なぜ []
を使うのか」なのか、情報が足りないため「短く答える」か、私の回答のように、すべてを含めて「無駄に長く答えるか」になってしまいます。
独学は、カンナで削るように薄く、そしてトライ & エラーで時間をかけ、そして吐血とも言える Qiita などに吐き出しながら体で覚えていきます。時間がもったいない場合は、スクールなどでポイントを押さえて教わるしかありません。
しかし、Qiita で回答している人たちはみんなその辛さを知っているので、「どこで詰まっているのか」が伝われば答えてくれます。めげずに頑張ってください。