Pull to refresh

Хотите «holy war» — получайте: curly braces

Reading time3 min
Views979
Все гениальное — просто.
Почему я начал топик этими словами: да потому что все гениальное уже давно придумано и все гениальное новое состоит из давно забытого гениального старого. Мы же, отличающие себя от животных тем что умеем мыслить, что мы существа разумные, очень часто по своей человеческой глупости не хотим видеть/признавать/осозновать элементарных вещей и склонны идти на поводу у других, даже не задумываясь и не анализируя то что нам предлагают.
Сегодня я разделю вас простой вещью на два лагеря


Причина войны: curly braces


Те кто програмит на РНР, да и многие другие, конечно же наслышан о преславутом Zend, фанатики готовы слепо верить и доверять всему что там производится и переваривать это в том виде, в котором это подается.
Наш «идеальный» зенд и его группа (ничего не имею против людей, которые его пишут — ибо заслуживают они уважения за свой труд и многолетний опыт) предлагает концепцию по стилям: http://framework.zend.com/manual/en/coding-standard.coding-style.html. Все бы хорошо, но с некоторыми моментами этого документа я согласиться не могую.
И вот в чем сырбор: «curly braces»

Что предлагает Zend:

class Foo
{
    private function Fee()
    {}

    private function Fee()
    {
        if (debug) {
        }
    }
}


Что предлагает Perl:

дайте ссылку на доку, поправлю, окромя этого ничего не нашел
sub my_func {
    ...
}


Что предлагает Ruby:

дока
def my_func
    ...
end


Что предлагает Python:

дока
def function_name:
    ...

Вообще отсутствуют кавычки, вместо start-bracket используется ":", которое остается в той же строке

Что предлагает Java:

дока
class Sample extends Object {
    int ivar1;
    int ivar2;

    Sample(int i, int j) {
        ivar1 = i;
        ivar2 = j;
    }

    int emptyMethod() {}

    ...
}


Что предлагает Google:

дока
Цитата: "An opening curly brace should never go on its own line; a closing curly brace should always go on its own line." — что означает, что вы никогда не должны отделять и переносить открывающую скобку на новую строку, а должна она быть всегда в той же строке (добавлю: в той же строке, что и логический элемент)
CalculateSampleCovariance <- function(x, y, verbose = TRUE) {
    ...
}


Я считаю нелогичным решения зенда потому что

  • неудобно: добавляет лишних срок, если у Вас файл из 200 строк, содержит 1 класс и 40 методов, то в случае с форматированием зенда на выходе Вы получаете +41 строку. Ни много, ни мало — 20% от общего к-ва строк в файле.
  • нелогично: в случае с зендом, закрывающая скобка закрывает скобку, а не логический элемент, сам же элемент при этом кажется «оторванным»
  • а зачем мешать два стиля в одном документе? (для непонятливых: брекет в классах и ф-циях уходит на новую строку, в иф-ах, свитч-ах и тд в той же строке) так зенд решил выделиться?


только Zend с этим не согласен, а вы какого мнения?

P.S. огромная просьба: не приводите в качестве аргументов что Checkstyle в phpUnderControl считает это ошибкой, потому что так написано в доке зенда или мой редактор (зенд или другой) так форматирует (мой, кстати — vim, 2 стиля одновременно не поддерживает). Выскажите свое мнение: почему так правильно, а так неправильно на ваш взгляд. Давайте также обстагируемся от личностей, я не буду приводить в пример, что Расмус пишет «function my_func {», а Себастиан (Бергман) — «function my_func \n {» (в стиле зенда)

P.P.S. да, я знаю, что тема заезжена не одним годом, и это как священные войны «линукс vs фря», «юних vs вин», хочу узнать вашу логику и чем вы руководствуетесь
Tags:
Hubs:
Total votes 36: ↑9 and ↓27-18
Comments49

Articles