In Ruby haben Methoden mit Nebeneffekten oder Methoden, die das als Parameter übergebene Objekt ändern, "!" als Postfix.
Zum Beispiel:
"SomeString".gsub!(/S/, "s")
würde das String-Objekt ändern, während
"SomeString".gsub(/S/, "s")
würde an einer Kopie des String-Objekts arbeiten und würde den Status von Objekten außerhalb der Methode nicht ändern.
Ich mag diese Konvention, und ich würde sie gerne auch in anderen Sprachen programmieren.
Meine Frage:
Bang-Methoden sind nicht dazu gedacht, "den Empfänger zu wechseln".
Wie Sie sehen, meinte Matz, sie bedeuteten "gefährlicher als die Version ohne Ausrufezeichen". Nur eine allgemeine FYI, sehen die meisten Antworten bis jetzt erwähnt, den Empfänger zu ändern.
In Scheme haben Methoden mit Nebeneffekten oder Methoden, die das als Parameter übergebene Objekt ändern, "!" als Postfix. Methoden, die Prädikate sind, haben ein "?". Andere Lispes verwenden diese Konvention manchmal auch.
In Java ist es üblich, den Rückgabetyp void
für eine Prozedur zu verwenden, die den Empfänger mutiert, und den berechneten Wert für eine Funktion zurückgibt, die dies nicht tut. (zB: String.toLowerCase () gibt eine neue Zeichenfolge zurück, Collections.sort (List) sortiert an Ort und Stelle und gibt keinen Wert zurück). Dies ist jedoch kein strenges Idiom, da häufig mutierende Prozeduren auch einen Wert zurückgeben müssen.
Ich kann nur über die Sprachen sprechen, die ich benutzt habe, aber ... ich kenne keine solche Konvention in Python, Perl, Java, PHP, Javascript oder Bash (Shell) Scripting.
Einige Programmierer finden es möglicherweise nützlich, ein Präfix oder Postfix auf Funktionsnamen zu setzen, um diejenigen anzugeben, die ihre Argumente mutieren, im Gegensatz zu denen, die neue "Versionen" der Argumente erstellen und sie zurückgeben. Wenn Sie einer dieser Leute sind, gehen Sie gleich weiter. Aber noch einmal, mir ist nichts Standard bekannt (außer dem const
, was Steven in C und C ++ erwähnt hat).
Es gibt eine Konvention zum Markieren von Parametern in anderen Sprachen (speziell C ++). Wenn Sie eine Methode aufrufen, markieren Sie Parameter, die nicht mit const geändert werden: z.
%Vor%Tags und Links ruby naming-conventions