Code style. Быть или не быть после if-ов - single line statements-ам

kruzer25

Ты так и не осилил ответить на вопрос из предыдущего треда.
В чём преимущество отсутствия фигурных скобок? Ты сейчас пытаешься всех убедить, что без фигурных скобок не так уж плохо, иногда с этим можно жить - отлично, пусть даже случилось чудо и тебе все поверили, согласились, что недостатков не так много, как кажется... но преимущества-то какие?

kruzer25

Кстати
Мне кажется, что тем, кто может в этом случае чего-то не заметить, лучше не программировать совсем, а пойти работать в макдональдс. Правда там они будут забывать, что клиент просил колу без льда, а к картошке надо положить уже оплаченный сырный соус
Я не в курсе, как в макдональдсах, а в обычных кафе официанты обычно записывают на специальную бумажку то, что заказывает посетитель. , конечно, отобрал бы у них бумажки, сказав "нормальный человек и так всё запомнит, а идиоты пусть идут улицы подметать; правда, там они будут забывать, что какую-то улицу пропустили, а какую-то подметают уже по третьему разу".

kokoc88

Ничего по поводу моего вопроса ты так и не ответил.
Ответил. И в этой теме тоже ответил. Оба стиля имеют право на жизнь. Теперь не еби мне мозг и научись думать.

kruzer25

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

kokoc88

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

kruzer25

а вот здесь я кстати не совсем понял твою позицию чем именно чреваты)
Потому что у нас спор не с тобой был, а с . же сказал, что знает, чем чреваты, что это всем очевидно, но он настолько продвинут, что считает, что нормальные люди на эти грабли не наступят.
Речь идёт о том, что, когда кто-то модифицирует код, и хочет, например, вставить дополнительную инструкцию, к коду
if(something)
doSomething;

просто дописывают новую инструкцию, и получается
if(something)
Debugger.Debug("Something is true");
doSomething;

, если этот человек не заметил отсутствие скобок, и код начинает работать совсем не так, как ожидается.

Dasar

