вторник, 20 сентября 2011 г.

Операторы GoTo и NULL

Сегодня будет опубликована вторая статья по теме языка PL/SQL (и очередная – в моем двухнедельном марафоне о программировании). Сегодня я предлагаю поговорить о двух операторах данного языка, которые (иногда) очень и очень полезны. Это – оператор GoTo и оператор NULL. Для начала расскажу о них в общих чертах, а потом – более подробно.

В программировании на языке PL/SQL операторы GoTo и NULL не играют такой важной роли, как рассмотренные нами ранее операторы FOR и LOOP. А оператор GoTo требуется не часто. Но иногда использование оператора GoTo может сильно упростить программу – тогда его можно применять. А оператор NULL необходим для упрощения и улучшения читаемости условных операторов в циклах.

Но слишком частое использование оператора GoTo вредит программе. Если это возможно – не используйте этот оператор там, где его можно заменить на другой (более подходящий по смыслу). А вообще – я бы порекомендовал отказаться вообще от использования данного оператора (лично я еще ни разу его в PL/SQL не использовал).

GoTo:

Оператор GoTo осуществляет безусловный переход к метке. Метка (название) должно быть уникально для своей области действия. Сразу после мети должен стоят находиться выполняемый оператор, либо – исполняемый блок кода на языке PL/SQL. Оператор или блок кода могут находится и ниже и выше вызвавшего их кода. Для примера очень простой код приведу:

DECLARE
  vS NUMBER;
BEGIN
 FOR vS IN 1 .. 5
   LOOP
     dbms_output.put_line('Еще рано, vS = '|| TO_CHAR(vS));
     IF vS = 3 THEN
       GOTO METKA;
     END IF;
   END LOOP;
<<METKA >>
dbms_output.put_line('А вот теперь переход был произведен');
END;

NULL:

Оператор NULL не выполняет никаких действий, кроме как передает выполнение следующей (за собой) инструкции. В некоторых других языках данная инструкция называется No-Op (No Operation), например – в ассемблере используется аналогичная инструкция, которая называется NOP (тоже ничего не выполняет, но – зато заполняет пространство кода).

Как уже было сказано – оператор NULL необходим для улучшения понятности некоторых условных циклов (IF и так далее). Тоже простой пример:

DECLARE
  vS NUMBER := 4;
BEGIN
  IF vS = 4 THEN
    dbms_output.put_line('vS = '||TO_CHAR(vS));
  ELSE
    NULL;
  END IF;
END;

Сразу понятно, что в блоке ELSE ничего не выполняется (а то иногда бывает непонятно, где блог ELSE, либо – что в нем выполняется).

Вот такие два простых оператора. GoTo я, как уже говорил – не использую. А вот NULL – я использую чуть ли не в каждой из программ.

Комментариев нет:

Отправить комментарий