In der Java-Methode wird die Ausnahme anstelle der Rückgabe ausgelöst

8

Ich schreibe Deque class auf Java, nach Algorithmen, Teil 1 auf Coursera. Und zur Zeit hat mein Array-basiertes Deque die Methode removeLast() :

%Vor%

Wenn head == tail bedeutet, dass Deque leer ist und ich die Ausnahme gemäß der Hausaufgabenspezifikation am Ende der Methode anstelle der return -Anweisung erhalte. Dieser Code gibt direkte Absicht über Invarianten ( head != tail ).

Auf der anderen Seite kann die Methode folgendermaßen umgeschrieben werden:

%Vor%

Meiner Meinung nach ist removeLast deutlicher aus diesen Gründen geschrieben:

  1. Beachten Sie das pessimistische Szenario - always fail, only if ... , was ein zuverlässigerer Ansatz ist, besonders wenn der Methodencode größer wird und komplizierter wird.
  2. Gibt eine klarere Verbindung zwischen dem invarianten tail != head und dem nachfolgenden if {} Codeblock.

Ich habe folgende Fragen:

  1. Was ist ein besserer Ansatz?
  2. Wird es als angemessen / gute Praxis angesehen, wie removeLast ?
  3. zu schreiben?
  4. Was gilt als optimale Vorgehensweise für Java? Gibt es einen Code-Stil (ich konnte keinen finden)?
likern 24.07.2015, 07:24
quelle

3 Antworten

2

Es gibt keine falsche Antwort. In GrepCode finden Sie jede Geschmacksrichtung, die Sie vorschlagen:

  1. Innerhalb eines if mit dem ! = -Operator und am Ende der Methode:

E java.util.PriorityQueue.next ()

%Vor%
  1. Innerhalb eines if mit dem == Operator

E org.flentlenium.core.domain.FluentList.first ()

%Vor%     
zeugor 24.07.2015 07:55
quelle
1

Der Grund dafür, dass es seltsam aussieht, liegt darin, dass Sie den Block else Ihres Blocks if weglassen, der entweder den Rest enthält, der hinter dem Block if in Ihren beiden Methoden steht. Der Grund dafür ist, dass die ausgelöste Ausnahme den Fluss Ihrer Methode stört.

Ich denke, es ist besser, sich nicht darauf zu verlassen und einfach nett zu sein und die if-else Blöcke intuitiv zu benutzen.

%Vor%

Ein weiterer Grund, warum ich nicht wirklich Ausnahmen vor dem Ende einer Methode werfen möchte, ist, dass ich stark an das Konzept von a single point of exit glaube und es konsequent benutze, was bedeutet, dass ich die Methode nicht irgendwo in der Mitte belasse was meiner Meinung nach für jemanden, der mit dem Code nicht vertraut ist, schwieriger zu lesen ist.

Ein Ort, an den Sie Ihren Wert (oder die ausgelösten Ausnahmen) zurückgeben können: ganz unten in Ihrer Methode.

    
klaar 24.07.2015 07:32
quelle
1

Ihr Code wird besser lesbar, wenn Sie else explizit angeben, unabhängig von Ihrer Wahl.

Dann gibt es das Dilemma

%Vor%

versus

%Vor%

Hier bevorzuge ich stark den zweiten. Wenn ich den "komplizierten Teil" der if-Anweisung lese, möchte ich wissen, warum ich mich tatsächlich in if befinde. Beim Lesen der ersten Variante wird der ganze Grund für das if nur dann offensichtlich, wenn Sie die Ausnahme werfen.

Ich denke, Sie könnten das auch lösen, indem Sie

schreiben %Vor%

Aber ich bevorzuge die Version, die die Ausnahme auslöst, sobald Sie wissen, dass etwas nicht stimmt.

    
Stef 24.07.2015 08:04
quelle

Tags und Links