Ich bin Neuling in Programmierung und Ruby. Ich benutze eine Methode, um herauszufinden, wer jemand geheimer Weihnachtsmann ist. Die Methode verwendet String- und Integer-Argumente (Vorname oder ID). Ich habe einen anderen Code für String- und Integer-Argumente. Dies führt dazu, dass dieselbe Codezeile für verschiedene Argumente wiederholt wird (secret = PERSONS [person [: santa] -1]).TROCKEN in Ruby - Ist es in Ordnung, eine Codezeile zu wiederholen?
Meine Fragen sind zweifach:
Ist diese Art der Wiederholung gegen DRY Prinzipien? Gibt es einen anderen Weg, die Wiederholung zu vermeiden?
Sehen Sie, dass ich local_variable secret außerhalb des Iterators initialisiert habe und den Iterator verwendet habe, um an diese Variable zu übergeben. Ist das der effizienteste Weg, dies zu tun? Kann ich einfach einen Wert vom Iterator zurückgeben, ohne eine lokale Variable zu initialisieren?
Mein Code ist unten. Außerdem füge ich einen Beispiel-Hash der Daten (PERSONS) bei, auf dem ich den Code ausführe.
def who_is_secret_santa(first_name)
secret = nil
PERSONS.each do |person|
if first_name.is_a? String
if person[:first_name] == first_name
secret = PERSONS[person[:santa]-1]
end
elsif first_name.is_a? Integer
if person[:id] == first_name
secret = PERSONS[person[:santa]-1]
end
else
puts "Bad argument"
end
end
puts "#{first_name}'s Secret Santa " + (secret ? "is #{secret[:first_name]}" : "not found")
end
[{:id=>1,
:first_name=>"Luke",
:last_name=>"Skywalker",
:email=>"<[email protected]>",
:santa=>4},
{:id=>2,
:first_name=>"Leia",
:last_name=>"Skywalker",
:email=>"<[email protected]>",
:santa=>7},
{:id=>3,
:first_name=>"Toula",
:last_name=>"Portokalos",
:email=>"<[email protected]>",
:santa=>5},
{:id=>4,
:first_name=>"Gus",
:last_name=>"Portokalos",
:email=>"<[email protected]>",
:santa=>2},
{:id=>5,
:first_name=>"Bruce",
:last_name=>"Wayne",
:email=>"<[email protected]>",
:santa=>3},
{:id=>6,
:first_name=>"Virgil",
:last_name=>"Brigman",
:email=>"<[email protected]>",
:santa=>1},
{:id=>7,
:first_name=>"Lindsey",
:last_name=>"Brigman",
:email=>"<[email protected]>",
:santa=>6}]
einen Blick auf diese: http://rubyofftherails.blogspot.com.br/2016/05/better-algorithms.html –
Es geht nicht um Ihren speziellen Code, aber können Sie mit dem DRY-Prinzip helfen. –