我有一个代码示例,不确定哪种方法是最佳使用方法。

例如我有

if (x = 1) and (y = 2) and (if abc = false then check if z = 3) then
begin
  ...


只检查

if x = 1
if y = 2
if abc = false check z = 3. if abc = true then dont check z = 3


我不确定我是否在解释最好但希望人们能理解的东西。

我想知道这是否可行或最好的方法。请记住,而不是示例中x,y,z和abc。我可以使用更多的东西。

我目前的结构是...我认为不可行,并认为有更好的方法,但我不确定

if (abc = false) then
begin
  if (x = 1) and (y = 2) and (z = 3) then
  begin
    ...
end
else
begin
  if (x = 1) and (y = 2) then
  begin
    ...


提前致谢

最佳答案

我认为您正在寻找or。现在,您将检查x必须为1,y必须为2,如果abc为false,z必须为3。

如果abc = true,z仍可以为3,但不会被检查。

请注意,我只是写了abc而不是abc = true。由于已经是布尔值(true / false),因此可以使用。

还要注意如何使用括号对操作进行分组。总子表达式abc or (z=3)必须返回true,总表达式才能返回true。

此外,这些术语的顺序很重要-它们从左到右进行评估。如果将术语(abc or (z=3))替换为逻辑上等效的术语((z=3) or abc),则将评估z=3

if (x = 1) and (y = 2) and (abc or (z = 3)) then
   // Your magic goes here


测试程序主体以证明顺序很重要

function z : Integer;
begin
  writeln('Z being evaluated');
  result := x + y;
end;

begin
  x := 1;y := 2;
  abc := true;
  if (x=1) and (y=2) and (abc or (z=3)) then
    writeln ('evaluated true')
  else
    writeln ('evaluated false');
  writeln('done');
  readln;
end.

10-08 08:01