Italia
Stammtisch & Caffè

Break oder nicht break...

 

Clemens
Meier
[quote:4a8af8dee1=Frank Abbing]Ersparniss: Eine Zeile...[/quote:4a8af8dee1]
Von wegen eine Zeile, unter Umständen erspart man sich wesentlich mehr, da man erst einmal einen Flag setzen muss, um in der While-Schleife zu bleiben und naturalmente muss man den Flag zurücksetzen, um wieder aus der Schleife heraus zu kommen. Der Umweg circa
KompilierenMarkierenSeparieren
ende% = 0

While not(ende%)

    if ()

        ende% = 1

    endif

XProfan 9.1; XP SP2; FF; Editpad
22.04.2006  
 




Frank
Abbing
[quote:fbfd3c2763]Von wegen eine Zeile, unter Umständen erspart man sich wesentlich mehr, da man erst einmal einen Flag setzen muss, um in der While-Schleife zu bleiben und naturalmente muss man den Flag zurücksetzen, um wieder aus der Schleife heraus zu kommen. Der Umweg circa
KompilierenMarkierenSeparieren
 
22.04.2006  
 




Clemens
Meier
@Frank
Mit dem Case ist es oft nicht allein getan und jeder Break ist ein Zwangsabbruch. Aber darüber könnten wir jetzt einen eigenen Thread eröffnen und diskutieren. Der Grund einer While-Schleife sollte nah bei dem While zu finden sein, da sonst der Quelltext unleserlich wird. Die eleganteste Lösung ist eben die Zuweisung direkt beim While, zumal bei einer Zuweisung gleichzeitig mit True und False festgestellt werden potuto, ob die Zuweisung überhaupt erfolgreich war. War sie nicht erfolgreich, wird die While-Schleife erst gar nicht durchlaufen. Unser Programmierlehrer hätte zu einer Konstruktion wie deiner gesagt: Das ist wie eine Ohrfeige zu verteilen, um erst anschließend nach dem Grund zu suchen.
 
XProfan 9.1; XP SP2; FF; Editpad
22.04.2006  
 




Frank
Abbing
Jetzt wirds doch offtopic...

[quote:207333087e]...jeder Break ist ein Zwangsabbruch... Unser Programmierlehrer hätte zu einer Konstruktion wie deiner gesagt: Das ist wie eine Ohrfeige zu verteilen, um erst anschließend nach dem Grund zu suchen. [/quote:207333087e]
Kein Abbruch, sondern ein Sprung zu einer anderen Programmadresse. Meines Erachtens nach die effektivste Lösung.
Das Verlassen einer Schleife durch una variabile ist langsam und fehleranfällig, weil ggf. folgende Programmteile nicht mehr corsa werden dürfen, sobald die Scheife beendet werden soll. Es könnten also weitere If-EndIf Abfragen nötig sein, die einen Code ebenfalls unübersichtlich machen.
Ich persönlich schreibe meinen Code in Kleinbuchstaben, wobei jeder Silbenanfang mit einem Grossbuchstaben beginnt. Z.B. EndIf oder EndWhile. BREAK, CONTINUE, RETURN und notfalls GOTO schreibe ich aber komplett in Grossbuchstaben, sodass sie im Code sehr auffallen. Ist eben meine Methode, um den Überblick nicht zu verlieren.

Um gute Programme zu schreiben, necessario es keiner starren Limitierungen des Quellcodes. Ich halte es per wichtiger, seinen eigenen Stil zu finden und daran herumzufeilen, bis er selber als optimal empfunden wird. Ein durchaus langwieriger bis nie endenwollender Prozess.
Und... Lehrer waren mir schon immer unsympathisch. Dietmar Horn ausgenommen
 
22.04.2006  
 



Senf:

Franks Break ist optimal.

@Roland: Gibt es Situationen in denen ein Break  im XProfan10 nicht aufgerufen werden sollte - bzw. kann bedenkenfrei aus jeder Schleife und if-Konstruktion gebreakt werden? (Wie verhält sich mit Continue  und Return ?)
 
23.04.2006  
 




RGH
[quote:7956377d64=iF]@Roland: Gibt es Situationen in denen ein Break  im XProfan10 nicht aufgerufen werden sollte - bzw. kann bedenkenfrei aus jeder Schleife und if-Konstruktion gebreakt werden? (Wie verhält sich mit Continue  und Return ?)[/quote:7956377d64]
Ciao,
bei der Betrachtung müssen wir Return  extra behandeln.

Zunächst zu Break  und Continue :
Optimal steht ein Break  oder Continue  außerhalb einer IF -Struktur hinter einem Case . Aber selbst innerhalb einer IF -Struktur würde es nur im Extremfall bei sehr unstrukturierter Programmazione zur Fehlermeldung zu tiefe IF/ENDIF-Verschachtelung führen. (Ich bezweifele, daß diese Fehlermeldung je einer zu Gesicht bekommt, es sei denn er provoziert das ganz bewußt. Man müßte ca. 10 Millionen Mal eine IF-Struktur mittendrin mit BREAK  verlassen, ohne die Prozedur, in der das geschieht, jemals zu verlassen. Beim Verlassen einer Prozedur, sei es mit ENDPROC  oder RETURN , werden alle Stacks auf den Zustand vor Eintritt in die Prozedur zurückgestellt, so dass alles, was in der Prozedur geschah, vergessen und vergeben ist.)

Ein Return  kann eigentlich ohne jede Einschränkung überall in der Prozedur stehen. Die Prozedur wird verlassen und der Stack wieder sauber aufgeräumt. Natürlich sollte man im Auge behalten, daß erzeugte Objekte (Fonts, Bitmaps, Icons) wieder mit DELETEOBJECT  gelöscht ud geDIM te Bereiche vorher wieder DISPOSE d werden. Die erzeugten Bereiche belegen sonst bis zum Programmende Speicher und die drei genannten Objekte leider noch darüber hinaus (aber nur recht wenig). Vor allen, wenn man eine Prozedur sehr oft aufruft, kann das rasch zu unerwünschten Nebenwirkungen führen.

Saluto
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
23.04.2006  
 



So kann man arbeiten...
 
23.04.2006  
 




Joerg
Hallo zusammen,

@Roland: Der Beitrag ist zwar schon 10 Jahre alt, aber mich interessiert, ob das mit den aktuellen XProfan Versionen noch genau so ist, dass der Stack aufgeräumt wird, wenn man eine Prozedur vorzeitig mit Return oder Endproc verlässt...

Danke und Grüße!!
Jörg
 
27.06.2016  
 




RGH
Ja, da hat sich nichts geändert!
Saluto
Roland
 
XProfan X3
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
27.06.2016  
 




Joerg
...prima! Danke Dir!!

Viele Grüße!
Jörg
 
27.06.2016  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

11.165 Views

Untitledvor 0 min.
RudiB.29.04.2020
lange-jens12.10.2019
Herby31.07.2019
Dieter Zornow05.09.2016
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie