[АП 2023/01] - свежий номер журнала
Как в PHP получить полные сведения о конфигурации сервера
Как выделить память для данных в Паскале
Использование системных команд в С++
Как создать каталог в Паскале с помощью процедуры MkDir

Как стать успешным фрилансером
Раздел: Как стать программистом / Секреты программирования /
Особенности использования вложенных операторов
![]() |
Все способы изучить Python
Каждый раз, изучая какую-то новую науку, мы задаёмся вопросом - где взять обучающие материалы. Конечно, сегодня нам помогает в этом Интернет. Но иногда на поиски уходит очень много времени, а нужного результата мы не получаем... Собрал для вас кучу полезных ссылок для изучения Python. не благодарите ))) Подробнее... |
Вложенные операторы - это, как правило, однотипные операторы, которые вложены друг в друга. Например:
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, в С++ это {...}). Обычно допускается не использовать операторные скобки, если в блоке только одно выражение. Подробнее см. здесь.
Кроме того, в некоторых языках программирования могут быть ограничения на количество вложенных операторов. Впрочем, в любом случае следует стремиться к тому, чтобы вложенных операторов было как можно меньше, потому что это усложняет код, делает его менее “читабельным” (менее понятным), и, следовательно, повышает вероятность возникновения труднонаходимых ошибок.
Подписаться на канал в RuTube
Вступить в группу "Основы программирования" Подписаться на рассылки по программированию |
![]() |
Директивы компилятора
Как это ни странно, но даже многие опытные программисты не используют директивы компилятора, считая их чем-то ненужным и бесполезным. А между тем, директивы компилятора - это очень классная штука. Если их умело применять в своих программах, то можно существенно сократить время на разработку и уменьшить количество рутинных операций. Подробнее... |