Скобки '{' '}' C# code style
От: _ichensky Европа https://github.com/ichensky
Дата: 20.11.15 21:26
Оценка:
Здравствуйте,
Какой вариант вы предпочитаете и испольуете когда разрабатывате софт.
Убираете ли вы скобки если всего одна строка с кодом после if|for|while,
если нет то почему?

1.
if (a < 5)
    func1();

for (int i; i < 100; i++)
    func2();

while (b < 12)
    func3();

2.
if (a < 5)
{
    func1();
}

for (int i; i < 100; i++)
{
    func2();
}

while (b < 12)
{
    func3();
}


Мне больше нравиться первый вариант, т.к. код выглядит более компактно.
меньше личших знаков которые надо анализировать и игнорировать пока читаешь код,
т.е. глаза меньше устают, больше строчек кода помещается на одном экране.
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
c# code style '{' '}'
Re: Скобки '{' '}' C# code style
От: Sinix  
Дата: 20.11.15 21:42
Оценка: 7 (2) +2
Здравствуйте, _ichensky, Вы писали:

_>Здравствуйте,

_>если нет то почему?

http://stylecop.soyuz5.com/sa1503.html
http://ericlippert.com/2012/12/04/why-are-braces-required/
http://mycodehere.blogspot.ru/2012/12/sa1503-curlybracketsmustnotbeomitted.html

Если коротко, то основной критерий для хорошей системы соглашений по кодированию всего один: она строится на правилах, а не на исключениях.
Исключения сложнее формализовать, сложнее проверять и почти невозможно применять автоматически.

Как следствие, на больших проектах любое исключение рано или поздно нивелирует правило, и код превращается в дикую мешанину из "я так вижу". Кому-то это может и нравится, мне — нет.
Re: if (condition) { statement; }
От: Qbit86 Кипр
Дата: 20.11.15 21:49
Оценка: +5
Здравствуйте, _ichensky, Вы писали:

_>1.

_>
_>if (a < 5)
_>    func1();
_>}
_>


Если в тестовых целях или при отладке понадобится не выполнять строку под условием, то её комментирование может привнести малозаметную ошибку:
if (a < 5)
    // func1();
func2(); // Неожиданно станет частью if'а и будет выполняться условно.

Заметной она станет, если выполнить в IDE переформатирование — это добавит отступ вложенности.

Более наглядно и предсказуемо, если область действия if'а отмечена фигурными скобками:
if (a < 5)
{
    // func1();
}
func2(); // Никаких неожиданностей, вызов вне if'а.
Глаза у меня добрые, но рубашка — смирительная!
Re: Скобки '{' '}' C# code style
От: Kolesiki  
Дата: 21.11.15 14:24
Оценка: :))
Здравствуйте, _ichensky, Вы писали:

_>Здравствуйте,

_>Какой вариант вы предпочитаете и испольуете когда разрабатывате софт.

Вот такой:



Re[2]: if (condition) { statement; }
От: Kolesiki  
Дата: 21.11.15 14:29
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Если в тестовых целях...


Sinix хорошо выше сказал: если брать каждое исключение во внимание (т.е. ваше "если"), то ничего путного не выйдет. Лучше скипать скобки, ибо читают код куда чаще, чем влезают в каждую строчку и "не выполняют". Кроме того, комментирующий должен быть внимателен, так нельзя комментировать if.
Re[3]: if (condition) { statement; }
От: Qbit86 Кипр
Дата: 21.11.15 14:48
Оценка: +1
Здравствуйте, Kolesiki, Вы писали:

K>Sinix хорошо выше сказал: если брать каждое исключение во внимание (т.е. ваше "если"), то ничего путного не выйдет. Лучше скипать скобки, ибо читают код куда чаще, чем влезают в каждую строчку и "не выполняют". Кроме того, комментирующий должен быть внимателен, так нельзя комментировать if.


Пропуск скобок — это и есть исключение. Типа: много'statement'овые блоки пишем со скобками, а одно'statement'овые синтаксически можно писать и так и эдак, но мы выберем вариант без скобок как исключение.
Глаза у меня добрые, но рубашка — смирительная!
Re: Скобки '{' '}' C# code style
От: _NN_ www.nemerleweb.com
Дата: 21.11.15 20:18
Оценка: +1
Здравствуйте, _ichensky, Вы писали:

