鶏頭のプログラム

Ruby, Javascript, C言語, SQLなどのプログラミング

Crystal言語はここが違う(配列編)

RubyのコードをCrystalに置き換えてみる - 鶏頭のプログラム
に引き続きCrystalのことを書いていきます。

今回は配列Arrayについて記載します。
詳しくはここ
Array: http://crystal-lang.org/api/index.html#http%3A//crystal-lang.org/api/Array.html

HashやArrayに存在しない値を指定するとRubyではnilが返ってきますが
CrystalではExceptionが発生します。

arr = [1,2,3]
puts arr[3]

h = { a: "hello" }
puts h[:b]

このコードの場合、実行すると

Index out of bounds (IndexError)
Missing hash value: :b (KeyError)

というエラーが発生します。Rubyのようにnilを返したい場合は

arr = [1,2,3]
puts arr[3]?

h = { a: "hello" }
puts h[:b]?

というように記載します。

以下、RubyにはあってCrystalには存在しないArrayクラスのメソッドを記載します。
collect → mapで代替可能
collect! → map!で代替可能
drop
drop_while
eql? → かわりにequals?という関数が存在し、自分で定義することが可能です。
flatten
flatten!
include? → includes?という関数は存在します。
keep_if -> select!で代替可能
rassoc
repeated_combination
repeated_permutation
rotate
slice
slice!

個人的にはsliceがないのが残念な感じがしますが、ほとんどのメソッドが実装されています。

追記---------------------
0.7.8からdelete_atが実装されてslice!の代わりに使用できる予定です。
また、rotate, flattenの一部, repeated_combinations, repeated_permutationsは実装されるようです。