【一人 bugs.ruby Advent Calendar 2020】[Feature #16746] Endless method definition【1日目】
一人 bugs.ruby Advent Calendar 2020 1日目の記事になります。
さて、今年は『毎週気になった bugs.ruby のチケットをまとめてみる』ということをやってみました。
思ったよりも継続的に続けることができたので Advent Calendar で今年気になったチケット的なやつをまとめてみようかなーと思います。
内容はあんまりつめつめじゃなくて軽く紹介していく感じになります。
[Feature #16746] Endless method definition
Ruby 3.0 で問題の話題のエンドレスメソッド定義のチケットです。
エンドレスと end
を書かないっていうのがかかってるやつですね!
元々は 4/1
に投稿されたエイプリルフールネタでした。
最初の提案だと def
で実装するのが難しかったみたいで def:
という特殊な構文を使って定義するような形でした。
def: value(args) = expression def: inc(x) = x + 1 p inc(42) #=> 43
最初は joke
タグが付いてたんですが元々似たような書き方の需要はあったらしくて、途中から真面目に議論がはじまりに最終的に def
で定義できるように実装されて実験的に導入されるような流れとなりました。
勢いがある。
入った後にも紆余曲折あったんですが現時点では削除されずにこのまま行くと Ruby 3.0 に入りそうですね。
最初は joke
だったのに最終的にはその機能が入るのはかなり面白いですよねー。
実際、1行でメソッドを定義したいと思うときはたまによくあるので書き心地がよくなりそうですねえ。
# エンドレスメソッド定義があればこんな感じでかける世界に… class FizzBuzz def initialize(value) = @value = value def fizz? = @value % 3 == 0 def buzz? = @value % 5 == 0 def fizzbuzz? = fizz? && buzz? def to_s = fizzbuzz? ? "FizzBuzz" : fizz? ? "Fizz" : buzz? ? "Buzz" : @value.to_s end