Verwendung von return in langen if-elsif-else-Anweisungen (Python)

7

Ich verwende Python für mein Beispiel, aber meine Frage bezieht sich auf das Programmieren von Sprachen im Allgemeinen.

%Vor%

(Dies ist nur ein Beispiel. Meine Funktionen heißen nicht do_something_x .)

Würde es eine schlechte Programmierpraxis sein, eine Rückkehr in das Else zu machen? Wäre es eine bessere Idee,

zu setzen %Vor%

in jedem der if / elifs?

    
D K 22.07.2011, 21:54
quelle

5 Antworten

11

Das Hauptproblem, das ich mit Ihrem Code sehe, ist, dass der Fehlerfall mehr als halb unten im Funktionskörper verborgen ist. Es macht den Code schwierig zu lesen. Da Sie die Argumente für die Funktion validieren, sollten Sie das zuerst tun.

Meine Präferenz im Falle eines ungültigen Arguments besteht darin, eine entsprechende Ausnahme wie ValueError auszulösen. Ohne zu wissen, was Ihre Funktion macht oder was do_error tut, ist es schwer mit absoluter Sicherheit zu sagen, dass dies für Ihren Fall gilt. Im Allgemeinen kann eine Funktion jedoch keine fehlerhaften Argumente erhalten. Der Anrufer gab die Argumente; Legen Sie also dem Anrufer die Verpflichtung auf, sich von diesem Fehler zu erholen.

Auch hier ist ein Idiom, mit dem Sie lange Listen von elif s vermeiden können:

%Vor%     
Ben James 22.07.2011, 22:07
quelle
8

Auf keinen Fall nicht identischen Code in jede if -Klausel kopieren.

Wie wäre es mit:

%Vor%

Dies erfordert keine lange if elif else . Es ist auch klar, do_something_4() etc. passiert nur, wenn Eier 1, 2 oder 3 ist.

    
agf 22.07.2011 22:08
quelle
3

Wie wäre es mit:

%Vor%     
Ned Batchelder 22.07.2011 22:00
quelle
2

Sind Sie wirklich sicher, dass do_something_n wirklich mit do_something_m zusammenhängt?

Wenn ja, benutze do_something(var, n) und benutze den gleichen Code für alles mit ein paar if's (nachdem das ganze Konzept wirklich verwandt ist, oder?).

Wenn nicht, teilen Sie die Funktionen in wirklich nützliche und eigenständige Funktionen auf.

Beispiel warum das (wahrscheinlich) schlecht ist:

%Vor%

Nun, jeder sollte sehen, dass dies printn(n) oder etwas Ähnliches sein sollte.

Und die andere Wahrscheinlichkeit:

%Vor%

Diese Aktionen sind wahrscheinlich nicht verwandt und sollten in ihre eigenen Funktionen gehören.

    
orlp 22.07.2011 22:02
quelle
1

Was Sie jetzt tun, ist keine schlechte Programmierpraxis, aber es wäre eine schlechte Übung, Code zu kopieren, indem Sie die drei Funktionsaufrufe in jede if -Anweisung einfügen.

Manche Leute ziehen es vor, einen einzigen Ausgangspunkt für ihre Funktionen zu haben. In diesem Fall würde ich Folgendes vorschlagen:

%Vor%     
Andrew Clark 22.07.2011 22:05
quelle