Согласие на обработку персональных данных.

16.11.2019
Новые видео и статья Массивы в JavaScript.

10.11.2019
Новые видео и статья Циклы в JavaScript.

05.11.2019
Новый выпуск журнала Автоматизация и программирование.

29.10.2019
Новые видео и статья Процедура Val.

21.10.2019
Новые видео и статья Оператор выбора в JavaScript.



Раздел: Как стать программистом / Секреты программирования /

Особенности использования вложенных операторов

Вложенные операторы - это, как правило, однотипные операторы, которые вложены друг в друга. Например:

if TRUE then
    if FALSE then ;  //Это вложенный условный оператор if

Вложенными могут быть и любые другие операторы, такие как оператор выбора (case) и операторы циклов.

Но в этой статье и видео я бы хотел поговорить не только и не столько о вложенных операторах, сколько об одной моей фишке, которую я использую, чтобы не заблудиться во вложенных операторах, когда их очень много.

Вот пример исходного кода:

//----------------------------------------------------------------
// Ищет каталоги в каталоге Dir
//----------------------------------------------------------------
procedure TfrmMain.FindFilesOnDisk(Dir : string);
var SR    : TSearchRec;
    Err   : integer;
    i, j  : integer;
    st    : string;
begin
  if (Dir[Length(Dir)] <> '\') then Dir := Dir + '\';
  Err := FindFirst(Dir + '*.*', faAnyFile, SR);
  while Err = 0 do
    begin
      j := 0;
      st := AnsiUpperCase(SR.Name);
      if lbDirs.Items.Count > 0 then //Если в списке есть каталоги
        //Проверить, нет ли среди них
        for i := 0 to lbDirs.Items.Count - 1 do            
          if lbDirs.Items[i] = st then  //найденного
            begin
              j := 1;
              break;
            end;      //if lbDirs.Items[i] = st then
      if j = 0 then
        begin
          if (SR.Name <> '.') and
             (SR.Name <> '..') and
             ((SR.Attr and faDirectory) <> 0) then
            begin
              inc(NumDir);
              DirList.Add(Dir + st);
              frmMain.sbMain.Panels[1].Text := IntToStr(NumDir);
              pbFind.Position := NumDir;
              Application.ProcessMessages;
              FindFilesOnDisk(Dir + SR.Name);
            end;    //if (SR.Name <> '.') and
        end;        //if j = 0 then
      Err := FindNext(SR);
    end;
end;

Совершенно неважно, что делает этот код. Важно, что он содержит вложенные операторы. И вообще в программе может быть довольно много вложенных операторов, которые как матрёшки находятся друг в друге.

И когда таких операторов слишком много, очень трудно бывает понять, где кончается блок кода одного оператора и начинается другой. Поэтому в конце каждого блока я ставлю комментарий, в котором пишу начало оператора (например, if j = 0 then). И тогда становится видно и понятно, что здесь кончается блок именно этого оператора.

В примере такие случаи выделены цветом.

Ограничения вложенных операторов

Напоследок пару слов об ограничениях вложенных операторов.

Во-первых, эти ограничения зависят от языка программирования. Во-вторых, от компилятора и средства разработки.

Почти во всех языках при использовании вложенных операторов требуется применять так называемые операторные скобки (в Паскале это begin...end, в С++ это {...}). Обычно допускается не использовать операторные скобки, если в блоке только одно выражение. Подробнее см. здесь.

Кроме того, в некоторых языках программирования могут быть ограничения на количество вложенных операторов. Впрочем, в любом случае следует стремиться к тому, чтобы вложенных операторов было как можно меньше, потому что это усложняет код, делает его менее “читабельным” (менее понятным), и, следовательно, повышает вероятность возникновения труднонаходимых ошибок.


Директивы компилятора Директивы компилятора
Как это ни странно, но даже многие опытные программисты не используют директивы компилятора, считая их чем-то ненужным и бесполезным. А между тем, директивы компилятора - это очень классная штука. Если их умело применять в своих программах, то можно существенно сократить время на разработку и уменьшить количество рутинных операций. Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика