JavaScript-Bibliotheken wie jQuery kombinieren 'getters' und 'setters' in der Programmierschnittstelle, zum Beispiel:
$('element').css({'color','blue'});
stellt die Farbe oder ein
$('element').css();
wird die CSS für ein Element erhalten.
Gibt es einen Namen für ein solches Muster und ist es eine gute Praxis, es in Anwendungen zu verwenden?
quelle
Es heißt "Methodenüberladung" in OO-Sprachen oder "Funktionsüberladung" in Nicht-OO-Sprachen.
Ob es sich um bewährte Verfahren handelt oder nicht, ist ein Thema, über das fast genauso viele Debatten geführt werden wie über Getters / Setters im Vergleich zu öffentlichen Mitgliedern. Diejenigen, die Pro und Contra sind, haben sich wahrscheinlich bei Sprachen, die diese Funktion hatten oder nicht hatten und auf ihre Art und Weise eingestellt sind, die Zähne geschnitten. Ich benutze es und mag die Praxis aus einer Reihe von Gründen:
get
oderset
an den Methodennamen fügt Ausführlichkeit hinzu.int
und einen fürdouble
), ist für das Ändern des Typs in der LHS einer Zuweisung (int x = foo.bar()
vs.double x = foo.bar()
) keine Codeänderung (barAsInteger()
vs.barAsDouble()
) auf der rechten Seite erforderlich, wenn die Klasse beide bereitstellt. Der Nachteil dabei ist, dass es manchmal schwierig sein kann, genau zu wissen, welche Methode aufgerufen wird, wenn man sich den Code ansieht.quelle
Da JavaScript keine tatsächlichen Eigenschaften hat (bei denen das Festlegen eines Werts tatsächlich Code ausführen kann), implementiert das Muster die Eigenschafts-IDiom. (Auch wenn du es etwas anderes nennst.)
In Sprachen, die echte Eigenschaften implementieren, würden Sie dies stattdessen tun:
Wenn Sie das JavaScript-Muster in einer Sprache verwenden würden, die Eigenschaften behandelt, würden Sie etwas Ungewöhnliches tun. Das wäre wahrscheinlich keine gute Idee. Behandeln Sie Eigenschaften so, wie die Sprache sie behandeln soll, damit Sie die anderen Personen, die mit Ihnen arbeiten, nicht verwirren.
quelle
Ich glaube, du suchst
properties
quelle
person.salary('10000')
oderperson.salary()
oder ähnlichem.Ich bin aus einem einfachen Grund total dagegen: Eine Klasse, Methode oder Funktion sollte nur eines tun - meiner Meinung nach verstößt die Kombination von
getter
undsetter
gegen diese Regel. Als Ergebnis:return
Wert der Funktion hängt davon ab, ob der Getter- oder Setter- Block ausgeführt wird. Dieser kann Sie einfach in einen Alptraum der Wartbarkeit führen. Ihre Methode sollte nur eine Art von Daten / Objekt in jedem Fall zurückkehren - oder Rückkehrnull
,false
oder wirft eineexception
im Fehlerfall.Blrfl
Antwort erwähnt.quelle