Эффективные конструкции языка – оператор IF
Для начала – несколько замечаний по использованию, не связанных непосредственно с производительностью, но существенно влияющих на читаемость и сопровождаемость кода.
Во-первых, следует иметь в виду, что проверяемое выражение может принимать неопределенное значение:
DEF VAR bUnknown AS LOGICAL NO-UNDO. bUnknown = ?. IF bUnknown THEN DISPLAY 'yes'. ELSE IF NOT bUnknown THEN DISPLAY 'no'. ELSE DISPLAY "Unknown".
Во-вторых, рекомендуется избегать проверок с условием NOT:
IF NOT bLog THEN
Использование “пустого” THEN и ELSE нежелательно:
IF condition THEN . ELSE RUN test.p.
При наличии в выражении смешанных условий AND и OR используйте скобки.
При использовании длинных серий вложенных операторов IF следует использовать «скобки» DO/END и отступы для улучшения понимания логики:
IF bLog THEN DO: IF bLog2 THEN DISPLAY 'ONE'. END. ELSE DISPLAY 'TWO'.
С точки зрения производительности – три очень простых рекомендации:
- Рекомендуется не использовать TRUE, FALSE, YES, and NO в условии IF из-за ухудшения производительности, большего R-кода и ухудшения читабельности: IF blog THEN лучше, чем IF blog = TRUE THEN
- Для группы условий, связанных AND, сначала должны проверяться наименее вероятные условия.
- Для группы условий, связанных OR, сначала должны проверяться наиболее вероятные условия.
Если возможно, рекомендуется использовать функцию IF вместо оператора IF (Программа 66), это улучшает производительность.
Программа 66. Оператор и функция IF
DEFINE VARIABLE l AS LOGICAL NO-UNDO. DEFINE VARIABLE i AS INTEGER NO-UNDO. DEFINE VARIABLE r AS INTEGER NO-UNDO. l = YES. ETIME (TRUE). DO i = 1 TO 1000000: IF l THEN r = 1. ELSE r = 2. END. MESSAGE ETIME VIEW-AS ALERT-BOX INFO BUTTONS OK. ETIME(TRUE). DO i = 1 TO 1000000: r = IF l THEN 1 ELSE 2. END. MESSAGE ETIME VIEW-AS ALERT-BOX INFO BUTTONS OK.
В таблице (Таблица 2. Приоритеты операций ABL) указаны приоритеты операций ABL – их следует учитывать при написании выражений. Для изменения последовательности выполнения и улучшения читабельности следует использовать скобки.