Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi case .. of kann kein break - Gibt es dafür einen rationalen Grund? (https://www.delphipraxis.net/215096-case-kann-kein-break-gibt-es-dafuer-einen-rationalen-grund.html)

Rollo62 8. Mai 2024 10:51

Delphi-Version: 12 Athens

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

! Das ist kein Feature-Request.

Ich möchte nur verstehen, warum man in der Delphi/Pascal Sprache nicht ein einfaches case - break vorgesehen hat?

Delphi-Quellcode:
  case LMyVariable of
     TMyVariable.One: X := 1;
     TMyVariable.Two     : begin

                                Mache1;

                                if MyCondition then
                                begin
                                    Mache2;
                                end;

                            end;
     TMyVariable.ThreeBlue: begin

                                Mache1;

                                if not MyCondition then
                                begin
                                    break;                //<== DAS GIBT ES LEIDER NICHT =================
                                    goto CaseBreakLabel;  //<== Wäre die einzige rationale Verwendung von goto, mach ich aber trotzdem nicht
                                end;

                                Mache2;

                            end;
     else
                            begin
                            end;
  end;
 
CaseBreakLabel:

  HierGehtsWeiter;
Ich möchte jetzt nicht unbedingt über die Funktion von break oder goto diskutieren.
Ich möchte nur verstehen, warum es die Design-Entscheidung bei Pascal gab, dies nicht reinzusetzen.

Da es bereits case-break in anderen Sprachen (C) gab, gehe ich davon aus, dass dies bei Pascal nicht einfach nur "vergessen" wurde.

Dafür muss es doch einen rationalen Grund für die Entscheidung gegeben haben.
Kennt den vielleicht jemand?

DeddyH 8. Mai 2024 11:03

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?
 
War es in C nicht so, dass ab dem passenden case-Label alle folgenden Fälle auch abgearbeitet werden und man deswegen das break braucht, wenn man dieses Verhalten nicht will? Falls das so stimmt, dann wird das break in Pascal gar nicht gebraucht, da ja automatisch "gebreakt" wird. Mangels C-Compiler kann ich das gerade nicht ausprobieren, habe das aber so noch in Erinnerung (allerdings sind meine letzten C-Versuche auch schon wieder 20 Jahre her).

Klaus01 8. Mai 2024 11:04

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?
 
in C muss ein break verwendet werden, weil sonst die nachfolgenden Anweisungen (in dem switch Konstrukt) auch abgearbeitet werden.

In pascal ist das nicht notwendig.

Viele Grüße
Klaus

Rollo62 8. Mai 2024 11:22

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?
 
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?

DeddyH 8. Mai 2024 11:27

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?
 
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.

Uwe Raabe 8. Mai 2024 11:29

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?
 
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.

Rollo62 8. Mai 2024 11:34

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?
 
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 :-D)

Aber im Ernst:
Es könnte was mit den Ablaufpfaden innerhalb von Scopes zu tun haben.

Der schöne Günther 8. Mai 2024 11:38

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?
 
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.

Sinspin 8. Mai 2024 11:50

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

Zitat von Rollo62 (Beitrag 1536480)
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?

hannsg 8. Mai 2024 11:54

AW: case .. of kann kein break - Gibt es dafür einen rationalen Grund?
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz