![]() |
Delphi-Version: 10.2 Tokyo
Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
Moin!
Wie ist eure Meinung zu der Thematik Aufzählungstypen: Könnten evtl. mehr als 256 benannte Elemente ermöglicht werden?
Delphi-Quellcode:
So isses ja derzeit. Der Typ als solches kann durchaus mehr als 256 Elemente aufnehmen, nur benannt werden können sie nicht. Das 257ste Element führt dann zum Wert "0", was ich auch nicht gerade sinnig finde.
type
TMyEnum = (meNull, meEins, meZwei, {...} meZweihundertfuenfundfuenfzig, meZweihundertsechsundfuenfzig); {...} var I: Integer; begin I := Integer(meZweihundertfuenfundfuenfzig); // I = 255 I := Integer(meZweihundertsechsundfuenfzig); // I = 0 I := Integer(TMyEnum(256)); // I = 256 I := Integer(TMyEnum(1024)); // I = 1024 I := Integer(TMyEnum(-1)); // I = -1 end; Ich stoße immer wieder auf Fälle, wo ich durchaus mehr als 256 benannte Elemente gebrauchen könnte und dann auf Konstanten ausweichen muss. Die haben aber den Nachteil, dass sie nicht typisiert sind und mir da schon mehrmals passiert ist, dass ich versehentlich zwei gleiche Werte hatte. Ich könnte mir z.B. eine Syntax wie diese hier gut vorstellen:
Delphi-Quellcode:
und dann entsprechend
type
TMyEnum[-1..1024] = (meMinusEins, meNull, meEins, meZwei, {...} meZweihundertfuenfundfuenfzig, meZweihundertsechsundfuenfzig, {...} meTausendvierundzwanzig); {...} var I: Integer; begin I := Integer(meMinusEins); // I = -1 I := Integer(meZweihundertfuenfundfuenfzig); // I = 255 I := Integer(meZweihundertsechsundfuenfzig); // I = 256 I := Integer(meTausendvierundzwanzig); // I = 1024 end;
Delphi-Quellcode:
Grüße
type
TMyEnum[-1..1024] = (meMinusEins, meNull, meEins, meZwei, {...} meTausendvierundzwanzig, meTausendfuenfundzwanzig); // <- Compilerfehler "Außerhalb des Bereichs" Cody |
AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
Zitat:
Ich kann ja mal kurz skizzieren, wofür ich Aufzählungen benutze: bei mir sind die allermeisten Aufzählungstypen ein "sprechender Ersatz" für Boolean. Statt
Delphi-Quellcode:
schreibe ich der Lesbarkeit halber lieber
var Lampe: boolean;
Lampe := true;
Delphi-Quellcode:
vor allem, weil ich dann den Typen noch erweitern kann
type TLampenStatus = (lsAus, lsAn);
var Lampe: TLampenStatus ; Lampe := lsAn;
Delphi-Quellcode:
was mit Boolean dann eine zweite Variable benötigen würde.
type TLampenStatus = (lsAus, lsAn, lsDefekt);
|
AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
Ich sehe es ähnlich wie Frickler.
Bisher hatte ich auch noch keine Bedarf in dem Bereich. Was natürlich nicht heißen muss, dass es den nicht gibt. @Codehunter: Kannst du mal ein realistisches Beispiel skizzieren, wofür das benötigen könntest? OT: Ich fände ein case, das auch Strings verarbeiten kann, eine sinnvolle Sache :wink: |
AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
Also bei mir kommt bei
Delphi-Quellcode:
wie zu erwarten
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; type TMyEnum = ( me0, me1, me2, me3, me4, me5, me6, me7, me8, me9, me10, me11, me12, me13, me14, me15, me16, me17, me18, me19, me20, me21, me22, me23, me24, me25, me26, me27, me28, me29, me30, me31, me32, me33, me34, me35, me36, me37, me38, me39, me40, me41, me42, me43, me44, me45, me46, me47, me48, me49, me50, me51, me52, me53, me54, me55, me56, me57, me58, me59, me60, me61, me62, me63, me64, me65, me66, me67, me68, me69, me70, me71, me72, me73, me74, me75, me76, me77, me78, me79, me80, me81, me82, me83, me84, me85, me86, me87, me88, me89, me90, me91, me92, me93, me94, me95, me96, me97, me98, me99, me100, me101, me102, me103, me104, me105, me106, me107, me108, me109, me110, me111, me112, me113, me114, me115, me116, me117, me118, me119, me120, me121, me122, me123, me124, me125, me126, me127, me128, me129, me130, me131, me132, me133, me134, me135, me136, me137, me138, me139, me140, me141, me142, me143, me144, me145, me146, me147, me148, me149, me150, me151, me152, me153, me154, me155, me156, me157, me158, me159, me160, me161, me162, me163, me164, me165, me166, me167, me168, me169, me170, me171, me172, me173, me174, me175, me176, me177, me178, me179, me180, me181, me182, me183, me184, me185, me186, me187, me188, me189, me190, me191, me192, me193, me194, me195, me196, me197, me198, me199, me200, me201, me202, me203, me204, me205, me206, me207, me208, me209, me210, me211, me212, me213, me214, me215, me216, me217, me218, me219, me220, me221, me222, me223, me224, me225, me226, me227, me228, me229, me230, me231, me232, me233, me234, me235, me236, me237, me238, me239, me240, me241, me242, me243, me244, me245, me246, me247, me248, me249, me250, me251, me252, me253, me254, me255, me256, me257, me258, me259, me260, me261, me262, me263, me264, me265, me266, me267, me268, me269, me270, me271, me272, me273, me274, me275, me276, me277, me278, me279, me280, me281, me282, me283, me284, me285, me286, me287, me288, me289, me290, me291, me292, me293, me294, me295, me296, me297, me298, me299 ); begin WriteLn(Integer(TMyEnum.me299)); ReadLn; end.
Code:
heraus.
299
Kann ich also hier nicht nachvollziehen. |
AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
Mir ist auch nicht bekannt, daß es eine 256-Elemente-Begrenzung bei Aufzählungstypen gibt. Dagegen spricht auch die Compiler-Option Mindestgröße für Enum, in der man Byte, Word oder Double Word auswählen kann.
Die 256-Elemente-Begrenzung gibt es allerdings bei Sets. |
AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
Zitat:
Auch in einer FOR-Schleife für alle Werte korrekt. ...:cat:... |
AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
Also jetzt bin ich endgültig verwirrt! Bei mir ist das seit 20 Jahren Usus dass ein Enum 256 benannte Elemente haben kann. Wenn ich das Codesample von Schokohase verwende, dann kommt bei mir 43 raus und nicht 299. Das deckt sich auch mit der Bechreibung hier:
![]() Ein praktisches Beispiel zu bringen ist nicht ganz einfach, weil das sehr tief in den betreffenden Anwendungscode geht. Vorallem um Bestandscode, in dem sehr viel mit hartcodierten Array-Indizes gearbeitet wurde und dadurch Erweiterungen sehr mühsam werden weil man den ganzen Code nach dem höchsten Vorkommen eines Index durchgrasen muss. Und wenn ich mir die Arbeit schon machen muss, dann würde ich das gern auch gleich aufräumen und mit benannten Aufzählungen arbeiten. Allerdings lande ich in dem Fall schon bei 306 Elementen. EDIT: Fast übersehen! Zitat:
|
AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
Zitat:
|
AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
Zitat:
|
AW: Eure Meinung: Syntaxerweiterung Set-Typen auf mehr als 255 Elemente
@Codehunter
So irgendwelche Quellen sind ja teilweise hilfreich, aber warum nicht mal einen Blick in die Doku des Herstellers werfen? ![]() Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:39 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 by Thomas Breitkreuz