Pull to refresh

Comments 87

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

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

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

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

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

UFO landed and left these words here
Те кто второй пункт выбирают, так не пишут, скорее уж как-то так:
if (statement)
{
  ...;
}
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.
UFO landed and left these words here
Автоформатирование тоже можно настроить по-разному, нет?
Это поведение во всех утилитах форматирования кода, является настраиваемым.
Каждый перевод строки 2 байта в Windows (с кодами 10 и 13), в Unix'ах по-моему только один байт. Но всё же это влияет на «вес файла».
Он имел в виду скомпилированный файл.
А я пишу так, как договорились с остальными участниками проекта.
Обычно в C# пишу { в отдельной строке. В Java, PHP — в конце строки с управляющей инструкцией.
Вы меня опередили ))
Я делаю точно так же.
И ещё интересно, чем я заслужил понижение кармы? :) Те кто минусанул объясните пожалуйста мне на будущее.
в карму по утрам я не плюю, но раз уж минусанул топик — расскажу

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

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

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

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

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

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

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

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

А что делать тем, кто тогда ещё не родился? =) Лично я на данный момент доволен возникшим обсуждением и рад что увидел мнение более опытных людей. Это полезно. Наверняка, я не один такой — вон сколько тут пхпшеров набежало.
UFO landed and left these words here
Вот он — золотой комментарий.
Главное не то, где и как вы пишите скобки, а то, соблюдаете ли вы выбранную в вашей организации конвенцию. Можно одновременно работать на более чем одном проекте с разными соглашениями и одновременно использовать оба варианта и оба случая будут идеальными.
Если не изменяет память, это хорошо разжёвано тут.
Очень долго ставил скобку на новой строке. Но где-то год назад у меня что-то переклинило и я перешёл на египетский стиль (скобка в той же строке).
ИМХО, кто часто польузется мышкой для перемещения курсора — те чаще ставят фигурную скобку на отдельной строке. Кто пользуется только клавиатурой (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 и позволяет с высокой скоростью читать и писать код. Особенно читать.
Да, но если вы не один разработчик, то надо договариваться. И лучше договорится на берегу ) А чтобы было меньше споров, и можно было спокойно без напряга читать документацию и использовать какой-то готовый код, то лучше принять то, что полагается делать в выбранном инструменте
Феншуй — не догма, а руководство к действию :)

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

Я ставлю по ситуации:
и так
_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 выделяет нужные области, подсвечивает скобки и т.д. Но когда открываешь просто в чем-либо для просмотра, то иногда трудно найти… «БЛИИН, а где же эта скобка открывается то.....».
UFO landed and left these words here
Когда как, выбирает обычно кто-то другой. Но для своих проектов предпочитаю в отдельной строке. Единственное исключение иногда допускаю (когда думаю, что код никто не увидит :) )
if (1)
{
  doSomething();
} else {
  doSomething();
}

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

P.S. Ещё тема для coding style холивара Си-образных: ставить ли скобки когда в блоке один оператор то есть первый пример vs:
if (1)
  doSomething();
else 
  doSomething();
}
В питоне тоже фигурные скобки применяются
d = {'a':1, 'b':2}
офигеть! до сих пор ровно идут.
А как писать цикл с постусловием?
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).
Sign up to leave a comment.

Articles