キーワード引数には、誰も触れていない明確な利点がいくつかあります。
まず、引数の順序に結合されていません。したがって、引数が nil である場合がある場合は、よりきれいに見えます。
def print_greeting(name, message = "Hello")
puts "#{message}, #{name}"
end
print_greeting("John Connor", "Hasta la vista")
キーワード引数を使用する場合:
def print_greeting(message: "Hello", name:)
puts "#{message}, #{name}"
end
print_greeting(message: "Hasta la vista", name: "John Connor")
あるいは
print_greeting(name: "John Connor", message: "Goodbye")
引数の順序を覚えておく必要がなくなります。ただし、欠点は、引数の名前を覚えておく必要があることです。これは多かれ少なかれ直観的である必要があり、間違いなく、より慎重に検討されたメソッド シグネチャが得られます。
キーワード引数を使用するもう 1 つの利点は、将来追加の引数が必要になる可能性のあるメソッドがある場合です。
def create_person(name:, age:, height:)
# make yourself some friends
end
あなたのシステム要件が、人のお気に入りのキャンディーバーについて知る必要がある場合、または太りすぎの場合 (お気に入りのキャンディーバーを消費しすぎた場合) はどうでしょうか。キーワード引数を使用してそれを行うにはどうすればよいでしょうか? 単純:
def create_person(name:, age:, height:, favorite_candy:, overweight: true)
# make yourself some fat friends
end
キーワード引数の前には常にハッシュがありましたが、それにより、変数を抽出して割り当てるためのボイラープレート コードがさらに多くなりました。定型コード == より多くのタイピング == より多くのタイプミスの可能性 == 素晴らしい Ruby コードを書く回数が減る。
def old_way(name, opts={})
age = opts[:age]
height = opts[:height]
# all the benefits as before, more arthritis and headaches
end
引数を 1 つ取り、変更する必要がない可能性が高いメソッドを設定するだけの場合:
def say_full_name(first_name, last_name)
puts "#{first_name} #{last_name}"
end
パフォーマンスがわずかに低下するため、キーワード引数は避ける必要があります。