четверг, 10 июня 2010 г.

Оформление исходных текстов

Заболел! Летом, блин!
И вот решил побрюздать, по мелочи, на избитые темы.

О стилях кодирования говорилось много. Существуют стронники жесткого следования стилю, сторонники допустимых послаблений. Есть те, кто плюют на всех -- "пишу как хочу".

Благодаря моему непосредственному начальнику я давно стал сторонником строгого следования в собственных исходных текстах (своих и рабочих). Места, которые вынуждено соприкасаются с внешним кодом, могут использовать другой name-convention для сглаживания перехода. В зависимости от инструмента (языка программирования), становится очевидно, что может быть применено и может ли вообще. Есть места, которые могут иметь отклонения и варианты. Все это оговаривается на начальных стадиях, каждый участник работы подтверждает согласие пользоваться стилем, и ему следуют.

Просто стиль должен быть естественным, логичным и обдуманным. Даже в мелочах.

Но бывает, что читаю о людях, которые утверждают, что ему удобнее (он привык), например, не ставить пробел после управляющего слова, а ставить его после скобок. И скулят, что его свободу ущемляют, когда за подобные места делается замечание.
if( expr)
if ( expr)
Люди, не порите чушь -- "она визжит и брыкается". Вы, когда пишете по-русски, ставите пробел перед открывающейся скобкой, и наоборот, не ставите пробел за ней. Делаете это автоматически и не причитаете о каких-то ущемлениях. Более того, грамотно писать вы уже привыкли (если вообще умеете), вас этому долго учили. Так чего же вы теперь выебываетесь?! Т.е. десять лет вы привыкали писать с соблюдением одного стиля, а потом за пару лет привыкли писать нарушая правила? Вас что, пиздили, чтобы добиться нужного эффекта? Более того, в своих ЖЖ-шечках вам удобно писать по-русски правильно, а в исходниках меняется мировоззрение?

Есть языки, в которых присутствуют некоторые особенности: как синтаксиса языка, так и стиля, устоявшегося в его сообществе. Да, подобное логично учитывать (в той или иной мере), при составлении своего стиля оформления. Никто не говорит, что исходные тексты языков программирования всегда могут быть похожи на естественные языки. Некоторые моменты вводить невозможно физически, или просто не целесообразно.

Но вой о том, что свободу ущемляют, это просто превыше моих сил. Свой псевдокомфорт ставится выше, чем продуктивность всей команды. Если вы считаете, что круче своей команды вместе взятой, так работайте один. Если нет, и ваши дурные привычки для вас важнее, то вы хуже избалованного ребенка, ковыряющего пальцем в носу на людях, и хнычущего, когда его отрывают (было ведь так хорошо и удобно). Более слабые и сильные коллеги должны читать вашу "резьбу по коду", в самих исходниках, в "патчах"/"диффах", и видеть ваше неуважение к ним в элементарных вещах.

Я не говорю, что никто не допускает ошибок, не забывается -- это все естественно. Но во-первых, следить за оформлением совсем не трудно, и это хорошая привычка. Во-вторых, уже давно есть автоматические оформители исходников, которые можно запускать перед "коммитами" (хоть автоматически). В конце-концов, если пользуетесь IDE, то все современные продукты можно настроить на использования нужного стиля, оно автоматически за вас все сделает.

Сознательное нежелание использовать общий стиль, попытка выделиться в такой мелочи и сделать исходники неоднородными -- неуважение к коллегам, к их времени. Однородные исходники читаются и обозреваются намного лучше. Чтение исходников -- значительная часть рабочего времени, а это время ваше, и ваших коллег.

Привыкайте, блять, уважать чужой труд!

2 комментария:

Анонимный комментирует...

Хм...
А я if(expr) (и прочее аналогичное, не важно, ключевое слово или вызов функции) пишу без пробела не потому, что русский язык, а потому что визуально это сродни вычислению функции (в математическом смысле слова).
Пишем же ж f(x) , а не f (x).


Кстати, а вот если foo - целочисленная переменная, ты пишешь
if (foo) или if (foo != 0) ? :)

Unknown комментирует...

@mandrakelelix

1. Там, где if -- управляющее слово, и семантически отличающется от применения функции к аргументам, стараюсь его обособлять. Позволяет легче отличать control-flow конструкции от операций с функциями.
Вот вызов функции и скобки -- без пробела. В математике пробелы между функцией и списком аргументов, что при объявлении, что при применении -- зачастую не ставят.
Я же говорю, стиль должен быть логинчым и естественным.

2. В питоне -- if (foo). В Си -- зачастую также.
Но вообще код стараюсь формировать так, если это возможно или удобно, чтобы условие с отрицанием не фигурировало. Т.е. чтобы было:
if foo:
body1
else:
body2
а не:
if not foo:
body2
else:
body1