Maks150988
С точки зреня компилятора оба варианта равнозначны. Компилятор вычисляет составные булевые выражения начиная с первого (левого) подвыражения до тех пор, пока не поймет, что дальнейшие подвыражения уже не изменят результат.
Скажем, если в выражении (hToolTip <> 0) and IsWindowVisible(hToolTip) hToolTip будет равен нулю, то каково бы ни было значение, возвращаемое вторым подвыражением, суммарное значение всего выражения будет false: (false and IsWindowVisible(hToolTip)) всегда будет false. Для компилятора это ясно как день и он не будет заморачиваться проверкой всех остальных подвыражений.
Ну а с точки зрения читабельности кода - кому как привычнее...
Добавлено:
Благодаря этому можно строить интересные конструкции, например (с потолка пример):
repeat
...
until Result or not NextRecord;
тут будет выполняться переход на следующую запись некоего набора данных (вызов функции NextRecord) только в том случае, если в ходе выполнения тела цикла Result еще не стало истиной. Ну и переход на следующий шаг цикла произойдет, если также и сама ф-ция вернула истину.
repeat
...
until not NextRecord or Result;
а тут будет выполняться переход на следующую запись некоего набора данных (вызов NextRecord) ВСЕГДА, независимо от значения переменной Result, вычисленной в ходе выполнения тела цикла! Вызов NextRecord произойдет даже если нет необходимости переходить на следующий шаг цикла.
С точки зреня компилятора оба варианта равнозначны. Компилятор вычисляет составные булевые выражения начиная с первого (левого) подвыражения до тех пор, пока не поймет, что дальнейшие подвыражения уже не изменят результат.
Скажем, если в выражении (hToolTip <> 0) and IsWindowVisible(hToolTip) hToolTip будет равен нулю, то каково бы ни было значение, возвращаемое вторым подвыражением, суммарное значение всего выражения будет false: (false and IsWindowVisible(hToolTip)) всегда будет false. Для компилятора это ясно как день и он не будет заморачиваться проверкой всех остальных подвыражений.
Ну а с точки зрения читабельности кода - кому как привычнее...
Добавлено:
Благодаря этому можно строить интересные конструкции, например (с потолка пример):
repeat
...
until Result or not NextRecord;
тут будет выполняться переход на следующую запись некоего набора данных (вызов функции NextRecord) только в том случае, если в ходе выполнения тела цикла Result еще не стало истиной. Ну и переход на следующий шаг цикла произойдет, если также и сама ф-ция вернула истину.
repeat
...
until not NextRecord or Result;
а тут будет выполняться переход на следующую запись некоего набора данных (вызов NextRecord) ВСЕГДА, независимо от значения переменной Result, вычисленной в ходе выполнения тела цикла! Вызов NextRecord произойдет даже если нет необходимости переходить на следующий шаг цикла.