💨
[Feature #21435] Kernel#then と同じような Kernel#then_try を追加する提案
[Feature #21435] Kernel#then_try as a conditional #then
-
Kernel#thenと同じようなKernel#then_tryを追加する提案 - 最初は
#then_tryという名前ではなくて#optionalという名前で提案してしていたみたい -
#thenとは『異なりブロックの戻り値が偽の場合はレシーバの値を返す』という挙動になる
# 実装はこんな感じ
module Kernel
def then_try
tap do
result = yield(self) or next
break result
end
end
end
pp 42.then_try { _1 + _1 } # => 84
pp 42.then_try { nil } # => 42
- これは
@record = Record.find(record_id)
.then { it.respond_to?(:decorate) ? it.decorate : it }
- のようなコード
@record = Record.find(record_id)
.then_try { it.decorate if it.respond_to? :decorate }
- みたいにかけるイメージですね
- わたしはこういうケースだと以下のように
#tap + breakで書くことは多いんですがまあ〜こういうのがほしいのはわかる
@record = Record.find(record_id)
.tap { break it.decorate if it.respond_to? :decorate }
- わかるんですが提案された
#then_tryがそこまでわかりやすかったりする利便性はそこまで感じないんですよねえ - わかりやすいさもそうだし、特にコード量が極端に減ったりもしてないので
- どうせならもっといい感じにかけるような構文があるとよい気はするんですが
- コメントを見てみると最初に提案していた
#optionalという名前に対してやそもそも機能に対してあんまりポジティブな意見はなさそうですねえ
Discussion