2009-08-28 13 views
6

Es ist sehr häufig in Ruby zu sehen, Methoden, die einen Hash-Parameter erhalten, anstatt nur die Parameter an die Methode übergeben.Hashes vs Mehrere Params?

Meine Frage ist - wann verwenden Sie Parameter für Ihre Methode und wann verwenden Sie einen Parameter-Hash?

Ist es richtig zu sagen, dass es eine gute Praxis ist, einen Parameter-Hash zu verwenden, wenn die Methode mehr als ein oder zwei Parameter hat?

Antwort

0

Ein offensichtlicher Anwendungsfall ist, wenn Sie eine Methode in einer untergeordneten Klasse überschreiben, sollten Sie Hashparameter für die Parameter der übergeordneten Methode verwenden, wenn Sie sie aufrufen.

4

Ich benutze Parameter-Hashes, wenn sie eine Reihe von Optionen darstellen, die semantisch zusammengehören. Alle anderen Parameter, die direkte (oft erforderliche) Argumente für die Funktion sind, gebe ich eins nach dem anderen ab.

+1

+1 - nichts in einem Parameter-Hash sollte erforderlich sein. Optionale Parameter könnten mit Standardwerten benannt werden, aber ich tendiere dazu, sie in einem Hash zu übergeben und bei Bedarf im Haupttext der Methode Standardwerte festzulegen. –

1

Sie können einen Hash verwenden, wenn es viele optionale Parameter gibt, oder wenn Sie beliebige Parameter akzeptieren möchten, wie Sie in den Methoden von vielen Rails sehen können.

0

Auf einer anderen Anmerkung, und dies nicht nur auf Rubin, sondern auf alle Sprachen:

In APIs, die im Fluss sind, ist es manchmal nützlich ist, einige oder alle Parameter an eine Funktion zu erklären, wie ein einzelner Parameter Objekt (in Ruby könnten dies Hashes sein, in C-Structs und so weiter), um die API-Stabilität zu erhalten, sollte sich die Menge der akzeptierten Argumente in zukünftigen Versionen ändern. Der offensichtliche Nachteil ist jedoch, dass die Lesbarkeit drastisch reduziert wird, und ich würde dieses "Muster" niemals verwenden, wenn ich es nicht wirklich müsste.

1

Wenn Sie mehr als 2 Argumente haben. Sie sollten anfangen, Hash zu verwenden. Dies ist eine gute Vorgehensweise, die in sauberem Code klar erklärt wird link text