Geschmacksfrage: If-Abfrage mit Prozedurabbruch oder If über ganze Prozedur?

acquire

Mitglied
Hallo,

ich wüsste gerne, ob folgende Beispielvarianten nur reine Geschamckssache sind, oder irgendwelchen Unterschied in Sachen Performance etc. ergibt.


Beispiele, die beide das gleiche machen:
Code:
    Private Sub MeineProzedur()
        If (ListView1.SelectedIndices.Count > 0) Then
            
'Mach was...

        End If
    End Sub
Code:
    Private Sub MeineProzedur()
        If (ListView1.SelectedIndices.Count = 0) Then
            Exit Sub
        End If
            
'Mach was...

    End Sub

Was würdet ihr verwenden - und warum?

Ich bin auf eure Antworten sehr gespannt!
 
Ich mach eigentlich immer das untere, einfach weil der restliche Code dann nicht so stark eingerückt ist. Außerdem kann man das natürlich auch als Einzeiler schreiben:

Code:
Private Sub MeineProzedur()
        If ListView1.SelectedIndices.Count = 0 Then Exit Sub
            
        'Mach was...
End Sub

Außer natürlich, ich muss das mit einer anderen Bedingung verbinden, dann benutz ich normalerweise die erste Methode und ein AndAlso... wenn nämlich das erste falsch ist, wird das zweite gar nicht getestet...
 
Performance-Unterschiede: Nein.

Ad Einrückung: Auf den ersten Blick ist die erste Variante für den Entwickler intuitiver, da dieser sofor sieht, dass etwas ausgeführt wird, wenn die Bedingung zutrifft.

Auf der anderen Seite sollen zu Beginn einer Methode die "Pre-Conditions" überprüft werden (typische Beispiele führen zu einer ArgumentException, ...).

Fazit: Es hängt also grundsätzlich davon ab, was genau man machen möchte in Kombination wie übersichtlich der Code sein soll.
 
Ich bin auch eher ein Freund der ersten Variante, da ich ein Anhänger folgender Maxime bin:
"Eine Prozedur sollte immer nur einen Ausgang haben"

Exit Sub erinnert mich zu sehr an ein Goto Sprungmarke, mit Sprungmarke=letzte Zeile vor End Sub, und ein Goto wollen wir doch mal schön vermeiden.
 
Hallo zusammen,

mal von Geschmack abgesehen, ist da doch grundsätzlich ein funtionaler Unterschied, oder
Falls "...Count" mal kleiner 0 ist (so dies denn überhaupt passieren kann), würde ja im ersten Fall (> 0) nix gemacht, im zweiten Fall (= 0) aber schon

Gruß
Klaus
 
Hallo zusammen,

mal von Geschmack abgesehen, ist da doch grundsätzlich ein funtionaler Unterschied, oder
Falls "...Count" mal kleiner 0 ist (so dies denn überhaupt passieren kann), würde ja im ersten Fall (> 0) nix gemacht, im zweiten Fall (= 0) aber schon

Gruß
Klaus

In einer Liste können wenigstens 0 Einträge ausgewählt sein. Ein negativer Wert ist in diesem Beispiel sicher nicht möglich. Sollte es doch mal passieren wird uns der Himmel auf den Kopf fallen.

lg,..

p.s.: Persönlich bin ich für Variante 2, und zwar aus dem von Norbert bereits genannten Grund: es handelt sich meistens um Pre-Conditions. Da ist es übersichtlicher, wenn die bereits am Anfang abgefangen werden.
 
Hallo,
Sollte es doch mal passieren wird uns der Himmel auf den Kopf fallen.
nun - gelegentlich soll derartiges in der SW-Entwicklung ja durchaus mal vorkommen :D

Aber ok, wenn es wirklich sichergestellt ... kannte die Fkt. nicht, da ich nur sehr wenig mit .NET mache :rolleyes:

Aber um nochmal auf die Frage zurück zukommen: Ich würde rein aus Gründen der Übersichtlichkeit die zweite Version mit '= 0' bevorzugen!! Man sieht sofort DAS und WARUM abgebrochen wird!!

Gruß
Klaus
 
Ich danke euch soweit für eure Beiträge. Persönlich tendiere ich auf für die zweite Variante.
Auf beide bin ich überhaupt erst gekommen, da ich, als ich die Prozedur damals geschrieben hatte, die erste Variante ersonnen hatte, später aber, als ich eine ähnliche brauchte, die zweite mir als erstes in den Sinn kam, da ich bis dahin keine Fehlerabfrage integriert hatte und die zweite Implementierung am schnellsten war.
Und eben mir in dem Moment übersichtlicher vorkam. Deshalb hier auch die angeregte Diskussion, da ich in dem Moment sehr verwirrt war, was wohl "besser" sei.
 
Zurück