Crystal は配列の範囲外の参照がエラーになってつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の6日目の記事です。

qiita.com

1日目の記事で配列が自動拡張されなくてつらいと書いたんですが、配列の範囲外の参照もエラーになります。

array = [0, 1, 2]
array[3]
[4337095] *CallStack::unwind:Array(Pointer(Void)) +87
[4336986] *CallStack#initialize<CallStack>:Array(Pointer(Void)) +10
[4336938] *CallStack::new:CallStack +42
[4344863] *Exception +31
[4344797] *IndexError#initialize<IndexError, String>:CallStack +29
[4344737] *IndexError::new<String>:IndexError +97
[4344629] *IndexError::new:IndexError +21
[4333208] *Array(Int32) +120
[4333078] *Array(Int32) +6
[4324271] ???
[4331216] main +32
[139942442764864] __libc_start_main +240
[4321449] _start +41
[0] ???

これは Rubyist にはつらい。

Ruby と同じようにエラーにせずに nil を返して欲しい場合は []? を使います。

array = [0, 1, 2]
array[3]?
#=> nil