Correct 'dans' l'utilisation de l'opérateur
Utiliser la procédure suivante
procedure InTests;
var
N, K: Integer;
begin
N:= 1111;
if N in [6, 8, 10] // this is correct, readable and effective code
then ShowMessage('OK');
K:= 11;
if N in [6, 8, 10, K] // this is correct but less effective
then ShowMessage('OK'); // (compiler creates local 16-bytes set var)
K:= 1111;
if N in [6, 8, 10, K] // this is a bug (K > 255)
then ShowMessage('OK');
end;
in
opérateur au lieu de if
de la chaîne d'
if (N = 6) or (N = 8) or (N = 10)
then ShowMessage('OK');
rend le code plus compact et plus lisible, mais la documentation de Delphi est silencieuse à ce sujet, et vous devez être conscient des problèmes potentiels.
La question est: faut-il in
opérateur d'utilisation avec des constantes seulement entre crochets, par exemple
if N in [6, 8, 10]
then ShowMessage('OK');
être considérée comme une bonne pratique en Delphi?
Oui, mais vous montrant les littéraux, pas constantes. C'est, je l'aurais
Vous êtes un vrai puriste programmeur 🙂
Je vais prendre ça comme un compliment 🙂 Ne savent pas à propos de puriste, juste piqué une couple de fois, trop de code à l'aide de littéraux...
juste une remarque: vous pouvez utiliser
Quand vous dites que la
MEANINGFULNAME = 6;
déclaré quelque part dans un const section et utilisez-la dans la in
condition. À l'aide de littéraux est quelque chose que je ne voudrais pas envisager une bonne pratique (difficile de recherche, et vous êtes susceptible de manquer lorsque vous avez besoin de changer une valeur).Vous êtes un vrai puriste programmeur 🙂
Je vais prendre ça comme un compliment 🙂 Ne savent pas à propos de puriste, juste piqué une couple de fois, trop de code à l'aide de littéraux...
juste une remarque: vous pouvez utiliser
case
déclaration de contourner le set
limitation (K
doit être une constante).Quand vous dites que la
if
déclaration "rend le code plus compact, vous parlez de l'généré par le compilateur de code machine, à droite? Le code Delphi est clairement moins compact que les alternatives présentées ici. Existe-il d'autres endroits où la documentation n'est pas silencieux sur le code machine généré? Je ne le pense pas; la documentation parle le langage Delphi, à un niveau plus élevé que le compilateur de sortie.OriginalL'auteur kludg | 2012-01-29
Vous devez vous connecter pour publier un commentaire.
Il est certainement de bonne pratique. Elle rend le code beaucoup plus lisible et supprime la nécessité pour les opérateurs logiques, les parenthèses et ainsi de suite. Je serais toujours utiliser
in
pour un tel test.Le seul inconvénient est Delphi très peu de soutien pour ensembles (base de type ordinal peut pas avoir plus de 256 valeurs). Mais où vous ne sont pas soumis à ces limitations, alors vous devriez avoir aucune hésitation à l'aide de
in
.OriginalL'auteur David Heffernan
Ce que vous avez ici est une
set of byte
. La question que vous devriez vous poser est de savoir si unset of byte
c'est vraiment ce que vos numéros? Vous avez des "nombres magiques" ici, et bien que je comprenne que c'est juste un exemple, vous devez considérer que tout...serait considéré comme une bonne pratique, c':
...serait pas.
Cependant dans le premier cas (nommé jetons), un ensemble explicite de type serait bien plus pratique:
Puis le premier échantillon est définitivement une bonne pratique.
Ne faut-il pas lire "const TokenSet =" au lieu de "type TokenSet ="?
non, c'est un type de jeu (delphi.about.com/od/beginners/a/delphi_set_type.htm)
C'est vraiment pas difficile de penser à des cas où l'ensemble de l'octet est approprié.
Je sais, cependant, il n'est pas toujours le cas.
OriginalL'auteur Kornel Kisielewicz