LoginSignup
0
0

More than 3 years have passed since last update.

【Ruby/リファクタリング】JavaやC言語のようなRubyの繰り返し処理からRubyらしい繰り返し処理へ

Last updated at Posted at 2020-08-25

はじめに

JavaやC言語を勉強した後にRubyでプログラムを実装している。
その際に、最初に実装していたループ文がJavaのような実装内容になっており、
Rubyらしさがなかったため、下記のようにリファクタリングを実施した。

下記よりもRubyらしい記述方法があればご教授いただければ幸いです。

プログラム内容

0から100までの奇数を表示するプログラム

修正前

Rubyの下記文法に即して繰り返し処理を記述。
JavaやC言語でfor文に慣れているため、書きやすい。

for 変数 in オブジェクト do
  繰り返し実行する処理
end
loop.rb
for n in 0..100 do
  if n % 2 != 0 then
    puts n
  end
end

修正後

Rubyを勉強していくと繰り返し処理はeachを用いることが一般的であることを認識します。
さらに整数を扱うメソッドodd? even?や
selectのようなインスタンスメソッドを知ることで下記のように
繰り返し処理を修正することができます。

# 自身が奇数であればtrueを返す
3.odd? # 実行結果 true

# selectメソッド
# 各要素をブロックで判定し、true要素だけを返す
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
puts array.select(&:odd?) # 実行結果 1 3 5 7 9

loop.rb
(0..100).select(&:odd?).each do |n|
  puts n
end

最後に

Rubyのfor文は実行時にeachメソッドが実行されているようです。
(上記のような実際は別のメソッドが実行されていることをシンタックスシュガーというらしいです。)
Rubyにおいて繰り返し処理を記述する際は個人的にはeachを推奨いたします。

今回の修正から下記を教訓にしていきたいと思いました。
Rubyに入ってはRubyに従え
他の言語を学ぶ時も同様の精神を持って取り組みたいと思います。

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0