AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi case .. of kann kein break - Gibt es dafür einen rationalen Grund?
Thema durchsuchen
Ansicht
Themen-Optionen

case .. of kann kein break - Gibt es dafür einen rationalen Grund?

Ein Thema von Rollo62 · begonnen am 8. Mai 2024 · letzter Beitrag vom 13. Mai 2024
Antwort Antwort
Seite 1 von 2  1 2      
Rollo62

Registriert seit: 15. Mär 2007
4.185 Beiträge
 
Delphi 12 Athens
 
#1

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?

  Alt 8. Mai 2024, 11:22
Ja das stimmt.
Ist das denn ein Grund keinen Exit-Mechanismus vorzusehen?

Es geht ja um das vorzeitige Verlassen eines Scopes.
Entspricht das etwa irgendwie nicht den guten Gepflogenheiten?

Es gibt ja ein anderes "AntiPattern", in Methoden - ein Guard ( Exit; ) um vorzeitig anzubrechen.
Delphi-Quellcode:
function MyFunc( AParam : Integer ) : Boolean;
begin
    if AParam < 0 then
    begin
        Result := False;
        Exit; //<== GUARD - sichere vor falschen Parametern ============
    end;

    // Hier kann ich munter mit dem Parameter arbeiten, ohne dass die Funktion abraucht
    AParm := AParam * 100;
    ...

    Result := True;
end;
Ich benutze das "AntiPattern" sehr gerne, weil es eben irrsinnig tiefe if then Verschachtelungen wunderbar einfach und lesbar auflösen kann.
Für Sprachpuristen kommt das glaube ich aber nicht in Frage.

Es scheint mir so das gleiche Argument zu sein.
Das geht vielleicht alles in die Richtung: "break, continue, Exit ist auch nur ein GOTO".

Könnte das der wahre Grund dahinter sein?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.662 Beiträge
 
Delphi 12 Athens
 
#2

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?

  Alt 8. Mai 2024, 11:27
Wozu etwas einbauen, was niemals gebraucht wird? Das Verhalten eines Switch-Case ist in C und Pascal wie gesagt unterschiedlich, deshalb macht ein break in C Sinn, in Pascal aber nicht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.689 Beiträge
 
Delphi 12 Athens
 
#3

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?

  Alt 8. Mai 2024, 11:29
Standard Pascal nach Jensen/Wirth kennt dieses Break gar nicht. Eingeführt wurde es um Schleifen vorzeitig bzw. unabhängig von der Schleifenbedingung abzubrechen. Ein Verlassen des Scopes mit Exit gibt es (neben Goto, geht aber nicht immer) nur bei Methoden, Prozeduren und Funktionen. Das case-Konstrukt gehört in keine dieser Kategorien.

Ich würde auch kein break innerhalb des case haben wollen. Dazu benutze ich es zu gern zum Abbruch einer darum liegenden Schleife.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.185 Beiträge
 
Delphi 12 Athens
 
#4

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?

  Alt 8. Mai 2024, 11:34
Ja, ist alles richtig.

Aber welchen Grund gibt es, das break NICHT in case scopes zu benutzen?
Vielleicht verstößt das gegen irgendein Informatik-Grundgesetz, das ich nicht kenne. (Die Würde des Scopes ist unantastbar )

Aber im Ernst:
Es könnte was mit den Ablaufpfaden innerhalb von Scopes zu tun haben.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.201 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?

  Alt 8. Mai 2024, 11:38
Das hat doch nichts mit Scopes zu tun - Ein break verlässt eine Schleife. Ein case ist keine Schleife. Ich käme auch nie auf die Idee, ein „if/else“ mit break verlassen zu wollen.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.813 Beiträge
 
Delphi 12 Athens
 
#6

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?

  Alt 8. Mai 2024, 12:09
