0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[rails]DRYとはなにか

Posted at

#DRYとはなにか
DRYとはDon't Repeat Yourselfの略で、「同じ情報を繰り返し定義しない」という考え方です。

情報とは、メソッドであったり、配列などのデータの集合体などを指し、同じコードを繰り返し記述しないということです。

DRYを意識することで、可読性の向上や、コード量を減らすことによりアプリケーションの動作が早くなることがあげられます。

DRYが意識出来てないコードです

DRYが意識できていないコード
def select_workout1
  muscle = ['ベンチプレス','デットリフト','スクワット','懸垂','腕立て伏せ']
  num = gets.to_i
  workout1 = muscle[num]
  puts workout1
end

def select_workout2
  muscle = ['ベンチプレス','デットリフト','スクワット','懸垂','腕立て伏せ']
  num = gets.to_i
  workout2 = muscle[num]
  puts workout2
end

def select_workout3
  muscle = ['ベンチプレス','デットリフト','スクワット','懸垂','腕立て伏せ']
  num = gets.to_i
  workout3 = muscle[num]
  puts workout3
end

puts '1種目目は?'
select_workout1
puts '2種目目は?'
select_workout2
puts '3種目目は?'
select_workout3

上記の例では、muscleという配列の情報を各メソッド内で定義しています。

numという変数に代入するgets.to_iやworkoutも、代入する値は同じですが各メソッドで定義しています。

これでは、「同じ情報を繰り返し定義しない」というDRYの考え方に沿っていません。

DRYを意識したコード
muscle = ['ベンチプレス','デットリフト','スクワット','懸垂','腕立て伏せ']
  
def select_workout(muscle,category)
  num = gets.to_i
  if category == 'workout1'
    workout1 = muscle[num]
    puts workout1
  elsif category == 'workout2'
    workout2 = muscle[num]
    puts workout2
  elsif category == 'workout3'
    workout3 = muscle[num]
    puts workout3
  end
end

puts '1種目目は?'
select_workout(muscle,'workout1')
puts '2種目目は?'
select_workout(muscle,'workout2')
puts '3種目目は?'
select_workout(muscle,'workout3')

これで重複していた、gets.to_i、muscleなどがなくなりました

#まとめ
DRYを意識できれば、変更点などが少なくなります。
変更点が少なくなれば修正点などが少なくなり、修正漏れなどのバグが生じにくくなります。

0
0
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?