【一人 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