プログラミング言語 Crystal

Crystal の日本語ドキュメントはしばらく更新されておらず情報が古くなっているため、できるだけ原文の英語ドキュメントで最新の情報を参照ください。

翻訳にご協力いただける方は翻訳プロジェクトの issue や Crystal-JP の Slack からお知らせください。

配列 (Array)

配列 (Array) は、その中に T 型の n 個の要素を含むことができるジェネリック型です。通常、以下の配列リテラルを利用して書きます。

[1, 2, 3]         # Array(Int32)
[1, "hello", 'x'] # Array(Int32 | String | Char)

配列には異なる型の要素を含めることが可能で、そのとき T は複数の型の組み合わせ (ユニオン型) となります。ただ、その型は配列が作られたときに決定されます。つまり、配列の生成時に明示的に指定された T か、配列リテラルで生成した場合であれば、リテラルの要素の型の組み合わせによって型が決まります。

空の配列を作りたいときには、必ず T を指定しなければなりません。

[] of Int32 # Array(Int32).new と同じ
[]          # シンタックスエラーになる

文字列の配列

文字列の配列は特別な記法を使って書くことができます。

%w(one two three) # ["one", "two", "three"]

シンボルの配列

シンボルの配列は特別な記法を使って書くことができます。

%i(one two three) # [:one, :two, :three]

配列ライクな型

配列が持つ特別なシンタックスを他の型で使うこともできます。ただし、引数のない new<< メソッドが定義されている必要があります。

MyType{1, 2, 3}

もし MyType がジェネリック型でない場合は、上記は以下と同じ意味です。

tmp = MyType.new
tmp << 1
tmp << 2
tmp << 3
tmp

もし MyType がジェネリック型である場合は、上記は以下と同じ意味です。

tmp = MyType(typeof(1, 2, 3)).new
tmp << 1
tmp << 2
tmp << 3
tmp

ジェネリック型である場合には、型引数を指定することも可能です。

MyType(Int32 | String) {1, 2, "foo"}