Rubyの3項演算子からif文に書き換えるのに苦労してしまった。。
やったこと
Rubyの3項演算子からif文に書き換える。
(単純な事に気づかずに苦労してしまった💦今思うとなぜ気づかなかったのだろう。。)
プロを目指す人のためのRuby入門の第4章の4.3.4
の偶数のみ値を10倍にしてから加算する3項演算子を使ったコードがあります。
(3項演算子の詳しい説明は本書に記載されています。こちらは「プロを目指す人のためのRuby入門」の第4章の4.3.4
のコードを引用させていただきました。)
numbers = [1, 2, 3, 4] sum = 0 numbers.each do |n| #3項演算子 sum_value = n.even? ? n * 10 : n sum += sum_value end p sum #=> 64
- ↑のコードをif文に変更しようとしました。
- 下がif文に書き換えようとした失敗例です。
numbers2 = [1, 2, 3, 4] sum2 = 0 numbers2.each do |n2| sum_value2 = if n2.even? n2 * 10 else n2 sum2 += sum_value2 end p sum2
end
が1つ足りないと気付き、付け足す。
numbers2 = [1, 2, 3, 4] sum2 = 0 numbers2.each do |n2| sum_value2 = if n2.even? n2 * 10 else n2 sum2 += sum_value2 end end p sum2
else
の中でsum2 += sum_value2
を記述するのがおかしいと気づかないのが、今思うと恥ずかしい。その他に原因があると思って色々と変更しては改善されずに嵌った。
わかったこと
- 下記の順にコードを改善しました。
numbers2 = [1, 2, 3, 4] sum2 = 0 numbers2.each do |n2| sum_value2 = if n2.even? n2 * 10 else n2 end sum2 += sum_value2 end p sum2 #=> 64
numbers2 = [1, 2, 3, 4] sum2 = 0 numbers2.each do |n2| sum2 += if n2.even? n2 * 10 else n2 end end p sum2 #=> 64
- 誤りに気づくのに時間がかかり過ぎたので同じ事が起きないようにブログに書いて振り返りをしようと思いました。