圧倒亭グランパのブログ

30年後の自分にもわかるように書くブログ

Crystalのsyntax紹介 "block の Short one-argument syntax"

この記事は、 Crystal Advent Calendar 2017 の21日目を埋める記事です。

crystalには、痒いところに手が届く構文があります。

今回は block の Short one-argument syntax を紹介します。

Short one-argument syntax

詳細はProcのDocsにあります。

Blocks and Procs · GitBook

rubyのblockの有名な短縮記法として、下記があります。

["abc","def","ghi"].map(&:upcase)
# => ["ABC", "DEF", "GHI"]

各要素に対してメソッドを適用したいときに非常に便利です。

crystalではこう書きます。

["abc","def","ghi"].map(&.upcase)
# => ["ABC", "DEF", "GHI"]

違いは、&の後ろが:.という点です。

この.ですが、これが強力で、単なるメソッド呼び出しと同じ考えで動きます。例えば、メソッドに引数を渡すことができます。

["abc","def","ghi"].map(&.delete("adg"))
# => ["bc", "ef", "hi"]

また、最初のメソッドに続けて、次のメソッドを呼び出すこともできます。

["abc","def","ghi"].map(&.upcase.delete("ADG"))
# => ["BC", "EF", "HI"]

痒いところに手が届く、便利な記法だと思います。crystalを書いていると度々出てきます。ぜひ試してみてください。