~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 7E80AAEA1C32E5A8D74F7F7F3CD7AF75__1713507060 ✰
Заголовок документа оригинал.:
✰ Off-side rule - Wikipedia ✰
Заголовок документа перевод.:
✰ Правило офсайда — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Off-side_rule ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/7e/75/7e80aaea1c32e5a8d74f7f7f3cd7af75.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/7e/75/7e80aaea1c32e5a8d74f7f7f3cd7af75__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 10:57:50 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 19 April 2024, at 09:11 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Правило офсайда — Википедия Jump to content

Правило офсайда

Из Википедии, бесплатной энциклопедии

Правило оффсайда описывает синтаксис языка программирования , который определяет границы блока кода посредством отступов . [1] [2]

Этот термин был придуман Питером Ландином , возможно, как игра слов на законе «вне игры» в футбольном союзе .

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

Язык сторонних правил также описывается как имеющий значительные отступы .

Определение [ править ]

Питер Ландин в своей статье 1966 года « Следующие 700 языков программирования » определил правило оффсайда следующим образом: «Любой токен без пробелов слева от первого такого токена в предыдущей строке считается началом нового декларация». [3]

Пример [ править ]

Ниже приведен пример блоков отступов в Python ; популярный язык правила офсайда. В Python правило используется для определения границ операторов, а не деклараций.

def   is_even  (  a  :   int  )   ->   bool  : 
     if   a   %   2   ==   0  : 
         print  (  'Even!'  ) 
         return   True 
     print  (  'Odd!'  ) 
     return   False 

Тело функции начинается со второй строки, поскольку отступ в ней на один уровень (4 пробела) больше, чем в предыдущей строке. if Тело предложения начинается со строки 3, поскольку оно имеет дополнительный уровень отступа, и заканчивается на строке 4, поскольку строка 5 имеет отступ на уровень меньше, то есть с отступом.

Двоеточие ( :) в конце строки оператора управления находится синтаксис Python; это не аспект правила офсайда. Правило может быть реализовано без такого синтаксиса двоеточия.

Реализация [ править ]

Правило оффсайда может быть реализовано на этапе лексического анализа , как в Python , где увеличение отступов приводит к тому, что лексер выводит INDENT токен и уменьшение результатов отступа в лексере, выдающем DEDENT жетон. [4] Эти токены соответствуют открывающей скобке. { и закрывающая скобка }в языках, в которых для блоков используются фигурные скобки, и означает, что грамматика фраз не зависит от того, используются ли фигурные скобки или отступы. Для этого требуется, чтобы лексер удерживал состояние, а именно текущий уровень отступа, и, таким образом, мог обнаруживать изменения отступа при его изменении, и, таким образом, лексическая грамматика не является контекстно-свободной : INDENT и DEDENT зависят от контекстной информации предыдущего уровня отступа.

Альтернативы [ править ]

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

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

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

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

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

Производительность [ править ]

В языке Scala ранние версии допускали только фигурные скобки. В Scala 3 добавлена ​​возможность использовать отступы для структурных блоков. Дизайнер Мартин Одерски сказал, что это был самый важный способ, с помощью которого Scala 3 повысил его собственную производительность: он делает программы более чем на 10% короче и держит программистов «в потоке», и советует его использовать. [6]

Известные языки программирования [ править ]

Известные языки программирования с правилом оффсайда:

Другие форматы файлов [ править ]

Известный язык непрограммирования, форматы текстовых файлов со значительными отступами:

См. также [ править ]

Ссылки [ править ]

  1. ^ Хаттон, Г. (6 декабря 2012 г.). «Разбор с использованием комбинаторов» . В Дэвисе, Кей; Хьюз, Джон (ред.). Функциональное программирование: материалы семинара в Глазго 1989 г., 21–23 августа 1989 г., Фрейзербург, Шотландия . Springer Science & Business Media. стр. 362–364. ISBN  9781447131663 . Проверено 3 сентября 2015 г.
  2. ^ Тернер, окружной прокурор (13 августа 2013 г.). «Некоторые истории языков функционального программирования (приглашенный доклад)» . В Лойдле, Ганс Вольфганг; Пенья, Рикардо (ред.). Тенденции в функциональном программировании: 13-й Международный симпозиум, TFP 2012, Сент-Эндрюс, Великобритания, 12–14 июня 2012 г., Пересмотренные избранные статьи . Спрингер. п. 8. ISBN  9783642404474 . Проверено 3 сентября 2015 г.
  3. ^ Ландин, П.Дж. (март 1966 г.). «Следующие 700 языков программирования» (PDF) . Коммуникации АКМ . 9 (3): 157–166. дои : 10.1145/365230.365257 . S2CID   13409665 .
  4. ^ Документация Python , 2. Лексический анализ : 2.1.8. Отступ
  5. ^ «CLHS: Раздел 2.1.4.7» .
  6. ^ Одерский, Мартин (17 июня 2020 г.). Мартин Одерски: Обновление Scala 3 (видео). YouTube. Событие происходит в 36:35–45:08. Архивировано из оригинала 21 декабря 2021 года . Проверено 25 апреля 2021 г.
  7. ^ Сайм, Дон. «Подробные примечания к выпуску обновления CTP F# за май 2009 г. и выпусков бета-версии 1 Visual Studio 2010» . Архивировано из оригинала 21 января 2019 года.
  8. ^ Отчет Haskell - Макет
  9. ^ Lobster, язык программирования со статической типизацией и управлением памятью во время компиляции для разработки игр и графики.
  10. ^ MoonScript, язык, который компилируется в Lua.
  11. ^ MoonScript 0.5.0 - Языковое руководство
  12. ^ https://docs.duet3d.com/User_manual/Reference/Gcode_meta_commands
  13. ^ Спецификация разметки reStructuredText – Отступы
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 7E80AAEA1C32E5A8D74F7F7F3CD7AF75__1713507060
URL1:https://en.wikipedia.org/wiki/Off-side_rule
Заголовок, (Title) документа по адресу, URL1:
Off-side rule - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)