Schlüsselwort Argumente haben einige deutliche Vorteile niemand berührt hat.
Zunächst einmal sind Sie nicht an die Reihenfolge der Argumente gekoppelt. So in einem Fall, in dem Sie ein Null-Argument haben könnten gelegentlich sieht es viel sauberer:
def yo(sup, whats="good", dude="!")
# do your thing
end
yo("hey", nil, "?")
wenn Sie Keyword-Argumente verwenden:
def yo(sup:, whats:"good", dude:"!")
# do your thing
end
yo(sup: "hey", dude: "?")
oder sogar
yo(dude: "?", sup: "hey")
Es entfernt die müssen sich an die Reihenfolge der Argumente erinnern. Der Nachteil ist jedoch, dass Sie sich den Namen des Arguments merken müssen, aber das sollte mehr oder weniger intuitiv sein.
Auch, wenn Sie eine Methode haben, die möglicherweise in der Zukunft mehr Argumente brauchen könnte.
def create_person(name:, age:, height:)
# make yourself some friends
end
was, wenn Ihr System ganz plötzlich will über eine Person, die Lieblingsschokoriegel wissen, oder wenn sie übergewichtig sind (zu viele ihrer Lieblings-Schokoriegel raubend), wie Sie das tun würde? Ganz einfach:
def create_person(name:, age:, height:, favorite_candy:, overweight: true)
# make yourself some fat friends
end
Vor Stichwort Argumente gab es immer die Hash, aber das zu viel Standardcode führte zu extrahieren und Variablen zuweisen. Boilerplate Code == mehr tippen == mehr potentielle Tippfehler == weniger Zeiten schreiben super Ruby Code.
def old_way(name, opts={})
age = opts[:age]
height = opts[:height]
# all the benefits as before, more arthritis and headaches
end
Wenn Sie nur eine Methode einrichten, die ein Argument und wird höchstwahrscheinlich nie eine Notwendigkeit, zu ändern:
def say_full_name(first_name, last_name)
puts "#{first_name} #{last_name}"
end
Dann Schlüsselwort Argumente sollten vermieden werden, da es eine kleine Leistung schlagen.
Um die Antwort hinzuzufügen, verwenden Sie sie, wenn Sie die Argumente den Variablen innerhalb Ihrer Methodendefinition zuweisen müssen, und vermeiden Sie es, benutzerdefinierten Code selbst zu schreiben. – Kashyap
Bitte betrüge uns nicht. 'def welcome_message (Nachricht, Optionen = {: name => 'hoge'}); "# {Nachricht}, # {Optionen [: Name]}"; end 'ist der One-Liner für 'welcome_message'. Der Hauptnachteil dieses Ansatzes besteht jedoch darin, dass man 'Hash' um' 'key_valid?' 'Erweitern oder hoffen muss, dass die übergebenen Schlüssel korrekt sind. Mit der KA-Methode können Sie genau festlegen, welche Schlüssel zulässig sind. – mudasobwa
@mudasobwa Scheint mir, du liegst falsch; Mit Ihrer Funktion wird 'welcome_message (" message ", {: age => 22})' im Ergebnis kein 'hoge' anzeigen, sondern das' keyword'. Sie stellen einen Standardwert für den gesamten Hash ein, keinen Standardwert für einen definierten Schlüssel des Hash. – oldergod