Рассмотрим следующую процедуруCorrect «в» использовании оператора
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
оператора, а if
цепи
if (N = 6) or (N = 8) or (N = 10)
then ShowMessage('OK');
делает код более компактным и удобным для чтения, но Delphi документации умалчивает об этом, и вы должны знать о потенциальных проблемах.
Возникает вопрос: если использование in
оператора с постоянными только в скобках, например
if N in [6, 8, 10]
then ShowMessage('OK');
считается хорошей практикой в Delphi?
Да, но вы показываете литералы, а не константы. То есть, у меня было бы «MEANINGFULNAME = 6;», объявленное где-то в секции const, и использовать его в состоянии 'in'. Использование литералов - это то, что я бы не счел хорошей практикой (трудно найти, и вы, вероятно, пропустите ее, когда вам нужно изменить значение). –
@MarjanVenema Вы настоящий программист-пурист :) – kludg
Я возьму это как комплимент :) Не знаю о пуристе, просто ужалил пару раз слишком много с помощью кода, используя литералы ... –