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 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