#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を意識できれば、変更点などが少なくなります。
変更点が少なくなれば修正点などが少なくなり、修正漏れなどのバグが生じにくくなります。