uetennis’s diary

プログラミングについて学んだ事やライフハックについてかきます

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
  • 誤りに気づくのに時間がかかり過ぎたので同じ事が起きないようにブログに書いて振り返りをしようと思いました。

参考

www.amazon.co.jp