Ändern Sie den Wert des Parameters innerhalb der Methode, ist dies ein Anti-Pattern?

8

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

    
roundcrisis 28.12.2012, 12:37
quelle

3 Antworten

16

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.

    
Oded 28.12.2012, 12:43
quelle
0

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).

    
João Paulo Navarro 28.12.2012 13:42
quelle
0

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.

    
supercat 08.01.2013 00:28
quelle

Tags und Links