Как стать автором
Обновить

Комментарии 87

И ещё хотелось бы знать, как себя чувствуют выбравшие второй пункт, написав конструкцию } else { :)
Нормально.
прекрасно!
}
else
{
А меня почему-то коробит, что какой-то жалкий else занимает аж три строки.
зато от скобки к скобке невероятно удобно глазами по коду перемещаться!
Код не должен быть компактным, код должен быть читаемым
НЛО прилетело и опубликовало эту надпись здесь
Для чего код должен быть компактным?
Компилятору это без разницы, а вашим коллегам по команде читаемость важнее.

Наличие большого числа комментариев в коде отлично сказывается на его читабельности и отрицательно влияет на его компактность.

Длинные, осмысленные имена переменных уменьшают компактность кода, но увеличивают его читаемость.

Хоть в теории идеальный код — читаемый и компактный, на практике — эти понятия часто противостоят друг другу.

НЛО прилетело и опубликовало эту надпись здесь
Для маленьких проектов — да. От 2-3 MLOC когда нужно пойти посмотреть какую-нибудь логику в программе и выглядит это действо как «go to definition» -> «find all references» -> «go to defenition» -> «go to definition» ->… и перед глазами мелькают сотни экранов кода — разница между читаемостью и компактностью, увы, начинает ролять даже на таких мелочах как «спрятанные» фигурные скобки :(
любое
предложение
в
котором
переводы
строк
на
каждом
шагу
является
плохо
читаемым
Вы вероятно ничего не слышали о скорочтении. Ему обучают как раз по таким специальным книгам — по ширине текст небольшой и глазу не приходится скользить влево-вправо. В итоге по текст, на котором переводы строк на каждом шагу, намного быстрее читается.
Вы тут на else не наговаривайте!
Можно Code Folding использовать, и даже 1000 строк легко поместится на экране :)

НЛО прилетело и опубликовало эту надпись здесь
за живое задел)
Те кто второй пункт выбирают, так не пишут, скорее уж как-то так:
if (statement)
{
  ...;
}
else
{
  ...;
}
так и есть:)
не читабельно
Вполне комфортно:

}
else
{
я так пишу
if(){

}
else{

}
Пока устраивает.
Сравните это с кодом сверху. Хоть код самый простой, но уже как-то мозгу неприятно.
вы по-моему нервируете и тех и тех (8
Конечно. Потому, что перед фигурной скобкой должен быть пробел.
if (statement) {
    doSomething();
}
else {
    doAnotherThing();
}


А еще меня выворачивает когда пишут
if (statement) {
    ...
} else { // арррррр!
    ...
Забыл добавить почему:
мне кажется, что визуально else должен находиться на том же уровне, что и if
В отдельной строке взглядом быстрее отлавливаются, когда пробегаешься по коду.
Программирую и на php и на javascript, всегда ставлю на той же строчке с ключевым словом, ровно как и двоеточие:

function name() {
/**/
} else {
/**/
}
foreach ():
/**/
else:
/**/
endforeach;

Смысл не визуальный, а скорее принадлежности фигурной скобки к имени функции.
Скопипастил else внутрь foreach по глупости, прошу игнорировать, но смысл конструкции понятен.
Ээ, а где linux kernel, он же K&R style?
int main(int argc, char *argv[])
{
    ...
    while (x == y) {
        something();
        somethingelse();
        if (some_error)
            do_correct();
        else
            continue_as_usual();
    }
    finalthing();
    ...
}
Кстати, использование этого стиля не мешает мне писать на питоне, шелле и лиспе. Питон – это форсирование отступов, а не стиля скобок.
Честно, не знал что так пишут. По-моему это какая-то классовая дискриминация ключевых слов :)
Это пошло с тех времен, когда мониторы были очень маленькие, текстовые редакторы очень простые а программы короткие. Сейчас, увы, времена изменились и проекты от 10 MLOC — норма жизни. Читаемость выползла на первое место и начала жрать скобки :(.
ну мне все еще удобно и привычно ставить скобки именно так :)
Мне тоже :). Но обязанности тимлида заставляют бороться с привычками и делать не как нравится, а как по феншую :(. Бо частые гуляния по чужому коду не добавляют иллюзий относительно того, что пять миллионов строк «все равно легко читаются» O_O.
НЛО прилетело и опубликовало эту надпись здесь
Автоформатирование тоже можно настроить по-разному, нет?
Это поведение во всех утилитах форматирования кода, является настраиваемым.
Каждый перевод строки 2 байта в Windows (с кодами 10 и 13), в Unix'ах по-моему только один байт. Но всё же это влияет на «вес файла».
Он имел в виду скомпилированный файл.
А я пишу так, как договорились с остальными участниками проекта.
Обычно в C# пишу { в отдельной строке. В Java, PHP — в конце строки с управляющей инструкцией.
Вы меня опередили ))
Я делаю точно так же.
И ещё интересно, чем я заслужил понижение кармы? :) Те кто минусанул объясните пожалуйста мне на будущее.
в карму по утрам я не плюю, но раз уж минусанул топик — расскажу

