it-swarm.com.de

Ist es eine gute Praxis, die zurückgegebene Variable "Ergebnis" zu nennen?

Ist es eine gute Praxis, die Variable aufzurufen, die eine Methode mit dem Variablennamen result zurückgibt?

Zum Beispiel:

public Zorglub calculate() {
    Zorglub result = [...]
    [...]
    return result;
}

Oder soll ich es nach Typ benennen?

public Zorglub calculate() {
    Zorglub zorglub = [...]
    [...]
    return zorglub;
}

Ich habe beide in freier Wildbahn gesehen. Wenn ich einen auswählen muss, aus welchen Gründen könnte ich den ersteren oder letzteren (oder einen besseren Namen) bevorzugen?

Ich denke hauptsächlich an Java.

44
Nicolas Raoul

Wenn dies eine Methodenvariable ist, hängt dies wirklich von der Lesbarkeit ab.

Da Sie den Typnamen sowohl in der Variablendeklaration als auch im Methodenrückgabetyp bereits haben, können Sie auch result verwenden - er beschreibt die Rolle der Variablen.

48
Oded

Das Kreuzlesen wird erleichtert, wenn die Variable result heißt. Dies macht Ihre Absicht klar.

40
mouviciel

Wenn ich eine Rückgabevariable benötige (was eigentlich selten vorkommt), nenne ich sie immer ret und definiere sie immer direkt unter der Funktion Kopf. Die Funktion hat bereits einen Namen, der alles darüber aussagt, was sie zurückgibt.

Wenn ich myFunction habe, könnte ich die Rückgabevariable myFunctionReturnValue benennen, um genau dasselbe zu sagen, nur ich würde muss es jedes Mal explizit sagen. Da die Funktionen im Allgemeinen kurz sein sollten, ist eine solche Aussage nicht erforderlich. Und selbst wenn ich den Überblick verliere, kann ich zur Deklaration springen und lande direkt unter der Funktionsdefinition.

Aber jeder andere Name, der nicht implizit (wie ret oder result) oder explizit (wie myFunctionReturnValue oder myFunctionResult) besagt, dass dies der ist Die Rückgabevariable für aktuelle Funktionen ist zu allgemein.

In Ihrem zweiten Beispiel ist zorglub eine schreckliche Wahl. Die Deklaration sagt mir nur, dass Sie eine Variable erstellt haben, deren Name der Typanmerkung direkt neben dem Namen entspricht. Es ist ungefähr so ​​hilfreich wie int someInt oder Zorglub z.

In Ihrem ersten Beispiel sehe ich beim Betrachten des Codes zuerst den Funktionsnamen, der mir sagt, dass diese Funktion ein Zorglub berechnet. Wenn ich die zweite Zeile lese, sehe ich "ok, hier ist der Zorglub, der zurückgegeben wird, aber offensichtlich nicht sofort zurückgegeben werden kann und daher in der Variablen result gespeichert ist" (als Seite) Hinweis: Wenn Sie den Wert nicht neu zuweisen möchten, deklarieren Sie am besten die Variable final, um dies mitzuteilen. Dann denke ich: "Lassen Sie uns nun sehen, was damit passiert, bevor er zurückgegeben wird." Anders als im ersten Beispiel muss ich nicht weiter lesen, um zu wissen, dass dies die Variable ist, die zurückgegeben wird und das Ich möchte dem Funktionskörper folgen, wenn ich ihn verstehen möchte.

Vielleicht möchten Sie sich über Spartan Programming informieren, was eher mit Ihrer Frage zusammenhängt.

17
back2dos

In Ihrem zweiten Beispiel verbinden Sie das Typ des Ergebnisses mit was es ist.

Zorglub zorglub;

sagt mir nur, dass es zweimal ein Zorglub ist. Dreimal, wenn ich mir die Mühe mache, den Rückgabetyp der Methode zu lesen. Jedoch,

double variance;

gibt mir zum Beispiel einen Hinweis darauf, was der Rückgabewert bedeutet in Bezug auf die Programmsemantik bedeutet. Es kann klarer sein oder auch nicht, als es nur result zu nennen, abhängig von der Größe der Methode - das ist ein Beurteilungsaufruf für jede IMO-Methode.

12
Useless

Wenn Sie mit vielen Zorglub-Objekten in Ihren Methoden spielen, "könnten" Sie einen Fehler machen und das falsche zurückgeben, oder/und Sie könnten versucht sein, die anderen zu benennen zorglub1, zorglub2, usw.

Wenn Sie es result nennen, besteht für Sie keine Chance, einen solchen Fehler zu machen. Außerdem finde ich, dass das ein guter Name ist; Ich habe auch returnedValue oder returnedObject mehrmals gesehen, es ist auch klar, wenn auch etwas langwierig.

8
Jalayn

Ich persönlich bin nicht ganz zufrieden damit, result als Variablennamen zu verwenden. Fairerweise sagt es mir, dass der zugehörige Wert das Ergebnis einer Berechnung ist - ich denke jedoch, dass dies ungefähr (oder mehr) 90% der in einem Programm verwendeten Variablen/Felder entspricht.

Darüber hinaus kann es, wie mehrere andere Antworten vermerkten, verwendet werden, um den Wert zu markieren, der von einer Methode/Funktion zurückgegeben werden soll. Wenn ich jedoch meine Methoden kurz halte, mich darauf konzentriere, nur eine Sache zu tun und konsequent auf einer einzigen Abstraktionsebene zu bleiben, habe ich nicht viele lokale Variablen und es ist trivial zu sehen, was eine Methode zurückgeben wird.

Daher ziehe ich es vor, meine Methoden kurz und sauber zu halten und meine Variablen zu benennen, um das Bedeutung des Wertes auszudrücken, den sie enthalten, und nicht seine lokale Rolle innerhalb der einschließenden Methode. Jedoch (z. B. im Legacy-Code) Zorglub result ist sicherlich leichter zu verstehen als Zorglub zorglub.

5
Péter Török

soll ich es nach seinem Typ benennen?

Nein niemals. Dies wird als System-Ungarisch bezeichnet und ist durch die Idee, ein Programm zu verwenden, das den Typ jeder Variablen jederzeit anzeigen kann, trivial veraltet.

1
DeadMG

Wann immer Sie irgendetwas im Code benennen müssen, sollten Sie Namen angeben, die beschreibend, aussagekräftig und lesbar sind. Der Fall einer Rückgabevariablen ist ein besonders gutes Beispiel dafür, wo Menschen dazu neigen, sich über die Benennung zu beklagen.

Wenn Sie eine Funktion haben, die eindeutig benannt ist und Sie nur eine einzige Codezeile benötigen, können Sie die Benennung vollständig überspringen. Es ist immer das Ideal, das Sie anstreben sollten, Ihre Methoden kurz und zielgerichtet zu gestalten. Es ist jedoch der Fall, dass Sie manchmal eine Funktion mit mehreren Codezeilen ausführen müssen. In diesen Fällen ist es immer ratsam, Ihre Variable so zu benennen, dass sie dem Zweck Ihrer Funktion entspricht.

Wenn der Zweck der Funktion darin besteht, das Ergebnis einer Berechnung oder eines Entscheidungsalgorithmus zurückzugeben, ist result ein vollkommen angemessener Name für Ihre Variable. Was ist jedoch, wenn Ihre Funktion ein Element aus einer Liste zurückgibt? Was ist, wenn Ihre Funktion einem anderen Zweck dient, der nichts mit Mathematik oder Listen zu tun hat? In diesen Fällen ist es besser, der Variablen einen aussagekräftigen Namen zu geben, der sich darauf bezieht, warum die Funktion erstellt wurde. Natürlich können Sie das Ergebnis einfach verwenden, wenn Sie möchten, da es sich um einen Namen handelt, der wahrscheinlich nicht mit anderen Elementen in Konflikt gerät. Aus Sicht der Lesbarkeit ist es jedoch sinnvoller, Ihre Variable aussagekräftiger und im Kontext zu benennen.

1
S.Robins

Ich persönlich verwende den Namen result für den Wert, der von der Funktion/Methode zurückgegeben werden soll. Es wird deutlich, dass es sich um den zurückzugebenden Wert handelt. Die Benennung nach Typ erscheint nicht sinnvoll, da möglicherweise mehr als eine Variable desselben Typs vorhanden ist.

1
Juraj Blaho

Was ist der Unterschied? Es sind nur zwei verschiedene Wörter, die das Gleiche bewirken. Das eigentliche Problem ist also, welches für Sie klarer klingt.

Das "Ergebnis" oder "Zorglub".

Ich würde es vorziehen, ZorglubResult für einen Starter zu verwenden, um zu sehen, dass Ergebnis kehrt von zurückZorglub einfacher mit anderen Ergebnissen zu vergleichen ist und es ein Ergebnis ist, wie Sie sehen können. .

1
Berker Yüceer

In einer rekursiven Funktion ist es oft effektiv, das Ergebnis von Schritt zu Schritt zu übertragen, um eine Tail-Call-Optimierung zu erzielen. Um dem Benutzer zu signalisieren, dass er keinen Parameter angeben muss, kann es sinnvoll sein, einen Parameter "Ergebnis" zu nennen:

