Сразу оговорюсь, метод для примера, меня интересует именно структура построения данного типа кода (switch и тд не предлагайте).
1) Какой из приведенных на фотографиях (на них, чтобы маил не отформатировал отступы) вариантов построения кода вы считаете более "чистым" и понятным? Почему? Если все вартанты неудачные, предложите свой.
2) Если выражение в скобках оператра большое, то где следует продолжить писать его тело (одно выражение): сразу после скобок, перейти на новую строку, добавить скобки?
Например:
if ((text.Contains("a") && text.Length > 8 && text.Length < 16) || vipText == true)
{
return "successful";
}
3) Вопрос аналогичен второму, только касается не условных операторов, а циклов.
Например, будет ли грязной практикой написать в одну строку цикл и его тело:
for (int i = 0; i < 5; i++) tmp++;

Первый вариант наиболее чистый и читаемый, только он нарушает дефолтный шарповский стиль (лично он мне не симпатизирует, пишу сдерживая тошноту) - по мнению автора языка, должно быть оформлено так:
private int SomeMethod(object obj)
{
if (obj is int)
{
return 0;
}
if (obj is double)
{
return 1;
}
if (obj is string)
{
return 2;
}
return -1;
}
Условные, и операторы цикла - в шарпе принято размещать на отдельной строке (см. руководство от MS), плюс то же самое дебильное правило оборачивать в блок даже единственное выражение, и в результате получаем следующий вид:
for (...)
{
expression;
}
Майкрософт такой майкрософт... как обычно: "все для удобства, все для людей" :D
Во первых, в разных языках (даже с похожим синтаксисом) разный code style. Во вторых, в разных фирмах используется разный code style - даже для одного языка. Единственный популярный язык, в котором code style встроен в язык - это Go.
Во вторых, хорошим стилем является ВСЕГДА ставить фигурные скобки - даже если тело оператора состоит из одного return или одного tmp++.
Так что с моей точки зрения все три скриншота плохи, но третий хуже - так как набит совершенно не нужными else.
А вот выносить return на отдельную строчку или писать
if (что-то там) { return 1; }
это уже дело вкуса. Если помещается на одну строку - можно и в одну строку, если не помещается или в теле оператора более одного вложенного оператора - только так:
if (длинное условие) {
return 2;
}
1) Тут зависит от длины команд, на мой вкус. Если они относительно короткие, все влезают примерно в половину ширины экрана, то вар. 1 мне кажется удобнее, только я бы еще табуляцией выровнял схожие части команд в строке, чтобы получилось что-то вроде таблицы - это очень удобно воспринимать и искать в ней нужные позиции. Если команды большие - лучше был бы вариант 2. Вариант 3 для случая, когда телом является return, является избыточным и поэтому хуже.
Вот если в теле другие команды, то, конечно нужно использовать else if, по тому же правилу - короткий код - оформляем в виде компактной таблицы, длинный - вложенными структурами, возможно с пустыми строками.
2) Ну, собственно в п. 1 ответил. Для длинной команды всегда лучше сделать перенос строк, строки, выходящие за границы экрана плохо читаются. Можно даже условие разместить на несколько строк, при наличии структуры - тоже оформить в виде таблицы. Для особо ужасных случаев - хорошая практика вынести часть вычислений логического выражения отдельными операторами в промежуточную переменную или переменные, разделив условия по смыслу (например, проверка типов, потом - диапазон допустимых значений, потом - какая-то бизнес-логика, чтобы при чтении кода не нужно было вникать в условие целиком, а можно было, по-желанию, фокусироваться на его частях.
3) Некоторые считают, что для форматирования нужно строго придерживаться одного подхода, лично мне кажется, что в подобных вопросах это не обязательно - если команда короткая - ее нужно записать в одну строку. Обычно подобные циклы воспринимаются как одна операция, например инициализация массива и т. д., довольно очевидна и не требует комментариев - не вижу смысла увеличивать количество строк.
if ((text.Contains("a") && text.Length > 8 && text.Length < 16) || vipText == true)
превышает 80 символов. Хорошо бы разбить:
if ((text.Contains("a") && text.Length > 8 && text.Length < 16)
|| vipText == true)
синтаксис ломы, а семантика -- порядок, правда ниxуя не понятно, что за задача имеет такой хрень
if (condition)
first();
second();