_>Здравствуйте,

_>Какой вариант вы предпочитаете и испольуете когда разрабатывате софт.
_>Убираете ли вы скобки если всего одна строка с кодом после if|for|while,
_>если нет то почему?

Лично я для себя предпочитаю не писать скобки для одной строки.
В команде соглашение писать скобки всегда и я этого придерживаюсь так как однообразный стиль предпочтительней.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Скобки '{' '}' C# code style
От: Sinatr Германия  
Дата: 23.11.15 08:45
Оценка:
Здравствуйте, Kolesiki, Вы писали:

_>>Какой вариант вы предпочитаете и испольуете когда разрабатывате софт.

K>Вот такой:

На самом деле очень полезный вариант, называется Indent Guides:



А по поводу subj, я лично использую вариант 1 (см. пример выше). Потому что мне так нравится: исходники компактнее, больше помещается на экран, меньше "синтаксического мусора".

Если это допускается синтаксисом — это можно использовать, нужно лишь только понимать когда и почему.

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

Опускание скобок если тело состоит из одного операнда не стоит применять если при этом усложнятеся читаемость кода, например, в случае вложенных (nested) конструкций:

// проблема
if(conditionA)
    if(conditionB)
        ...
    else // требуется время, чтобы понять к какому if принадлежит этот else
        ...

// решение
if(conditionA)
{
    if(conditionB)
        ...
    else
        ...
}

// а вот такое я не понимаю (для одно-операндовых тел)
if(conditionA)
{
    if(conditionB)
    {
        ...
    }
    else
    {
        ...
    }
}


с другой стороны у VS довольно мощный форматтер (CTRL+K, CTRL+D — форматировать открытый документ), если не боитесь полагаться на MS, то исключения можно использовать везде, особенно если взят на вооружение Indent Guides.
---
ПроГLамеры объединяйтесь..
Re: Скобки '{' '}' C# code style
От: alexzz  
Дата: 23.11.15 10:01
Оценка:
Здравствуйте, _ichensky, Вы писали:

_>Здравствуйте,

_>Какой вариант вы предпочитаете и испольуете когда разрабатывате софт.
_>Убираете ли вы скобки если всего одна строка с кодом после if|for|while,
_>если нет то почему?

Пишу всегда со всеми скобками. И автоформатирование настроил вставлять скобки везде где можно.

Пробовал перейти на вариант без скобок, если блок состоит только из одной строки, но буквально через пару дней добавил в одном месте вторую строку и забыл про скобки — баг. Как только обнаружил, стал снова ставить скобки везде. Мне и так есть над чем подумать, чтобы ещё и за скобками следить.
Re: Скобки '{' '}' C# code style
От: Sharov Россия  
Дата: 23.11.15 10:10
Оценка:
Здравствуйте, _ichensky, Вы писали:


2, кмк более читабелен хоть и синтаксически избыточен.
Кодом людям нужно помогать!
Re: Скобки '{' '}' C# code style
От: amironov79  
Дата: 24.11.15 07:03
Оценка: +4
Здравствуйте, _ichensky, Вы писали:

_>Здравствуйте,

_>Какой вариант вы предпочитаете и испольуете когда разрабатывате софт.
_>Убираете ли вы скобки если всего одна строка с кодом после if|for|while,
_>если нет то почему?

Предпочитаю скобки писать, но более компактно:

if (a < 5) {
    func1();
}

for (int i; i < 100; i++) {
    func2();
}

while (b < 12) {
    func3();
}


Почему-то этот вариант не очень популярен. Возможно, из-за того что студия с настройками по умолчанию не дает так писать.
Re[2]: Скобки '{' '}' C# code style
От: GarryIV  
Дата: 24.11.15 07:13
Оценка: 5 (1) +1
Здравствуйте, amironov79, Вы писали:

A>
A>if (a < 5) {
A>    func1();
A>}

A>for (int i; i < 100; i++) {
A>    func2();
A>}

A>while (b < 12) {
A>    func3();
A>}
A>


A>Почему-то этот вариант не очень популярен. Возможно, из-за того что студия с настройками по умолчанию не дает так писать.


Это стиль Java, поэтому в C# так нельзя
WBR, Igor Evgrafov
Re[2]: Egyptian brackets
От: Qbit86 Кипр
Дата: 24.11.15 08:53
Оценка:
Здравствуйте, amironov79, Вы писали:

A>
A>if (a < 5) {
A>    func1();
A>}
A>

A>Почему-то этот вариант не очень популярен.

Нельзя просто так взять, и выполнить код безусловнио:
// if (a < 5) {
    func1();
}
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: Скобки '{' '}' C# code style
От: mDmitriy Россия  
Дата: 24.11.15 10:48
Оценка:
Здравствуйте, Kolesiki, Вы писали:
K>Вот такой:
K>Image: 44921_original.png
"Мсье знает толк..."(с)
Re: Скобки '{' '}' C# code style
От: Vladek Россия Github
Дата: 24.11.15 19:13
Оценка: +2
Здравствуйте, _ichensky, Вы писали:

_>Здравствуйте,

_>Какой вариант вы предпочитаете и испольуете когда разрабатывате софт.

Стараюсь ставить скобки везде. Ещё важный момент для меня, не использую оператор !, он плохо читается:

if (String.IsNullOrWhitespace(str) == false)
{
    DoSomething(str);
}


против

if (!String.IsNullOrWhitespace(str))
{
    DoSomething(str);
}
Re[2]: Скобки '{' '}' C# code style
От: alexzz  
Дата: 24.11.15 19:32
Оценка: 3 (1)
Здравствуйте, Vladek, Вы писали:

V>Стараюсь ставить скобки везде. Ещё важный момент для меня, не использую оператор !, он плохо читается:


Аналогично. Он не только плохо читается, но и редко соответствует семантике. Намного чаще требуется знать, что условие ложно, а не что его отрицание истинно.
Re[3]: Скобки '{' '}' C# code style
От: Kolesiki  
Дата: 25.11.15 21:47
Оценка:
Здравствуйте, alexzz, Вы писали:

V>>Стараюсь ставить скобки везде. Ещё важный момент для меня, не использую оператор !, он плохо читается:

A>Аналогично. Он не только плохо читается, но и редко соответствует семантике. Намного чаще требуется знать, что условие ложно, а не что его отрицание истинно.

Для этого умные люди (т.е. кого отсеяла на собеседовании C# team) используют оператор unless, правда это в Perl
Я не знаю в чём была гиперэкономия, когда керниганыричи забабахали свои символьные выкрутасы (&& || !), но экономия получилась буквально ОДИН СИМВОЛ — and or xor not — чего ради надо было занимать символы — непонятно.
Но это Си-легаси, никто не мешал ни Жабистам, ни Шарповодам использовать человечески удобные обозначения.
Re: Скобки '{' '}' C# code style
От: Doc Россия http://andrey.moveax.ru
Дата: 26.11.15 03:28
Оценка: +1
Здравствуйте, _ichensky, Вы писали:

_>Убираете ли вы скобки если всего одна строка с кодом после if|for|while,

_>если нет то почему?

Для себя мне больше нравится так:

if (a < 5)
    func1();

if (a < 5) {
    func1();
    func2();
}


А в команде так, как определены командные стили кода.
Re[3]: Скобки '{' '}' C# code style
От: Darooma Россия  
Дата: 28.11.15 17:52
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>Здравствуйте, amironov79, Вы писали:


A>>
A>>if (a < 5) {
A>>    func1();
A>>}

A>>for (int i; i < 100; i++) {
A>>    func2();
A>>}

A>>while (b < 12) {
A>>    func3();
A>>}
A>>


A>>Почему-то этот вариант не очень популярен. Возможно, из-за того что студия с настройками по умолчанию не дает так писать.


GIV>Это стиль Java, поэтому в C# так нельзя


не скомпилируется?
Re[4]: Скобки '{' '}' C# code style
От: amironov79  
Дата: 30.11.15 07:21
Оценка:
Здравствуйте, Darooma, Вы писали:

A>>>Почему-то этот вариант не очень популярен. Возможно, из-за того что студия с настройками по умолчанию не дает так писать.


GIV>>Это стиль Java, поэтому в C# так нельзя


D>не скомпилируется?


Скомпилируется. Но в студии со стандартными настройками такой стиль неудобен: форматер переносит открывающую скобку на новую строку.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.