Правило офлайн

редактировать

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

Содержание
  • 1 Определение
  • 2 Примеры кода
  • 3 Реализация
  • 4 Альтернативы
  • 5 Внешние языки правил
  • 6 См. Также
  • 7 Ссылки
Определение

Питер Дж. Лэндин в статье под названием «Следующие 700 языков программирования » определил правило оффсайда следующим образом: «Любой непробельный токен слева от первого такого токена предыдущая строка считается началом нового объявления. "

Примеры кода

Ниже приведен пример блоков отступов в Python. Двоеточия являются частью синтаксиса языка Python для удобства чтения; они не являются необходимыми для реализации правила вне игры.

В Python правило используется для определения границ операторов, а не объявлений.

def is_even (a: (int, float)) ->bool: "" "Определить, является ли число 'a' четным." "" If int (a% 2) == 0: print ('Even!') return True print ('Odd!') return False

Python также приостанавливает действие правила вне скобок. Выражение в квадратных скобках продолжается до тех пор, пока его скобки не совпадут (или не совпадают):

{"this": True, "that": False, "them": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 23]}

В этом словаре ключи имеют отступ, и список разделен между двумя строками.

Реализация

Внешнее правило может быть реализовано на этапе лексического анализа, как в Python, где увеличение отступа приводит к лексер выводит токен INDENT, и уменьшение отступа приводит к тому, что лексер выводит токен DEDENT. Эти токены соответствуют открывающей скобке {и закрывающей скобке }в языках, в которых фигурные скобки используются для блоков, и означают, что грамматика фраз не зависит от того, используются ли фигурные скобки или отступы. Это требует, чтобы состояние удержания лексера, а именно текущий уровень отступа, таким образом, могло обнаруживать изменения в отступе, когда он изменяется, и, таким образом, лексическая грамматика не является контекстно-свободной - INDENT / ОТВЕДЕНИЕ зависит от контекстной информации предыдущего уровня отступа.

Альтернативы

Основная альтернатива разграничению блоков, популяризированная C, - игнорировать пробел и явно отмечать блоки фигурными скобками (т.е. {и }) или какой-либо другой разделитель. Хотя это дает больше свободы - разработчик может решить не делать отступов для небольших фрагментов кода, таких как операторы break и continue - небрежный отступ в коде может сбить читателя с пути.

Lisp и в других языках, основанных на S-выражениях, операторы не различаются от выражений, и скобок достаточно для управления областью действия всех операторов в пределах языка. Как и в языках с фигурными скобками, читатель в основном игнорирует пробелы (т.е. функция чтения). Пробел используется для разделения токенов. Явная структура кода Lisp позволяет ему выполнять автоматические отступы, которые действуют как визуальный сигнал для людей, читающих Lisp.

Другой альтернативой является то, что каждый блок должен начинаться и заканчиваться явными ключевыми словами. Например, в ALGOL 60 и его потомке Pascal блоки начинаются с ключевого слова beginи заканчиваются ключевым словом end. В некоторых языках (но не в Паскале) это означает, что новые строки важны (в отличие от языков с фигурными скобками), но отступы нет. В BASIC и Fortran блоки начинаются с имени блока (например, IF) и заканчиваются именем блока с добавлением END( например, END IF). В Fortran каждый блок также может иметь собственное уникальное имя блока, что добавляет дополнительный уровень ясности к длинному коду. АЛГОЛ 68 и Bourne shell (sh и bash ) похожи, но окончание блока обычно дается именем блока, записанным в обратном направлении (например, caseзапускает оператор переключения и продолжается до совпадения esac; аналогично условные if... затем... [elif... [else...]] fiили для циклов для... do... odв ALGOL68 или для... do... doneв bash).

Интересный вариант сделан в Modula-2, языке, подобном Паскалю, который устраняет разницу между однострочными и многострочными блоками. Это позволяет пропустить средство открытия блока ({или BEGIN) для всех, кроме блока функционального уровня, требуя только токен завершения блока (}или КОНЕЦ). Он также исправляет болтающееся остальное. По индивидуальному заказу маркер endдолжен располагаться на том же уровне отступа, что и остальная часть блока, что дает очень удобочитаемую структуру блока.

Одним из преимуществ подхода Fortran является то, что он улучшает читаемость длинного, вложенного или иного сложного кода. Группа выходящих или закрывающих скобок сама по себе не дает никаких контекстных подсказок о том, какие блоки закрываются, что требует обратного отслеживания и более тщательного изучения во время отладки. Кроме того, языки, которые позволяют использовать суффикс для ключевых слов типа END, дополнительно улучшают такие подсказки, такие как continueпо сравнению с continue для x. Однако современные устройства часто предоставляют визуальные индикаторы и такие функции, как складывание, чтобы помочь с этими недостатками.

Внешние языки правил
Языки программирования
Другие языки
См. также
Ссылки

Эта статья основана на материалах, взятых из Free On-line Dictionary of Computing до 1 ноября 2008 г. и включенных в соответствии с условиями «перелицензирования» GFDL, версия 1.3 или новее.

Последняя правка сделана 2021-06-01 08:29:26
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте