Frage

Wenn ich so etwas wie eine Schleife oder eine Reihe von if / else-Anweisungen habe, und ich mag einen Wert zurückgeben aus dem Nest (siehe unten), ist der beste Weg, dies zu tun, um den Wert zu einem Feld zuweisen oder Eigentum und das Rück das?

Siehe unten:

bool b;

public bool ifelse(int i)
{
if(i == 5)
{
b = true;
}

else
{
b = false;
}
return b;
}
War es hilfreich?

Lösung

Ja, das ist guter Stil.

Die Alternative (das wäre schlecht ) wäre dies zu tun:


public bool ifelse(int i) 
{ 
    if(i == 5) 
    { 
        return true; 
    }
    else 
    { 
        return false; 
    }
}

Der Grund mehr Rückkehrpunkte als schlechter Stil angesehen werden, ist, dass vor allem bei größeren Verfahren kann es schwierig sein, den Überblick über den Programmablauf zu halten in einem Verfahren, da es bei jeder Punkt verlassen kann. Dies kann ein Alptraum zu debuggen. Wenn Sie eine Rückgabevariable haben, die Sie jedoch zuordnen, können Sie diese Variable beobachten und genau wissen, wann es (aus einem einzigen Ort) zurückgegeben werden.

Dies ist nicht immer der Fall ist, wie bei jeder stilistisch in der Programmierung gibt es gute Seiten, um es und schlechte Seiten.

Andere Tipps

was ist

return i == 5;

Es gibt mehrere Ansichten zu diesem Thema. Ich denke, die meisten Menschen (mich eingeschlossen) sind in der Regel lieber so schnell zurückzukehren, wie Sie eine Antwort haben, und es gibt keine Arbeit mehr zu tun. Einige Leute argumentieren, dass Sie immer nur in der letzten Anweisung einer Methode zurückgeben soll. Allerdings kann es tatsächlich Dinge noch komplizierter machen in manchen Situationen.

Nach dem, was ich vorgeschlagen habe, würde Ihr Beispiel kürzer und einfacher sein:

public bool ifelse(int i)
{
if(i == 5)
{
return true
}
return false
}

Wenn b nur den Rückgabewert für Ihre Methode verwendet wird, zu berechnen, dann sollten Sie es lokale Variable (innerhalb der Methode definiert).

public bool ifelse(int i)
{
  bool b;
  /*
  Some code to calculate b
  */
  return b;
}

Wie andere haben vorgeschlagen, Wenn Ihre Methode einfach ist, würde ich insgesamt eine temporäre Variable vermeiden, mit und geben das Ergebnis, sobald sie bekannt ist. Eine allgemeine Regel wäre zu verwenden, je nachdem, welche Methode den Code macht am einfachsten zu lesen.

Ich würde sagen, wenn Sie in der Regel nur von einem Verfahren in zwei Orten zurückkehren sollten - in der Nähe von Anfang an (wie in guard Bedingungen) und in der Nähe des Endes; Wenn die Methode eine beliebige Länge hat, sollten Sie eine temporäre Variable verwenden, wie Sie erwähnt, da sonst die Codelese Leute es im Anschluss an eine härtere Zeit haben kann.

Wie erwähnt, mehr als ein return-Anweisung hat den Nachteil, sie zu finden hart werden. OTOH in einigen Fällen die hinzugefügte Logik zu dieser Rückkehr Aussage zu entkommen benötigt wird, ist schlimmer, dass das Problem des Stil ist zu lösen.

Das Hauptproblem ich mehrere Renditen wieder bewusst bin, ist, dass Sie sich schnell zu einem neuen Rückkehrpunkt einig Bereinigungsverarbeitung oder dergleichen zu tun vergessen. IMHO dies ebenso ein Problem mit dem einzigen Rücksendeformular ist, weil der Fluchtweg hat sich daran zu erinnern, dass Code und keinen anderen Code enthalten. Eine Lösung für dieses, in einigen Sprachen wie C #, ist das schließlich blockieren oder es ist ordentlicheres bilden die Profil definiert wie demonstriert hier . (OK Ich werde jetzt meine Seifenkiste bekommen)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top