Crystal の名前付き引数は自然に書けてつらくない

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

qiita.com

Ruby の名前付き引数の例です。

def hoge(a, b=1, c: 2)
  p [a, b, c]
end

hoge(123)               #=> [123, 1, 2]
hoge(123, 456)          #=> [123, 456, 2]
hoge(123, c: 789)       #=> [123, 1, 789]
hoge(123, 456, c: 789)  #=> [123, 456, 789]

a は通常の引数、b はデフォルト値を持つ引数、c は名前付き引数です。 名前付き引数は専用の記述方法があります。

Crystal の記述は Ruby とは少し異なります。

def hoge(a, b=1, c=2)
  p [a, b, c]
end

hoge(123)                  #=> [123, 1, 2]
hoge(123, b: 456)          #=> [123, 456, 2]
hoge(123, c: 789)          #=> [123, 1, 789]
hoge(123, b: 456, c: 789)  #=> [123, 456, 789]
hoge(123, 456)             #=> [123, 456, 2]
hoge(123, 456, c: 789)     #=> [123, 456, 789]
hoge(123, 456, 789)        #=> [123, 456, 789]

デフォルト値を持つ引数は名前付き引数にもなります。

Crystal の方が自然でいいですね!(個人の感想です)

追記 2016-05-14

Crystal 0.16 で、デフォルト値を持たない引数も名前付き引数として使えるようになりました。