Das hat doch nichts mit Scopes zu tun - Ein break verlässt eine Schleife. Ein case ist keine Schleife. Ich käme auch nie auf die Idee, ein „if/else“ mit break verlassen zu wollen.
Damit dürfte des Kopfes Nagel getroffen worden sein. Andererseits...if-Schleife...hmmmm
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
725 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?

  Alt 8. Mai 2024, 11:50
Ist das denn ein Grund keinen Exit-Mechanismus vorzusehen?
Wozu denn? Es wird nicht gebaucht.
In Pascal ist ein CASE eindeutig! Es wird nur der Block ausgeführt für den die Bedingung passt. Warum sollte man da extra was hinschreiben müssen was keinen Effekt hat?

Oder meinst Du das andersrum? Suchst Du nach einem CASE was ein Break braucht?
Warum? Was gedenkst du zu implementieren was dieses Verhalten unbedingt erforderlich machen würde?
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
hannsg

Registriert seit: 8. Sep 2014
Ort: 61169 Friedberg
10 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?

  Alt 8. Mai 2024, 11:54
Die "reine Lehre" sagt wohl, dass jeder Block nur genau einen Eingang und genau einen Ausgang haben darf. Daher ist sowas im ursprünglichen Pascal nicht enthalten...

Gruß, Meik
Meik
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.185 Beiträge
 
Delphi 12 Athens
 
#9

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?

  Alt 8. Mai 2024, 13:01
Die "reine Lehre" sagt wohl, dass jeder Block nur genau einen Eingang und genau einen Ausgang haben darf. Daher ist sowas im ursprünglichen Pascal nicht enthalten...

Gruß, Meik
Das bleibt doch auch so.
Aber ja, es gibt dann versciedene Pfade.
Die gibt es durch if then else, case usw. auch schon.

Und ja, "break" ist in Pascal für Schleifen da.
Vermutlich sollte ich im C-Formum mal danach fragen.

Standard Pascal nach Jensen/Wirth kennt dieses Break gar nicht. Eingeführt wurde es um Schleifen vorzeitig bzw. unabhängig von der Schleifenbedingung abzubrechen. Ein Verlassen des Scopes mit Exit gibt es (neben Goto, geht aber nicht immer) nur bei Methoden, Prozeduren und Funktionen. Das case-Konstrukt gehört in keine dieser Kategorien.
Ja, ein Exit verlässt eine Methode/Prozedur/Funktion, also auch den Scope eben dieser.
Na gut, wenn ich innerhalb einer Methode extra Scopes mit begin ... end aufmache, dann verlässt ein Exit immer noch die ganze Methode.

Du stimmst mir hoffentlich zu, das innerhalb eines cases auch ein "Scope" existiert.
Klar kann ich da auch mit Exit; raus.

Ich würde auch kein break innerhalb des case haben wollen. Dazu benutze ich es zu gern zum Abbruch einer darum liegenden Schleife.
Das Problem hat man in C natürlich auch.

Die meisten Erklärungen bis jetzt sind aber nur persönliche Befindlichkeiten oder Abneigungen, aber bis jetzt kein echter Informatik-lastiger Grund,
wieso ein frühzeitiger Abbruch eines case ... of Scopes irgendwie schädlich sein könne.
Der Beweis wäre das es mit goto geht, wahrscheinlich muss ich bei den Gründen nach den Abneigungen gegen goto suchen (Spagetti-Code).
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.401 Beiträge
 
Delphi 12 Athens
 
#10

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?

  Alt 8. Mai 2024, 13:05
Nochmal zusammengefasst:
  • CASE im Pascal ist eine JumpList, welche in die einzelnen CASEs springt, nur den Einen ausführt und automatisch abbricht (zum Ende springt).
  • In C-Sprachen wird beim CASE an den Anfang des Gewünschten gesprungen und ab da wird ALLES ausgeführt, es sei denn mit BREAK wird abgebrochen..
  • BREAK im Pascal/Delphi bricht nur Schleifen ab, also FOR, WHILE und REPEAT.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz