AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Delphi merkt nicht wenn ein case-Statement vollständig ist, oder?
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi merkt nicht wenn ein case-Statement vollständig ist, oder?

Ein Thema von Der schöne Günther · begonnen am 2. Dez 2021 · letzter Beitrag vom 21. Nov 2024
 
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Delphi merkt nicht wenn ein case-Statement vollständig ist, oder?

  Alt 20. Nov 2024, 14:29
Das hat eigentlich ganz andere Gründe. Nehmen wir z.B. einen Enum-Typ, der positive und negative Elemente enthält. Bei positiven bzw. negativen Werten sind spezifische Code-Teile auszuführen, die teilweise vom genauen Wert unabhängig sind, während andere Teile vom exakten Wert abhängen:
Delphi-Quellcode:
type
{$SCOPEDENUMS ON}
  TRating = (undefined, Perfect, OK, Acceptable, NotGoodEnough, Bad, TotalShit);

  TRatingHelper = record helper for TRating
    procedure HandleIncompleteCase(Rating: TRating);
  end;

procedure TRatingHelper.HandleIncompleteCase(Rating: TRating);
begin
  raise EProgrammerNotFound.Create('unhandled case for TRating: ' + TRttiEnumerationType.GetName(Rating));
end;

const
  cRatingPositive = [TRating.Perfect, TRating.OK, TRating.Acceptable];
  cRatingNegative = [TRating.NotGoodEnough, TRating.Bad, TRating.TotalShit];

procedure HandleRating(Rating: TRating);
begin
  if Rating in cRatingPositive then begin
    // Handle positive rating part 1
    ...
    // Handle specific rating
    case Rating of
      TRating.Perfect: ...;
      TRating.OK: ...;
      TRating.Acceptable: ...;
    else
      HandleIncompleteCase(Rating);
    end;
    // Handle positive rating part 2
    ...
  end
  else if Rating in cRatingNegative begin
    // Handle negative rating part 1
    ...
    // Handle specific rating
    case Rating of
      TRating.NotGoodEnough: ...;
      TRating.Bad: ...;
      TRating.TotalShit: ...;
    else
      HandleIncompleteCase(Rating);
    end;
    // Handle negative rating part 2
    ...
  end
  else begin
    // Handle undefined rating
    ...
  end;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
 


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 19:37 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