So etwas wie das
%Vor% Wenn das ein Anti-Muster ist, wie heißt es?
Das Problem (möglicherweise) ist, dass Sie implizit -Parameter ändern und den geänderten Wert verwenden.
Ich möchte nur wissen, wie dieses Anti-Pattern bekannt ist
Danke
Es ist ein Nebeneffekt .
Diese sind normalerweise nicht gut und werden als Code-Geruch angesehen, da es schwierig ist, über den Code nachzudenken und ihn zu verstehen.
Dieses Muster ist jedoch manchmal nützlich.
C # kodifizierte die Schlüsselwörter ref
und out
speziell , um zu zeigen, dass von einer Methode erwartet wird, dass sie Nebenwirkungen hat.
Ich habe einen anderen Standpunkt.
Trotz der kleinen Probleme, die Parameter ändern können, wenn sie den Debugging-Prozess oder die Code-Lesbarkeit einführen, macht es keinen Sinn, diese Praxis als "Anti-Pattern" zu bezeichnen.
Basierend auf modernem OO-Sprachen-Design wie Java oder C # unterstütze ich die Idee, dass, wenn es hässlich, falsch oder nicht empfehlenswert ist, Parameterwerte zu ändern, sie definierte Typparameter als Kopie von Instanzen gemacht haben , anstatt Referenzen .
Und wenn ich mit dem, was Oded gesagt hat, nicht einverstanden bin, sollte das Schlüsselwort ref oder out nur in Kontexten verwendet werden, in denen Sie wirklich den gesamten Instanzwert ändern möchten. Ersetzen Sie es vollständig . Um eines dieser Schlüsselwörter zu verwenden, nur um zu sagen "Hey Mann, die Parameter Werte können sich während der Ausführung Stack ändern" klingt ein bisschen nachlässig für mich. Was ist, wenn einer Ihrer Kunden die Funktionssignatur sieht und wirklich glaubt, dass er das Ganze ersetzen kann? (in einer Situation, die nicht erwartet wird).
Angenommen, der Typ von parameter
ist nicht wirklich object
, sondern ein Klassentyp, der eine beschreibbare Eigenschaft oder ein Feld namens SomeProperty
enthält. Wenn die Methode eintritt, wird der Wert von parameter
sein die Identität eines Objekts (z. B. das Objekt 459,192, das seit Beginn des Programms erstellt wurde). Soweit ich das beurteilen kann, wird der Wert dieses Parameters (dh die Identität des Objekts, auf das er sich bezieht) in der gesamten Methode gleich bleiben.
Das Ändern des Wertes des übergebenen Parameters (z. B. parameter = someOtherObject
) kann ein Code-Geruch sein es sei denn die Methode ist ausreichend klein, dass es offensichtlich ist, was vor sich geht.
Tags und Links c# anti-patterns