@GPI:
Stell dir vor du musst verschiedene Resourcen nacheinander erstellen, z.B. mehrere AllocateMemory(). Falls das dritte fehlschlägt, musst du die ersten beiden Speicherbereiche wieder freigeben. Mit deinem
If-ElseIf-Konstrukt ist das umständlich bzw. in Purebasic gar nicht möglich, da man nicht gleichzeitig eine Zuweisung und Bedingung in einem Ausdruck schreiben kann. Deswegen nutzt man gerne verschachtelte Ifs.
Code: Alles auswählen
Global.i mem1, mem2, mem3
Procedure init()
mem1 = AllocateMemory(1000)
If mem1
mem2 = AllocateMemory(1000)
If mem2
mem3 = AllocateMemory(1000)
If mem3
;alles okay, weiter geht's
Else
FreeMemory(mem2)
FreeMemory(mem1) ;Redundanz -> Schlecht!
Debug "Fehlgeschlagen"
ProcedureReturn #False
EndIf
Else
FreeMemory(mem1)
Debug "Fehlgeschlagen"
ProcedureReturn #False
EndIf
Else
Debug "Fehlgeschlagen"
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
oder eben Gotos
Code: Alles auswählen
Global.i mem1, mem2, mem3
Procedure init()
mem1 = AllocateMemory(1000)
If Not mem1 : Goto error : EndIf
mem2 = AllocateMemory(1000)
If Not mem2 : Goto error2 : EndIf
mem3 = AllocateMemory(1000)
If Not mem3 : Goto error3 : EndIf
ProcedureReturn #True
error3:
FreeMemory(mem2)
error2:
FreeMemory(mem1)
error:
ProcedureReturn #False
EndProcedure