Ich schreibe Deque
class auf Java, nach Algorithmen, Teil 1 auf Coursera. Und zur Zeit hat mein Array-basiertes Deque
die Methode removeLast()
:
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:
always fail, only if ...
, was ein zuverlässigerer Ansatz ist, besonders wenn der Methodencode größer wird und komplizierter wird. tail != head
und dem nachfolgenden if {}
Codeblock. Ich habe folgende Fragen:
removeLast
? Es gibt keine falsche Antwort. In GrepCode finden Sie jede Geschmacksrichtung, die Sie vorschlagen:
E java.util.PriorityQueue.next ()
%Vor% 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.
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.
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.
Tags und Links java coding-style