🐈
[Rails] next if が使えないときの逃げ方
next if
について
はじめに - railsのループ処理中に「こいつには処理を適用しなくていいな」というやつがあると、 next if
で飛ばすことができます。
numbers = [1,2,3,4,5,6,7,8,9,10]
numbers.each do |num|
next if num.even?
p num
end
上記のコードだと以下の出力が得られるはずだ
1
3
5
7
9
しかし、業務中に next if
を使うとうまいこと欲しい結果を得ることができない事象が発生しました。
その際に教えていただいた方法を残しておきます。
どのような状況でも使えるわけではないかと思うので、参考程度に読んでいただけると幸いです。
next if
からの逃げ方
本題 - というわけで、早速回避方法を記載していきます。
追記: こちらコメントでいただいたご指摘を踏まえて修正しましたmm
numbers = [1,2,3,4,5,6,7,8,9,10]
odd_numbers = numbers.select(&:odd?)
odd_numbers.each do |num|
p num
end
出力は最初に書いたコードと同じになります。
要は、 next if
で避けるものを、ループ処理の実行前に省いてしまおう ということです。
反省
言われるとめちゃくちゃシンプルで納得感があり、
ループ処理中に配列の一部を省くようなこともしないのでこちらの方が可読性が高い気がします。
next if
で対処することに執着しすぎていました〜泣
参考
next if
に関してはこちらの記事が簡潔にわかりやすく説明してくださっています。
コメントで教えていただいた&:メソッド名
についてはこちらの記事が簡潔でわかりやすいかったです。
完全に余談ですが、&:メソッド名
の方がブロックを渡すより速いらしいです。
Discussion
こうのさん、こんにちは。
「ループ処理の実行前に省いてしまおう」とのことですが、このコードだと何かを省いたというより、単に奇数だけの配列をベタ書きしただけのように見えます。
おそらくですが、教えてもらった方法は次のように、
numbers
を操作して奇数だけの配列を得る方法ではないでしょうか?コメントありがとうございますmm
こちら、ご指摘のとおりです。
Ito様に教えていただいたコードの方が、私が言いたいことを的確に表していると思いますので、記事の修正をさせていただきます。
勉強になりました、ありがとうございます!