Vorteile einer Kapselung von OpenWindow mit if-Statement?

Anfängerfragen zum Programmieren mit PureBasic.
Klaus_1963
Beiträge: 96
Registriert: 25.06.2009 09:09

Vorteile einer Kapselung von OpenWindow mit if-Statement?

Beitrag von Klaus_1963 »

Bin mal wieder am werkeln. Hier zwei Quelltexte: Example_1 habe ich direkt von der Hilfe von PB übernommen. Nun habe ich aber festgestellt, dass Example_2, bei denen ich die if-Kapselung* von OpenWindow und CreateMenu einfach entfernt habe genau das gleiche leistet. Aus welchem Grund wird üblicherweise (zumindest wenn ich die Hilfe-Beispiele betrachte) diese if-Kapselung* durchgeführt?

*ich nenne das einfach mal if-Kapselung, weil mir nichts anderes einfiel...


Example_1: Dieses Beispiel habe ich aus der Hilfe von PB

Code: Alles auswählen

If OpenWindow(0, 0, 0, 230, 90, "Event-Handling Beispiel...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

   ButtonGadget  (1, 10, 10, 200, 20, "Klick mich")
   CheckBoxGadget(2, 10, 40, 200, 20, "Markiere mich")

   If CreateMenu(0, WindowID(0))
     MenuTitle("Menu")
     MenuItem(1, "Eintrag 1")
     MenuItem(2, "Eintrag 2")
     MenuItem(3, "Eintrag 3")
   EndIf

   Repeat
     Event = WaitWindowEvent()
     
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 : Debug "Schalter 1 angeklickt!"
           Case 2 : Debug "Schalter 2 angeklickt!"
           Case 3 : Debug "Schalter 3 angeklickt!"
         EndSelect
       
       Case #PB_Event_Menu
         Select EventMenu()
           Case 1 : Debug "Menü-Eintrag 1 angeklickt!"
           Case 2 : Debug "Menü-Eintrag 2 angeklickt!"
           Case 3 : Debug "Menü-Eintrag 3 angeklickt!"
         EndSelect
     
     EndSelect
   Until Event = #PB_Event_CloseWindow
 EndIf
Nun arbeitet folgendes leicht abgeändertes Beispiel genau gleich:

Example_2:

Code: Alles auswählen

OpenWindow(0, 0, 0, 230, 90, "Event-Handling Beispiel...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

   ButtonGadget  (1, 10, 10, 200, 20, "Klick mich")
   CheckBoxGadget(2, 10, 40, 200, 20, "Markiere mich")

   CreateMenu(0, WindowID(0))
     MenuTitle("Menu")
     MenuItem(1, "Eintrag 1")
     MenuItem(2, "Eintrag 2")
     MenuItem(3, "Eintrag 3")


   Repeat
     Event = WaitWindowEvent()
     
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 : Debug "Schalter 1 angeklickt!"
           Case 2 : Debug "Schalter 2 angeklickt!"
           Case 3 : Debug "Schalter 3 angeklickt!"
         EndSelect
       
       Case #PB_Event_Menu
         Select EventMenu()
           Case 1 : Debug "Menü-Eintrag 1 angeklickt!"
           Case 2 : Debug "Menü-Eintrag 2 angeklickt!"
           Case 3 : Debug "Menü-Eintrag 3 angeklickt!"
         EndSelect
     
     EndSelect
   Until Event = #PB_Event_CloseWindow
PureBasic 5.72 LTS / Windows / MacOS / Linux Mint / starker Kaffee / noch stärkerer Kaffee / reines Koffein intravenös...
Motto: Hauptsache es funktioniert - aber schnell und richtig!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Mit der IF Kapselung wird überprüft, ob die Funktion auch funktioniert hat:
<> 0
Solch eine Überprüfung sollte man möglichst immer durchführen, vor allem
bei Memory, Datei und ähnlichen Funktionen. Bei OpenWindow ist es ver-
nachlässigbar.

gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Captn. Jinguji
Beiträge: 397
Registriert: 07.06.2005 19:47
Computerausstattung: PB 4.73x64, i7, WIN 10x64, ATI NVidia RTX 2070
Wohnort: Witten

Beitrag von Captn. Jinguji »

Es doch tatsächlich schon Fälle gegeben haben, in denen OpenWindow()
NICHT erfolgreich war.

Wenn das Deinen Programmen mal passieren sollte, willst Du doch sicher nicht, dass das Programm an den Folgen der danach nicht mehr funktionierenden Aktionen stirbt und entsprechende Todesschreie ausstösst, sondern vielleicht die Fehlersituation noch auswerten (dazu bedarf es natürlich eines ELSE - Zweiges, der die Hilfe unübersichtlich gemacht hätte) und den Benutzer informieren, dass es an zuwenig Speicher, falscher Version oder was immer es auch ist, lag.

Das macht ja auch Dir die Arbeit leichter, wenn Du nicht der User, sondern der Hersteller bist.
Ist das Kunst hier, oder kann das weg ?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

man kann statt den gesamten code zu klammern auch einfach ein If Not verwenden.

ein beispiel das zeigt, dass es sinnvoll sein kann:

Code: Alles auswählen

InitSprite()
If Not OpenScreen( 1000, 500, 32, "geht nich")
  MessageRequester("Error","Screen geht nich")
  End
EndIf
das format existiert nicht, kein Grafikmodus kann 1000x500 darstellen.
anstatt einfach abzustürzen wird ein korrekter MessageRequester ausgegeben.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Klaus_1963
Beiträge: 96
Registriert: 25.06.2009 09:09

Beitrag von Klaus_1963 »

Hallo Thomas und alle anderen Helfer

Aha, deshalb! Vielen Dank für die superschnelle und einleuchtende Antwort.

Grüsse

Klaus
PureBasic 5.72 LTS / Windows / MacOS / Linux Mint / starker Kaffee / noch stärkerer Kaffee / reines Koffein intravenös...
Motto: Hauptsache es funktioniert - aber schnell und richtig!
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Captn. Jinguji hat geschrieben:Es doch tatsächlich schon Fälle gegeben haben, in denen OpenWindow()
NICHT erfolgreich war.
[...]
und den Benutzer informieren, dass es an zuwenig Speicher, falscher Version oder was immer es auch ist, lag.
... wobei ich mich ernsthaft frage, wie so eine Benachrichtigung aussähe?
Klappt ein MessageRequester(), wenn ein OpenWindow() fehlschlug?

Grüße ... Kiffi
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

die Frage hab ich mir auch schon oft gestellt... xD
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

Kiffi hat geschrieben:... wobei ich mich ernsthaft frage, wie so eine Benachrichtigung aussähe?

Am besten in ein ErrorLog, welches dann gleich mit RunProgram() aufgerufen wird.
Benutzeravatar
Captn. Jinguji
Beiträge: 397
Registriert: 07.06.2005 19:47
Computerausstattung: PB 4.73x64, i7, WIN 10x64, ATI NVidia RTX 2070
Wohnort: Witten

Beitrag von Captn. Jinguji »

Kiffi hat geschrieben:
Captn. Jinguji hat geschrieben:Es doch tatsächlich schon Fälle gegeben haben, in denen OpenWindow()
NICHT erfolgreich war.
[...]
und den Benutzer informieren, dass es an zuwenig Speicher, falscher Version oder was immer es auch ist, lag.
... wobei ich mich ernsthaft frage, wie so eine Benachrichtigung aussähe?
Klappt ein MessageRequester(), wenn ein OpenWindow() fehlschlug?

Grüße ... Kiffi
Ich denke, der ursprüngliche Poster wird schon die Transformationsleistung von "OpenWindow()" zu "OpenFile()" etc. selbst erbringen können.
Greets
CJ
Ist das Kunst hier, oder kann das weg ?
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

ein Messagerequester braucht kein Window, es hat selbst eins. :D
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Antworten