Correct ‘in’ operator usage

Consider the following procedure

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 operator instead of if chain

  if (N = 6) or (N = 8) or (N = 10)
    then ShowMessage('OK');

makes the code more compact and readable, but Delphi documentation is silent about it, and you should be aware of potential problems.

The question is: should the in operator usage with constants only in brackets, for example

  if N in [6, 8, 10]
    then ShowMessage('OK');

be considered a good practice in Delphi?

Leave a Comment