Gibt es eine Alternative zu Hyper-eingerücktem Code?

8

Ich laufe oft auf Code, der viele Überprüfungen durchführen muss und wird dann mindestens fünf oder sechs Level eingerückt, bevor ich wirklich etwas mache. Ich frage mich, welche Alternativen existieren.

Unten habe ich ein Beispiel von dem, worüber ich rede, geschrieben (das ist kein tatsächlicher Produktionscode, nur etwas, was mir von Kopf hoch kam).

%Vor%     
Kip 11.12.2008, 16:52
quelle

7 Antworten

16

Weitere Informationen finden Sie unter Pfeilcode abflachen .

  
  1. Ersetzen Sie die Bedingungen durch Wächter   Klauseln.
  2.   
  3. Zerlege bedingte Blöcke in   separate Funktionen.
  4.   
  5. Konvertieren Sie negative Schecks in   positive Kontrollen.
  6.   
    
Galwegian 11.12.2008, 16:54
quelle
8

Zurück früh:

%Vor%     
ieure 11.12.2008 16:54
quelle
7

Ja, es gibt eine Alternative.

Und bitte kodiere niemals so (außer du pflegst deinen eigenen Code)

Ich musste diesen Code beibehalten und bin genauso schrecklich wie ein Charles_Bronsonn Film (manche Leute mögen diese Filme allerdings)

Diese Art von Code kommt normalerweise aus prozeduralen Sprachen wie C (ist C prozedural: P). Wie auch immer.

Das war der Grund, warum ObjectOrientedProgrammng Mainstream wurde. Sie können Objekte erstellen und ihnen einen Status hinzufügen. Erstellen Sie Vorgänge mit diesem Status. Sie sind nicht nur Eigentümer.

Ich weiß, dass Sie dieses Szenario erfunden haben, aber die meisten dieser Bedingungen sind Geschäftsregeln !! . Meistens ändern sich diese Regeln, und wenn der ursprüngliche Entwickler nicht mehr da ist (oder ein paar Monate sind schon vergangen), wird es keinen machbaren Weg geben, diesen Code zu modifizieren. Die Regeln sind schwer zu lesen. Daraus entspringt viel Schmerz.

Was können Sie tun?

1.) Behalten Sie den Status des Objekts INNERHALB des Objekts mit privaten Elementvariablen (AKA-Attribute, Eigenschaften, Instanzenvariablen usw.)

2.) Machen Sie die Methoden privat (das ist, wofür diese Zugriffsstufe ist), so dass niemand sie versehentlich aufrufen und das Programm in den NullPointerException-Land setzen kann.

3.) Erstellen Sie Methoden, die definieren, was die Bedingung ist. Das nennen sie selbstdokumentierenden Code

Also statt

%Vor%

Erstellen Sie eine Methode

%Vor%

Ich weiß, dass es ausführlich aussieht, aber es dem Menschen ermöglicht, den Code zu lesen. Der Compiler kümmert sich nicht um Lesbarkeit.

Wie sieht es also aus, als ob Sie mit diesem Ansatz übertrieben wären?

So.

%Vor%

Ich weiß, es sieht nach mehr Kodierung aus. Aber denk darüber nach. Die Regeln sind fast menschenlesbar

%Vor%

Kann fast wie

gelesen werden %Vor%

Und indem Sie die Regeln klein halten, kann der Programmierer sie sehr leicht verstehen und keine Angst haben etwas zu bremsen.

Viel mehr kann darüber gelesen werden: Ссылка

    
OscarRyz 11.12.2008 17:49
quelle
2

Ja, Sie können die Einzüge wie folgt entfernen:

Führen Sie die Überprüfungen im Wesentlichen sequenziell durch und vergleichen Sie sie mit Fehlern anstatt mit Erfolgen. Es entfernt die Verschachtelung und erleichtert das Folgen (IMO).

%Vor%     
Andrew Rollings 11.12.2008 16:56
quelle
1

Wenn Sie den Stopp nicht verarbeiten müssen, binden Sie ihn nicht ein.

Zum Beispiel können Sie Folgendes tun:

%Vor%

Angenommen, Sie verwenden eine Sprache wie Java, die die Bedingungen anordnet.

Alternativ könnten Sie:

%Vor%

Für komplexere Fälle.

Die Idee besteht darin, von der Methode zurückzukommen, wenn Sie nicht verarbeiten müssen. Einbetten in eine große verschachtelte if ist fast unmöglich zu lesen.

    
Stephane Grenier 11.12.2008 16:58
quelle
1

Sie können einen Teil der Verschachtelung durch die Verwendung von Schutzklauseln entfernen.

%Vor%

Ändern Sie alle return ""; -Anweisungen, die ich verwendet habe, um den Punkt zu veranschaulichen, auf Anweisungen, die eine beschreibende Variante von Exception ausgeben.

    
Bill the Lizard 11.12.2008 16:54
quelle
0

Wenn es sich nur um ein Problem mit der Lesbarkeit handelt, können Sie es klarer machen, indem Sie die Verschachtelung auf eine andere Methode verschieben. Zusätzlich zum Wächterstil konvertieren, wenn Sie möchten.

%Vor%     
Jamal Hansen 11.12.2008 17:08
quelle