Лутц М. - Изучаем Python (1077325), страница 60
Текст из файла (страница 60)
Стиль языка РуФ)топ состоит в том, чтобы вообще опускать скобки в подобных инструкциях. Конец строки является концом инструкции Второй, еще более важный синтаксический элемент, который вы не найдете в программном коде на языке РуФ)топ, — это точка с запятой. В языке РуФЬоп не требуется завершать инструкции точкой с запятой, как это делается в С-подобных языках: х= 1; Общее правило в языке РуФЬоп гласит, что конец строки автоматически считается концом инструкции, стоящей в этой строке. Другими словами, вы можете отбросить точку с запятой и инструкция будет работать точно так же: Существует несколько способов обойти это правило, с которыми вы вскоре познакомитесь. Но в общем случае большая часть программного кода на языке РуФЬоп пишется по одной инструкции в строке, и тогда точка с запятой не требуется. В данном случае, если вы скучаете по тем временам, когда программировали на языке С (если такое состояние вообще возможно...), можете продолжать вставлять точки с запятой в конце каждой инструкции— синтаксис языка допускает это.
Но не делайте этого: потому что если вы будете поступать так, окружающим сразу будет видно, что вы остаетесь программистом на языке С, который никак не может переклю- Глава 10. Введение з инструкции языка Ру()топ читься на использование языка Ру(Ьоп. Стиль языка Ру(Ьоп состоит в том, чтобы вообще опускать точки с запятой.' Конец отступа — это конец блока Теперь третий, и последний, синтаксический компонент, который удаляет РуФЬоп, и возможно, самый необычный для недавних ех-С-программеров (пока они не поработают с РуФЬоп 10 минут и не поймут, что в действительности это является достоинством языка), — вы не вводите ничего специально в ваш код, чтобы синтаксически пометить начало нконец вложенного блока кода.
Вам не нужно вставлять Оейтп/епа, слеп/апет! или фигурные скобки вокруг вложенных блоков', как это делается в С-подобных языках: тт(х>у) ( х=1; у=2; ) Для этих целей в языке РуФЬоп используются отступы, когда все инст. рукции в одном и том же вложенном блоке оформляются с одинаковыми отступами от левого края. По величине отступа интерпретатор определяет, где находится начало блока и где — конец: !1 х > у. х=1 у=2 Под отступами (!лс(ел!а!(ол) в данном примере я подразумеваю пустое пространство слева от двух вложенных инструкций.
Интерпретатор не накладывает ограничений на то, как выполняются отступы (для этого можно использовать символы пробела или символы табуляции), и на величину отступов (допускается использовать любое число пробелов или символов табуляции), При этом отступ для одного вложенного блока может существенно отличаться от отступа для другого блока. Синтаксическое правило состоит лишь в том, что все инструкции в пределах одного блока должны иметь один и тот же отступ от левого края. Если это не так, будет получена синтаксическая ошибка, и программный код не будет работать, пока вы не исправите отступ.
Почему отступы являются частью синтаксиса? Правило оформления отступов может показаться необычным на первый взгляд для программистов, работавших с С-подобными языками Кстати, в дачаЯсг!рз также можно не ставить точку с запятой в конце строки, но широко распространена традиция ставить такой ограничитель, демонстрируя тем самым как раз хороший стиль оформления программного кода.
— Примеч. науч. ред. Известна программистская шутка, уместная в этом контексте: это не Ьпй, это уеаз и ге. — Примеч. науч. ред. История о двух (( 279 программирования, но это было сделано преднамеренно и является одним из основных способов, которыми язык Ру1Ьоп вынуждает программистов писать однородный и удобочитаемый программный код. По существу это означает, что вы должны выстраивать свой программный код вертикально, выравнивая его в соответствии с логической структурой.
В результате получается менее противоречивый и более удобочитаемый программный код (в отличие от большей части кода, написанного на С-подобных языках). Требования к выравниванию программного кода в соответствии с его логической структурой — это главная составляющая, способствующая созданию удобочитаемого кода, и, следовательно, кода, пригодного к многократному использованию и простого в сопровождении как вами, так и другими. Фактически, даже если ранее вы никогда не использовали Ру$Ьоп, после прочтения этой книги у вас должна выработаться привычка оформлять отступы в программном коде для удобочитаемости в любом языке программирования. Язык Ру(Поп вносит определенные ограничения, сделав отступы частью синтаксиса, но они достаточно важны для любого языка программирования и оказывают огромное влияние на применимость вашего программного кода. Ваш опыт может отличаться от моего, но когда я занимался разработкой полный рабочий день, мне платили зарплату за работу над крупными старыми программами, написанными на языке С++, над которыми долгие годы трудились множество программистов.
Практически у каждого программиста был евой стиль оформления программного кода. Например, мне часто приходилось изменять циклы ия(1е, написанные на языке С++, которые начинались примерно так: иы1е (х > О) ( Даже еще не дойдя до отступов, мы можем столкнуться с тремя или четырьмя способами расстановки фигурных скобок в С-подобных языках. В организациях часто ведутся жаркие споры и пишутся стандарты по оформлению исходных текстов программ (обсуждение которых сильно выходит за рамки проблем, которые решаются в процессе программирования).
Оставим этот вопрос в стороне, ниже приводится пример оформления, с которым мне часто приходилось сталкиваться в программном коде на языке С++. Первый программист, который поработал над этим циклом, оформлял отступы четырьмя пробелами: иы1е (х > О) ( Со временем этот программист был переведен на руководящую должность, н его место занял другой, который предпочитал использовать более широкие отступы: их>1е (х > О) ( 280 Глава 10. Введение в инструкции языка Руйоп Позднее и он ушел на другую работу, а его место занял третий, которому не нравилось делать отступы: нП11Е (х > 0> ( И так далее. В конце блок завершается закрывающей фигурной скобкой ()), которая и делает этот фрагмент структурированным (о чем можно говорить с определенной долей сарказма).
В любом блочноструктурированном языке программирования, будь то Ру()топ или другой язык, если вложенные блоки не имеют непротиворечивых отступов, их очень сложно читать, изменять и приспосабливать для многократного использования. Отступ — это важная составляющая поддержки удобочитаемости. Ниже приводится другой пример, на котором, возможно, вам приходилось обжечься, если вы достаточно много программировали на С-подобном языке, Взгляните на следующие инструкции языка С: тт (х) зт (т) зтзтеяепт1; е1зе зтатезепт2; К какому оператору 11 относится инструкция е1зе7 Это удивительно, но инструкция е1зе относится к вложенному оператору 11 - (тт(у)), даже при том, что визуально она выглядит так, как если бы относилась к внешнему оператору 1à — (1((х)). Это классическая ловушка языка С и она может привести к неправильному пониманию программного кода тем, кто его изменяет, и к появлению ошибок при его изменении, которые будут обнаружены, только когда марсоход врежется в скалу! Такого ие может произойти в языке Ру(акоп, потому что отступы для не.
го имеют важное значение и программный код работает именно так, как выглядит. Взгляните на эквивалентный фрагмент на языке Ру(Ьоп: тт х.' зт зтатевептп е1зе зтассаепт2 281 История о двух Н В этом примере инструкции 1! и е1ве, расположенные на одной вертикальной линии, связаны логически (внешний оператор 1! х). В некотором смысле Ру$)топ — это язык типа т!(/УВ1»!1/У0 (Ж)таФ Топ Бее 1в»тт)та1 Топ Се( — что видишь, то и получаешь) — что вы видите, то и получаете, потому что порядок оформления программного кода определяет порядок его выполнения независимо от предпочтений того, кто его пишет. Если этого недостаточно, чтобы осознать преимущества синтаксиса языка РуФ)топ, приведу одну историю.
В начале своей карьеры я работал в одной благополучной компании, занимавшейся разработкой программных систем на языке С, который вообще не предъявляет никаких требований к оформлению отступов. Но, несмотря на это, когда в конце рабочего дня мы отправляли свой программный код в репозитарий, он автоматически проверялся сценарием, анализировавшим оформление отступов. Если сценарий обнаруживал несоответствия, на следующий день утром мы получали электронные письма с замечаниями — и такой порядок завели наши начальники! По моему мнению, даже если язык программирования и не требует этого, хороший программист должен понимать, какое важное значение имеет выравнивание для удобочитаемости и высокого качества программного кода.
Тот факт, что в языке Ру1)топ отступы были возведены в ранг синтаксиса, по большей части выглядит как достоинство языка. Наконец, имейте в виду, что практически любой текстовый редактор с дружественным (для программистов) интерфейсом обладает встроенной поддержкой синтаксической модели языка Ру$)топ. В Ру1)топ-среде разработки 1ПЬЕ, например, отступы оформляются автоматически', когда начинается ввод вложенного блока; нажатие клавиши Вас)сврасе (забой) возвращает на один уровень вложенности выше, а кроме того, П)1 Е позволяет настроить величину отступов во вложенном блоке. Нет никаких стандартных требований к оформлению отступов: чаще всего используются четыре пробела или один символ табуляции на каждый уровень вложенности; вам самим решать, какой ширины отступы вы будете использовать.
Выполняйте отступ вправо, чтобы открыть вложенный блок, и возвращайтесь на предыдущий уровень, чтобы закрыть его. Кроме того, на практике замена фигурных скобок символами табуляции является достаточно простой задачей для инструментальных средств, которые должны выводить программный код на языке Ру$)топ.