2010-06-08 7 views
6

Quelle est la manière la plus élégante (ou la moins laide) d'utiliser des constantes typées dans une instruction case dans Delphi?Constantes typées Delphi dans les instructions de cas

C'est, supposons que pour cette question que vous devez déclarer une constante typée comme dans

const 
    MY_CONST: cardinal = $12345678; 
    ... 

le compilateur Delphi n'acceptera

case MyExpression of 
    MY_CONST: { Do Something }; 
    ... 
end; 

mais vous devez écrire

case MyExpression of 
    $12345678: { Do Something }; 
    ... 
end; 

qui est sujette aux erreurs, difficile à mettre à jour et pas élégante.

Y a-t-il une astuce que vous pouvez utiliser pour que le compilateur insère la valeur de la constante (de préférence en vérifiant la valeur de const dans le code source, mais peut-être en recherchant la valeur)? Nous supposons ici que vous ne modifierez pas la valeur de la "constante" au moment de l'exécution.

+1

Sortir « : cardinal ». Problème résolu. Vous n'avez pas besoin d'utiliser des déclarations de type et en fait vous ne devez pas les utiliser. –

+0

Oui, je sais. Mais j'ai explicitement écrit "supposons pour cette question que vous devez déclarer une constante typée comme dans" ... –

Répondre

12

Selon pourquoi vous avez besoin la constante à taper, vous pouvez essayer quelque chose comme

const 
    MY_REAL_CONST = Cardinal($12345678); 
    MY_CONST: Cardinal = MY_REAL_CONST; 

case MyExpression of 
    MY_REAL_CONST: { Do Something }; 
    ... 
end; 
+1

+1 pour être une réponse à la question réelle! –

+1

@Andreas: Si vous trouvez que c'est une meilleure réponse que la mienne, vous pouvez l'accepter à la place. SO vous permet de changer la réponse acceptée. –

+0

@Mason Wheeler: Vous avez raison.Bien que je suis d'accord que la plupart des problèmes peuvent être résolus sans constantes typées (et finalement j'ai réécrit mon code en utilisant des constantes normales), c'est une réponse à la question réelle, donc je vais l'accepter. –

4

Si vous ne modifiez pas la valeur de la constante, vous n'avez pas besoin d'une constante typée. Le compilateur peut prendre le nombre que vous déclarez et le placer correctement dans la variable ou le paramètre auquel vous l'affectez. Les constantes typées sont en quelque sorte un hack et elles sont implémentées en tant que variables, de sorte que le compilateur ne peut pas les utiliser comme des constantes dont la valeur doit être corrigée au moment de la compilation.

+0

Je sais. Mais cela ne répond pas à la question, car j'ai écrit "supposons pour cette question que vous devez déclarer une constante typée comme dans". Mais généralement, je suis d'accord: je répondrais aussi à une question comme celle-ci: "Pourquoi le **** avez-vous besoin d'utiliser des constantes typées?". –

+0

Mais quand même, plus j'y pense, plus je me rends compte que tu devrais "bidouiller" autre chose si c'est un problème ... –

+6

* SI * tu utilises une constante typée parce que tu veux qu'elle soit spécifique (par exemple Cardinal dans cet exemple) vous pouvez déclarer comme MyConst = Cardinal ($ FFFFFFFE); cas MyExpression de MY_CONST: {Faire quelque chose}; ... end; – Remko

0

Les constantes typées ne peuvent pas être utilisées dans les instructions case, car une constante typée est en fait une variable statique (et affectable ...), et ne peut donc pas être utilisée dans une instruction case, qui attend des constantes.

+0

Je n'aurais pas écrit "Nous supposons ici que vous ne modifierez pas la valeur de la" constante "à l'exécution." si je ne le savais pas! :) –

+0

Dommage, Delphi ne le suppose pas, et permet de modifier la constante tapée. –

Questions connexes