дело в том, что опрос этот… стар как мир. тема скобок настолько избита, что даже тут про это есть.
спрашивается, зачем ещё один опрос на эту тему?

да и сам опрос плохой, холиварный :( если вы работаете в команде, то вы должны придерживаться стандарту оформления принятым в этой команде. а команда, в свою очередь, должна придерживаться стандартам принятым для этого языка/средства разработки.

на будущее: не делайте опрос «Как вы именуете переменные?» :)
Спасибо за ответ. Но вообще я давно на хабре и такого опроса что-то не помню. Холивары были да, но не было топика, который дал бы чётко понять на какой стороне большинство.
Но вообще я давно на хабре и такого опроса что-то не помню.

может связано с тем, что тема устарела ещё раньше?

но не было топика, который дал бы чётко понять на какой стороне большинство

а ваш топик открыл нам глаза? :)

написали бы уж тогда большую статью на тему что ды как и почему так. есть много интересных историй на тему форматирования кода. к примеру, почему в С++ использовалось слово template

а на тему вашего опроса… нужна большая железная линейка. этой линейкой надо бить по рукам тем, кто ставит скобки не так как остальные разработчики в команде.
RE: может связано с тем, что тема устарела ещё раньше?
RE: а ваш топик открыл нам глаза? :)

А что делать тем, кто тогда ещё не родился? =) Лично я на данный момент доволен возникшим обсуждением и рад что увидел мнение более опытных людей. Это полезно. Наверняка, я не один такой — вон сколько тут пхпшеров набежало.
НЛО прилетело и опубликовало эту надпись здесь
Если вы пишите на php (а уж тем более на ZF), то рекомендуется открывающую скобку оставлять в той же строке при применении конструкции if/else. И на новой в случае функции/метода.
Стандарт кодирования на PHP в Zend Framework'е
Вот он — золотой комментарий.
Главное не то, где и как вы пишите скобки, а то, соблюдаете ли вы выбранную в вашей организации конвенцию. Можно одновременно работать на более чем одном проекте с разными соглашениями и одновременно использовать оба варианта и оба случая будут идеальными.
Если не изменяет память, это хорошо разжёвано тут.
Очень долго ставил скобку на новой строке. Но где-то год назад у меня что-то переклинило и я перешёл на египетский стиль (скобка в той же строке).
Аналогично.
ИМХО, кто часто польузется мышкой для перемещения курсора — те чаще ставят фигурную скобку на отдельной строке. Кто пользуется только клавиатурой (vim/emacs) — те чаще используют «египетские» скобки. Я использую «египетский» стиль — чтение кода не затрудняется, а навигация по коду, с использованием только клавиатуры, происходит быстрее. «if», "{", "}" и «else» — это не настолько сложные операторы, чтобы будучи в одной строке, они как-то затрудняли чтение.
Первый способ.
Компактнее, визуально ничем не устапает второму, так как вложенность прослеживается отступами.
В зависимости от того, как фолдятся блоки внутри скобок
в MS Visual Studio
if (1)
{
// bla-bla-bla
}
else
{
// bla-bla-bla
}


в xCode
if (1) {
// bla-bla-bla
}
else {
// bla-bla-bla
}


при сворачивании дает
if (1) {...}
else {...}
А чисто моего варианта нет в опросе. Не могу сказать, по какой причине (кажется, с каким-то фреймворком работал, и там так было принято), но я почему-то для себя такое правило выработал: если объявление класса или функции — скобка на новой строке, а если управляющая конструкция — на той же.

Т.е. как-то так:
function a()
{
if (1=1) {
// nothing
} else {
// noting too
}
}
Возможно, это как-то на подсознании работает, т.к. K&R — одна из первых моих книг по программированию, еще самиздатовская печать
Сам использую такой стиль. Подсмотрел здесь.
А где вариант: зависит от framework / стандарта кодирования?
Не по феншую :). Многолетнее использование одного стиля дает к нему affinity и позволяет с высокой скоростью читать и писать код. Особенно читать.
Да, но если вы не один разработчик, то надо договариваться. И лучше договорится на берегу ) А чтобы было меньше споров, и можно было спокойно без напряга читать документацию и использовать какой-то готовый код, то лучше принять то, что полагается делать в выбранном инструменте
Феншуй — не догма, а руководство к действию :)

