Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism Case-Anweisung für Strings? (https://www.delphipraxis.net/49949-case-anweisung-fuer-strings.html)

Taladan 18. Jul 2005 21:14


Case-Anweisung für Strings?
 
Ich nutze z.z. die Anweisung Case für eine Anweisung mit ca. 40 Ausgängen. Da es wohl noch deutlich mehr werden, will ich gern auf Strings umbauen (wegen der Übersichtlichkeit und Lesbarkeit des Codes). Doch eine Anweisungsreihe á la

if ... = ... then begin end else if ... = ... then begin end else ...

usw ist doch auch sehr viel getippe. Gibt es da eine Anweisung ähnlich wie Case für Strings.

PS: Hat das einen Hintergrund, warum Strings unzulässig sind?

Luckie 18. Jul 2005 21:17

Re: Case-Anweisung für Strings?
 
Nein, für Strings geht es nicht. Und der Grund ist, dass nur ordinal Typen erlaubt sind.

CalganX 18. Jul 2005 21:39

Re: Case-Anweisung für Strings?
 
Hi,
wie Luckie schon gesagt hat, ist das ohne weiteres nicht möglich.
Allerdings kannst du dir über einen Umweg die Möglichkeit verschaffen. Wir haben in der Code-Lib auch einen entsprechenden Beitrag, allerdings nur für Delphi for Win32. Aber unter Umständen kannst du dir das ja für deine Wünsche umschreiben. [cl="Case String*"]Such[/cl] am Besten mal danach. ;)

Chris

Diesen Beitrag meine ich. ;)

Robert_G 18. Jul 2005 22:41

Re: Case-Anweisung für Strings?
 
Welchen Sinn macht diese Einschränkung denn unter .Net? Es gibt doch kein endgültiges Kompilat mehr...
Kleines Beispiel:
Delphi-Quellcode:
type
  Cases = (First, Second, Third);

  SomeClass = class
  public
    procedure DoSomething(someValue : Cases);
  end;

implementation

procedure SomeClass.DoSomething(someValue : Cases);
var
 Dings :string;
begin
  case someValue of
    Cases.First : Dings := 'A';
    Cases.Second : Dings := 'B';
    Cases.Third : Dings := 'C';
  end;
  Console.WriteLine(Dings);
end;
Man könnte jetzt erwarten, dass hier wegen der Pflicht ordinaler Typen irgendwelche coolen Optimierungen laufen...
Pah! Das wird eigentlich erzeugt:
Delphi-Quellcode:
procedure SomeClass.DoSomething(someValue: Cases);
var
  text1: string;
begin
  if (someValue <> Cases.First) then
    if (someValue = Cases.Second) then
      text1 := 'B'
    else if (someValue = Cases.Third) then
      text1 := 'C'
    else
      text1 := 'A';

  Console.WriteLine(text1)
end;
Sorry, aber wo ist hier der Grund für diese Einschränkung? IMHO hat Abwärtskompatibilität seine Grenzen... :?
case of ist nett um Verschachtelungen zu vermeiden und die TString-Vorschlaghammer methode ist einfach nicht akzeptierbar...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr.

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