Crystalのsyntax紹介 "block の Short one-argument syntax"
この記事は、 Crystal Advent Calendar 2017 の21日目を埋める記事です。
crystalには、痒いところに手が届く構文があります。
今回は block の Short one-argument syntax
を紹介します。
Short one-argument syntax
詳細はProcのDocsにあります。
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を書いていると度々出てきます。ぜひ試してみてください。