Если что-то пишешь с импользованием фреймворка (тем более, если это некий «придел» вроде плагина, модуля, библиотечного класса и т.д.), то порой более «феншуйным» будет использовать не собственные традиции и привычки, а те нотации, которые декларированы в этом фреймворке.
НЛО прилетело и опубликовало эту надпись здесь
В новых проектах — оставляю "{" на предыдущей строке.
В уже существующих проектах — использую стиль, принятый в проекте.

Я ставлю по ситуации:
и так
_each(list_fields, (field, fun) -> { 
   act_tmpl.getRange(Rect.VShift(act_names[field], ix, true)).Value = 
      fun(order, ix); });

и так
orders_list.forEach((order) ->
{
   ...
}); 

Ну вообще все зависит от языка программирования. В том же Delphi "{" означает комментарий, либо "{$" директиву компилятору.
Интересно наблюдать за результатами голосования: первый и второй варианты уже несколько раз сменили лидерство :)
Имхо, автор злостный холиварщик!
Попробуйте на досуге создать голосовалку с 5ью вариантами «Черепаха» и удивитесь ;)
Имхо в слове холиварщик нет смысла, как и в слове тролль. Если мне нравится живая дискуссия между людьми с разным мнением — значит я холиварщик? Если я хочу поговорить на животрепещущую тему, то я — тролль?
Стараюсь писать в новой строке. Если даже будет новый проект, то стараюсь убедить начальство перейти на этот стиль. Понимаю если IDE выделяет нужные области, подсвечивает скобки и т.д. Но когда открываешь просто в чем-либо для просмотра, то иногда трудно найти… «БЛИИН, а где же эта скобка открывается то.....».
Пожалуй я приложу картинку :)
image
Удивительно. Прямо 1 в 1. Сейчас 257 vs 257
НЛО прилетело и опубликовало эту надпись здесь
Когда как, выбирает обычно кто-то другой. Но для своих проектов предпочитаю в отдельной строке. Единственное исключение иногда допускаю (когда думаю, что код никто не увидит :) )
if (1)
{
  doSomething();
} else {
  doSomething();
}

а то действительно жирновато 3 строчки на один else.

P.S. Ещё тема для coding style холивара Си-образных: ставить ли скобки когда в блоке один оператор то есть первый пример vs:
if (1)
  doSomething();
else 
  doSomething();
}
В питоне тоже фигурные скобки применяются
d = {'a':1, 'b':2}
Скриншот намба ту. Это война! :)
image
офигеть! до сих пор ровно идут.
Я египтянин :)
А как писать цикл с постусловием?
do
{
}
while (a);

или
do
{
} while (a);
Да. Вот постусловие в этом варианте форматирования — полный вынос мозга. Хотя постусловие само по себе — очень странная штука, не люблю его и никогда не юзаю.
Постусловие делает некоторые циклы естественнее, к чему, по-моему, и нужно стремиться. Циклы с постусловием используются, если нужно, чтобы код выполнился хотя бы один раз.
Не имею обыкновения ругаться, когда вижу, что человек поставил скобку не в той строке. Но ругаюсь, когда он вообще ее не поставил.
Почитав вас, захотелось вернуться к Python'у.
Делаю так:

if (statement)
   //only one line of code

if (statement) {
   //first line of code
   //second line of code
}

if ( (firstStatement && secondStatement) ||
     (thirdStatement) )
{
}
Вообще можно было бы в опросе указать, о каком языке программирования речь. Потому что вполне может быть, что на одном так, а на другом иначе.

Кроме того, фигурные скобки тоже бывают разные, одни для if-блоков, другие для функций, третьи для объектов, и соответственно могут разниться соглашения.
Блок должен быть выделен:
<функция/ключевое слово>
{
<код>
}
Мои привычки (C++,C#):

if(condition) one_statement;

if(condition) one_statement;
else one_statement;

if(condition){
  more than one statement
}

if(condition){
  more than one statement
}else{
  more than one statement
}

for(;;){
  for(;;){
    something
  }
}

do{
   more than one statement
}while(condition);


И даже так (для соблюдения единообразия):

if(condition){
  more than one statement
}else one_statement;


Таким образом, каждая открывающаяся скобка — там же, где оператор, закрывающаяся — на отдельной строке (если она не перед else).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории