Кажется, существует конфликт по поводу того, лучше ли использовать пробел или токены, такие как скобки, для обозначения области видимости. Я видел множество похвал Python для решения проблемы несовместимости отступов, но многие не согласны:
Любой язык, имеющий пробелы в качестве токенов, должен умереть.
позже опубликовал тот же ответ:
Я был вроде против пробелов, как токены, пока я действительно не попробовал это. Вероятно, помогло то, что мой личный макет пустого пространства в значительной степени соответствует тому, что используют все в python-land. Возможно, это то, что я немного минималистичен, но если вы все равно собираетесь делать отступы, зачем беспокоиться о {} s?
Я вижу некоторые четкие аргументы для каждой стороны:
используя пробелы:
- помогает уменьшить противоречивые отступы в коде
- очищает экран, заменяя видимые токены пробелами для той же цели
используя токены:
- намного проще вырезать и вставлять код на разные уровни (не нужно исправлять отступы)
- более последовательный Некоторые текстовые редакторы по-разному отображают пробелы.
- более популярный в настоящее время.
Есть ли какие-то моменты, которые я пропустил? Какой ты предпочитаешь? Какие-нибудь слова мудрости после долгой работы с одним или другим?
PS. Я ненавижу, когда языки не используют один и тот же токен для каждой структуры управления. VB действительно раздражает своими заявлениями End If
и End While
утверждениями, большинство других языков просто используют {} для всего. Но, возможно, это тема для другого вопроса ...
источник
Ответы:
Я думаю, что многие из нас, программистов (включая меня), склонны «логизировать» каждое решение. Это хорошо, но не на каждый вопрос есть логичный ответ. Например, я сомневаюсь, что повара отправляют вопросы о chefoverflow (если такая вещь существует), спрашивая плюсы и минусы яблочного пирога против вишневого пирога. Это вопрос, который тебе нравится больше.
Имея это в виду, я думаю, что самый простой ответ состоит в том, чтобы сказать: «Некоторые люди любят фигурные скобки, некоторые люди любят пробелы» и оставить это в покое.
источник
Я думаю, что рискуя походить на настоящего фаната, каждый, кто утверждает, что пробел «помогает уменьшить противоречивые отступы в коде», никогда не использовал Visual Studio. С помощью одной команды (я думаю, что ярлык по умолчанию - Ctrl + K, D), все отступы мгновенно согласуются ». Кроме того, при вставке кода отступы мгновенно исправляются, вообще ничего не делая, и то же самое верно при написании нового кода или при переносе чего-либо в какой-
if
либо или какой-либо другой блок (переформатирование происходит по мере}
ввода). Кроме того, нажатие Enter после завершенного оператора всегда помещает курсор на правильный уровень отступа для следующего оператора, даже если предыдущий оператор был смещен дальше из-заif
или что-то подобное, что делает очень сложным случайное представление о том, что утверждение все еще находится в состоянии,if
когда его нет.Суть, которую я пытаюсь подчеркнуть, не в том, что Visual Studio великолепен. Я пытаюсь подчеркнуть, что IDE может автоматизировать исправление отступов (и другие вопросы форматирования), но только если смысл программы не зависит от ее форматирования. Это дает программисту больше возможностей сосредоточиться на актуальной задаче программирования. Синтаксис, подобный Python, является контрпродуктивным: невозможно написать IDE, которая может «исправить» отступ кода Python, потому что сам отступ определяет некоторую семантику.
¹ (Я знаю, что есть особый случай, когда VS отказывается переформатировать, а именно литералы массива, которые занимают несколько строк, но это не относится к делу.)
источник
if
строку в любом месте. Затем вы должны приступить к исправлению отступа вручную.Лично я нахожу, что мне нужна пустая строка с наличием токена на собственной строке, чтобы заставить мой разум понять, что код находится в другой области видимости.
Я ненавижу, когда в питоне люди идут:
в то время как на жетоне я ненавижу, когда люди копируют и вставляют, а не очищают отступы ,
или не используйте отдельную строку для токена .
Я могу прочитать все три, но они не такие, как я ожидаю, и я должен приложить усилия, чтобы разобрать их, и, как говорит Джоэл, когда вещи не работают так, как вы ожидаете, это расстраивает вас.
источник
Pro: Насколько я знаю, в мире Python нет священных войн с отступами / фигурными скобками. Принятие этого решения от имени разработчиков, вероятно, спасло некоторую боль.
Против: Анонимные функции ограничены одной строкой. Звучит нормально, но я часто пишу многострочные
lambda
s в Scheme (в основном для подачи вmap
илиapply
в одном месте, поэтому не имеет смысла объявлять отдельно).источник
lambda n: a = n \\na.sort() \\na[0:3]
что не вернете синтаксическую ошибку? Трюк `\` позволяет вам распределить вашу однострочную лямбду по нескольким строкам, но вы все равно не получите более одной фактической строки.{} добавляет избыточность. Слишком много избыточности плохо, слишком мало плохо. И вводить вручную это плохо, особенно если его трудно использовать.
Так что во времена плохой / нет IDE, стиль пробелов может быть немного лучше. Но с мощной IDE брекеты лучше.
источник
Проблема, которую я обнаружил с пробельным языком, была с многостраничными условными выражениями. Добавление строки в середине второй страницы и выделение одного пробела в середине всего беспорядка может кардинально изменить логику вашего кода. И даже если чей-то код «правильный», попытка его чтения превращает игру в угадайку в ужас. Для какого «если» это «еще»? Я могу считать скобки намного проще, чем я могу сосчитать невидимые пустые символы. И техника размещения на этом сайте продолжает разбивать их в одно пространство.
источник
Я не думаю, что это действительно против .
Pythoneers часто критикуют программистов скобок, как если бы они легко нарушали отступы, потому что они могут.
На самом деле, я всегда использовал 100% -ное согласование отступов еще до того, как узнал о Python и его области видимости отступов.
Дело в том, что языки скобок также могут навязывать корректные отступы в компиляторе, и мы получим лучшее из обоих миров. Видеть? нет против вообще.
Питонеры утверждают, что фигурные скобки бесполезны, когда отступы являются частью синтаксиса, но это не так, фигурные скобки улучшают читабельность. Я пробовал программировать на Python, и это очень интересный язык для меня, но пробовали ли вы иметь
if-elif
цепочки с более чем 2 или 3 уровнями отступов? они больше не выглядят такими аккуратными.PS: я написал фигурные скобки, но в более общем смысле я имею в виду токены-разделители. Открывающая фигурная скобка может рассматриваться как избыточная, но язык может выглядеть следующим образом (на самом деле я уверен, что есть такие языки, но я их плохо знаю):
PS2: 2019, 4 года после этого ответа. Я выучил Python и полностью привык к его семантическому отступу, и мне совсем не трудно его читать. Особенно с помощью современных IDE, которые рисуют вертикальные полосы, чтобы помочь в идентификации блоков отступа.
источник