Если раньше философы обожали выводить из под пера (палки?) трактаты о соотношении материального и идеального, конкретного и абстрактного, задавались вопросами "а есть ли бог в подлунном мире" или "насколько конечно бесконечное", выделяли концепты, строили онтологии… то сегодня новые философы, но уже от программирования, просто завалили резиновый Интернет статьями о менеджменте проектов, применении шаблонов, о разумности использования принципов ООП, о своих языковых предпочтениях и, наконец, о стилях программирования. О последних и поговорим.
Смешно, просто если рассудить, стиль программирования - это всего лишь множество правил по расстановке ‘ ’, ‘\n’ и ‘\t’. Ещё иногда сюда добавляются символы выделения блоков, к примеру, такие как ‘{’ и ‘}’ и правила именования. Но стиль, как известно, конечному компилятору по бую, чего не скажешь о бедных уставших программистах. Я не зря отписал такой витиеватый первый абзац, не зря, потому что тоже прочитал одну статейку о программировании в общем, в которой изобличались лжекодеры, пренебрегающие пробелами и переносами, и фанатики, устраивающие holly-wars на такую тонкую тему как… штиль! И соответственно появилась мысль.
Рассмотрим классический пример:
#include int main() { int x; scanf(“%d”, &x); if(x>0) printf(“hello\n”); return 0; }
Вроде всё знакомо, но как-то не так, не хватает той самой заветной лесенки. Пример утрированный, но рабочий. Конечно, в одну строку пишут только самые отчаянные перцы; остальные же просто тихонько добавляют лишний пробел там или тут, забывают про табуляции, дают переменным несуразные имена. Вот и корень проблемы, когда из-за банального оформления время разбора в чужом коде вырастает на порядок.
Например, я отлично знаю, что подобный код компилятор C/C++ ну никогда не осилит:
if a > b {
a = b;
}
Всё верно, не хватает круглых скобок вокруг условия и каждый программист поэтому обязан их ставить, конечно, если он не пишет код ради каких-то мазохистских положений. Давайте расширим идею и спросим себя: а почему нельзя формализовать сам стиль и запретить избыточные лексические конструкции, например, такую как:
if(a > b) a = b;
Пусть теперь данный код не компилируется по причине отсутствия пробела между "if” и ‘(’. Также следует указать, что операторы после условия, даже если он один, следует заключать в блок, ведь мы же знаем чем иногда чревато такое пренебрежение. Другими словами, подобный код должен всегда выглядеть так (иначе минимум warning):
if (a > b) {
a = b;
}
И ничего страшного в этом нет. Это не ущемление прав и не падение демократических устоев, а, как раз наоборот - забота о человеке, который потенциально может заглянуть в твой код. Ведь разве сложно ВСЕГДА константы писать большими буквами, делать соответствующие отступы, давать вменяемые имена переменным, отделять операнды от операторов… Стилевые правила обычно описываются в документации самими же разработчиками того или иного языка. В своё время я проглядел Java и С/С++ code agreements, малость изменил привычки, но всё пошло во благо, честное слово.
Кстати, разработчики языка Python исторические придерживались подобного мнения. Читаем: «Одной из интересных синтаксических особенностей языка является выделение блоков кода с помощью отступов (пробелов или табуляций), поэтому в Питоне отсутствуют операторные скобки begin/end как в языке Паскаль или фигурные скобки, как в Си. Этот «трюк» позволяет заметно сократить количество строк и символов в программе». Пример и вся информация по
ссылке.
В живых языках подобные проблемы также имеют место быть. Намедни с
miri_on_air как раз разговаривали о полезности/бесполезности буквы Ё. И я не понимаю, зачем её букву Ё выкидывать на помойку, если она минимум улучшает воспринимаемость текста. Тем более в устной речи буква Ё почему-то ж всегда звучит, для чего же тогда это разногласие между письмом и речью? В общем, я за букву Ё на уровне правил по аналогии с вышесказанным.
[update]
Ещё бы не плохо ввести стандраты на смайлики, а то достали ретрограды-скобари с одной ')' и метрограды с расширенной версией в виде ":-)". Шутка, но первый вариант нужно запретить дабы такой частый парад скоб не наблюдать как ")))))))".