Речь идёт о том, что, когда кто-то модифицирует код, и хочет, например, вставить дополнительную инструкцию, к коду
В современных IDE (как минимум для C#/Java) это решается тем, что код после вставки строки автоматом(или полуавтоматом) форматируется, и соответственно строка сдвинется, и будет визуально видно, что она вне блока if-а.
соответственно, короткие if-ы можно записывать без скобок (но if и операция на отдельных строках)
если же операция длинная (не влазит в одну строчку то тогда скобки должны быть, чтобы не было путаницы.
плюс в отсутствии скобок - чем код короче(без фанатизма тем он легче читается

kruzer25

В современных IDE (как минимум для C#/Java) это решается тем, что код после вставки строки автоматом(или полуавтоматом) форматируется
И?
Проведу аналогию - если есть антивирусы, это значит, что не надо пользоваться файрволом?
C#/Java - это всё-таки не питон.
плюс в отсутствии скобок - чем код короче(без фанатизма тем он легче читается
Вот в убирании фигурных скобок мне как раз видится фанатизм. Кому-то становится сложнее читать код от того, что там стоят фигурные скобки? Во всяком случае, от такого аргумента не было.

Makc500

>если этот человек не заметил отсутствие скобок,
Это каким же надо быть оленем, чтобы в серьезном проекте не заметить отсутствие скобок в следующей и предыдщих строках?

Dasar

Кому-то становится сложнее читать код от того, что там стоят фигурные скобки?
для меня сложнее, и читать, и писать. у Майка, afaik, такая же позиция
т.е. моя позиция, что оба варианта имеют права на жизнь даже одновременно в одном и том же коде: и со скобками, и без скобок
потому что да, мне непонятно - зачем перегружать вот такой простой код:

if (x < 0)
return -x;
else
return x;

kruzer25

Ну вот так - взял и проглядел.
Я же не говорю, что это происходит постоянно, чаще всё-таки замечаешь; но когда не замечаешь - то случается пц.

Makc500

Это равносильно тому, что проглядел и вместо "<0" написал ">0".

kruzer25

для меня сложнее, и читать, и писать.
Если уж говорить про IDE - всё это настраивается, можно сделать, чтобы "писать" надо было ровно столько же.
А при прочтении - не понимаю, в чём сложность. Что в
if(x < 0) {
return -x;
} else {
return x;
}

читать сложнее, чем в
if (x < 0)
return -x;
else
return x;

? В первом варианте просто чётко видно отделение блоков.
И ещё один вопрос. Допустим, половина людей - как ты, им удобнее читать и писть без скобок; а другая половина - совершает из-за этого ошибки по описанной мной схеме. Какой code style всего проекта принять, с обязательными фигурными скобками или без них?

Dasar

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

if (x < 0)
x = -x;
y = 5;
return x;

kruzer25

Не равносильно.
В твоём примере - написал не то, что хотел.
В моём примере - написал то, что хотел, но не заметил, что кто-то до тебя не поставил фигурные скобки, и не выполнил за него его работу.
И ещё. В коде, по-твоему, будет везде только подход "без фигурных скобок, если тело занимает одну строку", или где как?
Во втором случае - ещё легче допустить ошибку, потому что в однострочных телах скобки иногда есть, а иногда нет.
В первом случае - ошибку допустить немного сложнее (хотя непонятно, почему для однострочных тел правила не такие, как для многострочных, принципиально-то они ничем не отличаются, кроме точки зрения компилятора но тогда надо ещё обязать всех не забывать _удалять_ фигурные скобки при удалении нескольких строк из тела так, что оно становится однострочным.

kruzer25

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

Dasar

Это равносильно тому, что проглядел и вместо "<0" написал ">0".
стандартная опечатка, много раз видел в коде, и в чужом, и бывало в своем - возникает обычно, когда идет модификация условий с одних на другие (операнды поменяли, про знаки забыли, или наоборот)
поэтому на это есть хорошее предложение, писать только знаки меньше, т.е. меньшую величину всегда располагать слева
т.е. 0 <= x && x < length, лучше чем length > x && 0 <= x

Dasar

Беглом просматривании чего?
кода, конечно.

mkrec

> В моём примере - написал то, что хотел, но не заметил, что кто-то до тебя не поставил фигурные скобки, и не выполнил за него его работу.
Почему вдруг ты думаешь, что это _его_ работа, если в вашем коллективе не было четко и однозначно принято ставить скобки?
Можно усердно делать код все более дуракоустойчивым и доходить в этом до абсурда. Просто 99% программеров будут тратить лишние 5% времени на написание и лишние 5% на перепроверки кода ради того, чтобы 1% программеров этот код не запоганил при дальнейшем использовании.

kruzer25

кода, конечно.
Какого именно кода?
Или всего проекта?

bleyman

ОМГ.
Вот так:
if(x < 0) {
return -x;
} else {
return x;
}

никто не пишет. Если мы о сишарпе говорим. Там устойчивое соглашение писать фигурные скобки отдельными строчками, типа у всех кодеров нормальные мониторы и всё такое.
Тем не менее, if с двумя условиями я лично всегда пишу со скобками. Ибо нехуй. В тех случаях, когда внутри явно экспрешн, а не стейтмент, я пишу тернарный оператор (если строчки длинные, то разнося на несколько).
А вот
if (blablabla) doSomething(bla);

или получающийся из него переносом на следующую строчку в силу длины
if (blablabla) 
doSomething(bla, blablabla, bla(bla bla);

мне по нраву.

kruzer25

никто не пишет. Если мы о сишарпе говорим. Там устойчивое соглашение писать фигурные скобки отдельными строчками
Мне казалось, что такие соглашения принимаются в рамках конкретной группы разработчиков, а не всемирно. ;)
В тех случаях, когда внутри явно экспрешн, а не стейтмент, я пишу тернарный оператор
Согласен.
мне по нраву.
Первый вариант нормален, а вот второй - говно. Чем тебе фигурные скобки-то мешают? Не надо своё питонье видение мира переносить на языки со скобками ;)

milanadiana

Я вот думаю, что если так:
if (condition) expression;
то можно. А так:
if (condition)
expression
нельзя именно по тем причинам, что написал пенартур.
Ну и конечно, если возможно, лучше заменять оператором ? :

Makc500

>никто не пишет. Если мы о сишарпе говорим. Там устойчивое соглашение писать фигурные скобки отдельными строчками, типа у всех кодеров нормальные мониторы и всё такое.
В Ява пишут.

kokoc88

легко.
могу про себя честно сказать: да, в редких ситуациях, могу на что-то отвлечься и не заметить.
Кстати, у меня за много лет практики ни разу не возникло такой ошибки. Да и мои коллеги таких ошибок ни разу не делали. Поэтому мне эта ситуация, честно говоря, кажется раздутым мифом.

Dasar

Кстати, у меня за много лет практики ни разу не возникло такой ошибки.
а у тебя в работе вообще ошибки бывают?
какие? и почему(что привело к ошибке)?

kokoc88

а у тебя в работе вообще ошибки бывают?
какие? и почему?
Вообще бывают. В основном, связанные с логикой и со, скажем так, распределёнными механизмами (клиент-сервер, поток-поток, событие-состояние). Третьего вопроса я совсем не понял.

Dasar

Третьего вопроса я совсем не понял.
что послужило причиной ошибки?
опечатка, не понимание работы чего-либо, не получилось отследить все взаимосвязи и т.д.

kokoc88

что послужило причиной ошибки?
опечатка, не понимание работы чего-либо, не получилось отследить все взаимосвязи и т.д.
Опечатки разве что на Си++ или Lua. А так скорее второе и третье.

pitrik2

Кстати, у меня за много лет практики ни разу не возникло такой ошибки. Да и мои коллеги таких ошибок ни разу не делали. Поэтому мне эта ситуация, честно говоря, кажется раздутым мифом.
а я вот столкнулся
в интрнет-банке Райфа, главный прогер создававший этот инетбанк случайно такое допустил
бага долгое время там жила пока я не заметил
там был некий парсинг и стояло куча ифов, для читаемости было все отформатировано без автоформата
я в svn логах не лазал но и так было понятно что 2-я и 3-я строчка в ифе появились позже, а скобки добавить забыли
Оставить комментарий
Имя или ник:
Комментарий: