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は実装されるようです。