def removeOccurence [A] (slice: Seq[A], original: Seq[A]) = {
  @scala.annotation.tailrec
  def remove (leftOriginal: Seq[A], result: Seq[A]) : Seq[A] =
    trimStart (slice, leftOriginal) match {
      case (h :: tail) => remove (tail, h +: result)
      case (Nil)       => result.reverse
    }
    remove (original, Nil)
}

Aber öfter benutze ich "Carry" und "Sofar", die ich in freier Wildbahn gesehen habe und die die Idee in den meisten Fällen noch ein bisschen besser tragen.

Ein zweiter Grund ist natürlich, wenn Ihr Thema das Wort "Ergebnis" vorschlägt, beispielsweise wenn Sie eine arithmetische Auswertung durchführen. Sie können die Formel analysieren, Variablen durch Werte ersetzen und am Ende ein Ergebnis berechnen.

Ein dritter Grund wurde bereits angegeben, aber ich habe eine kleine Abweichung: Sie schreiben eine Methode, die einen Job ausführt, sagen wir, sie wertet eine Form von '' max '' aus.

def max = {
  val result = somethingElseToDo
  if (foo) result else default 
}

Anstatt das Ergebnis '' result '' aufzurufen, könnten wir es '' max '' nennen, aber in einigen Sprachen können Sie beim Aufrufen einer Methode Klammern weglassen, sodass max ein rekursiver Aufruf der Methode selbst wäre.

Im Allgemeinen würde ich einen Namen bevorzugen, der sagt, was das Ergebnis ist. Wenn dieser Name jedoch bereits vergeben ist, möglicherweise von mehr als einer Variablen, einem Attribut oder einer Methode, da ein GUI-Feld, eine Zeichenfolgendarstellung, eine numerische und eine für die Datenbank vorhanden ist, erhöht die Verwendung einer anderen die Verwechslungsgefahr. Bei kurzen Methoden mit 3 bis 7 Zeilen sollte das Ergebnis für einen Namen kein Problem sein.

0
user unknown

In Object Pascal ist dies keine Wahl. Sie müssen der Variablen Result irgendwo im Code der Funktion einen Wert zuweisen.

Beispiel:

function AddIntegers( A,B: Integer): Integer;
begin
  Result := A + B; 
end; 

Für mich ist es also ziemlich natürlich, eine Variable "Ergebnis" (oder "Retorno", wie ich es auf Portugiesisch buchstabiere, um Namenskonflikte mit den reservierten Wörtern der Sprache zu vermeiden) zu haben, um einen Rückgabewert zu erhalten.

Wenn es sich um einen sehr einfachen Ausdruck in einer von C abgeleiteten Sprache handelt, werde ich natürlich keine Ergebnisvariable deklarieren und den Ausdruck direkt zurückgeben.

0
Fabricio Araujo

es ist nicht nur, wie Sie das Ergebnis nennen (ich bin speziell für 'r'), sondern auch, wie es verwendet wird. Wenn Sie beispielsweise eine Rückgabevariable haben, sollte jede return-Anweisung diese zurückgeben. habe nicht 'return r;' am Ende, aber streuen Sie Dinge wie 'return m * x + b; "über die gesamte Methode/Funktion. Verwenden Sie" r = m * x + b; return r; "stattdessen.

0
rbp

Ich mag es, sie zu kombinieren, zeige, was es ist und dass es zurückgegeben werden soll.

in Ihrem Beispiel wäre es also resultZorglub

wenn das, was es ist, nicht wirklich wichtig ist, dann wäre es nur ein Ergebnis (nicht resultString)

0
KeesDijk

Ich sehe keinen großen Unterschied zwischen dem Festlegen eines Rückgabewerts an einem bestimmten Punkt und dem Verwenden von Bedingungen zum Überspringen des gesamten Codes, der ihn möglicherweise ändert, und dem sofortigen returning, also gehe ich zur direkten Rückgabe Es gibt keine Variable result.

Wenn Sie einen Zwischenwert haben, der durch bedingten Code geändert werden kann oder nicht, ist dies (noch) kein Ergebnis, daher sollte er auf keinen Fall so benannt werden.

0
Simon Richter

Als ich in C++ gearbeitet habe und ich denke, dass dies in Java, das ich getan habe, zutreffen kann).

z.B.

int Width() const
{
    Requires(....);
    Requires(....);

    //calculation

    Ensures(...);
    Ensures(...);
    return Result;
}

Dies ist vertraglich festgelegt, da sich der Sicherstellungsblock am Ende der Methode befinden sollte. Aber die Rückkehr muss zuletzt sein. Wir hatten die Regel, dass return Result das einzige war, was dem Sicherungsblock folgen konnte.

0
ctrl-alt-delor