Особенности циклов в Паскале: почему «for i:=0 to i do» работает не как в других языкахDelphi , Синтаксис , Циклы
При работе с циклами в языках программирования часто возникают вопросы о поведении кода. Одной из таких особенностей является использование одной и той же переменной в качестве счетчика цикла и числа повторений в Паскале. Рассмотрим, почему такой подход работает в Паскале, но не работает в других языках. Проблема В Паскале можно использовать одну и ту же переменную для счетчика цикла и числа повторений. Например, следующие два фрагмента кода:
и
казалось бы, должны быть эквивалентными, так как оба выводают «012345678910». Но почему это работает в Паскале, и почему такой подход не работает в других языках? Альтернативный ответ В Паскале можно использовать одну и ту же переменную для счетчика цикла и числа повторений. Например, следующие два фрагмента кода:
и
казалось бы, должны быть эквивалентными, так как оба выводают «012345678910». Но почему это работает в Паскале, и почему такой подход не работает в других языках? Подтвержденный ответ Такой подход работает в Паскале из-за особенностей языка. В Паскале значение конца цикла оценивается только один раз, то есть значение переменной берется при входе в цикл. Это означает, что поведение цикла в Паскале эквивалентно следующему коду:
В свою очередь, этот код эквивалентен следующему:
В других языках, например, в C, если использовать такой подход:
то поведение будет отличаться. В этом случае значение конца цикла пересчитывается на каждой итерации, что приводит к бесконечному циклу:
Заключение В Паскале значение конца цикла оценивается только один раз и сохраняется в неявную временную переменную. Это означает, что условие конца цикла не меняется с переменной «i». В других языках значение конца цикла пересчитывается на каждой итерации, что может привести к бесконечному циклу. Хотя такой подход работает в Паскале, его не рекомендуется использовать из-за возможной путаницы для читающего код. Лучше всего использовать différente переменную в качестве счетчика цикла:
Как гласит одно из правил программирования: «Всегда пиши код так, как будто тот, кто будет его поддерживать, — сумасшедший психопат, знающий, где ты живешь. Пиши код для читаемости». Источник: https://groups.google.com/d/msg/comp.lang.c++/rYCO5yn4lXw/oITtSkZOtoUJ Таким образом, при работе с циклами в Паскале важно понимать особенности языка и использовать их с умом для написания чистого и понятного кода. В Паскале можно использовать одну и ту же переменную для счетчика цикла и числа повторений, так как значение конца цикла оценивается только один раз. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |