Что думают разработчики .NET.NET об условном операторе?

Мне действительно очень нравится условный оператор в С#. Это облегчает мою жизнь в написании такой логики:

public  string FormattedFileName
    {
        get
        {
            return string.Format("{0}_{1}_{2}_{3}.xls", 
            DateTime.Now.Month.ToString().Length == 1 
             ? "0" + DateTime.Now.Month.ToString()
             : DateTime.Now.Month.ToString(), 
            DateTime.Now.Day.ToString().Length == 1 
             ? "0" + DateTime.Now.Day.ToString()
             : DateTime.Now.Day.ToString(), 
            DateTime.Now.Year.ToString(), 
            "DownLoaded_From_Clients");
        }
    }

Конечно, это означает, что я теряю читаемость кода. Во всяком случае, мне просто интересно, какое мнение придерживаются другие коллеги-разработчики в этом подходе к написанию кода. Благодарю. Я также оцениваю как негативные, так и позитивные комментарии.

Ответ 1

Нравится? Используйте его: не

// if (Like it) then (Use it) else (Don't)

Ответ 2

Когда вам это нужно, тройной оператор неоценим. Тем не менее, я думаю, что есть часто лучшие способы выразить себя. В примере, который вы указали, почему бы не использовать строку формата, которая будет делать именно то, что вы хотите: "{0:00}_{1:00}_{2}_{3}.xls", позволяя значительно упростить код?

Ответ 3

Если вы хотите сделать его более читаемым, вы всегда можете разделить вызовы на вызовы getCurrentMonth(), getCurrentYear, getCurrentDay....

Ответ 4

Пример, который вы используете, - это злоупотребление условным оператором ,

Это можно выразить гораздо более четко следующим образом:

public string FormattedFileName
{
    get {
       return DateTime.Now.ToString("MM_dd_yyyy") +
          "_DownLoaded_From_Clients.xls";
    }
}

Я считаю, что условный оператор весьма полезен и часто его использует. При правильном использовании он может помочь упростить код, сделав его более кратким.

В общем, я избегу связывать несколько условностей в одном и том же выражении, он быстро становится very запутанным, в результате чего код не может быть сохранен.

Я также нахожу??? очень полезны и нередко находят тройники, которые можно легко заменить на.

Например:

a == null? "empty" : a

можно заменить на:

a ?? "empty"

Ответ 5

Говорит комик. "Худшее использование троичного оператора когда-либо".

Ответ 6

Читаемость может быть достигнута за счет использования отступов, пробелов и, как сказал Дэйв, комментарии.

Ответ 7

Мое личное эмпирическое правило состоит в том, что, если это явно очевидно, что делает троица, тогда это нормально. Если он переполнен в одну строку, так что кодер может использовать тройной, то он должен быть заключен в скобки. Если

Ответ 8

Я использую его только для простых операторов if, не более двух. Больше, чем это, и я бы предпочел написать его длинным путем, чем иметь его похожим на то, что вы разместили. Затем снова я стараюсь не иметь более двух уровней вложенных операторов if, поэтому его никогда не выходят.

Ответ 9

Я все использую условный оператор, но вам здесь это не нужно...

return string.Format("{0}_{1}_{2}_{3}.xls", 
    DateTime.Now.Month.ToString("00"), 
    DateTime.Now.Day.ToString("00"), 
    DateTime.Now.Year, 
    "DownLoaded_From_Clients");

Ответ 10

Мне действительно не нравится, как вы его использовали. Я использую его, когда я могу легко поместить его на одну строку, вместо того, чтобы использовать многострочный оператор if.

Ответ 11

Мне нравится третичный оператор. Это только проблема, когда вы не знакомы с обозначением. Трудно время от времени находить документацию о одиноком операторе, но если бы он использовался больше в документации и книгах, я считаю, что он приобретет гораздо большую популярность.

Ответ 12

Когда вы смотрите в "функциональном" мире, где вы не можете "делать" вещи условно, условный оператор очень распространен. Так или иначе, у меня создалось впечатление, что функциональная парадигма набирает интерес, потому что она вынимает поток временного контроля, вызванный "если (это) еще до того". Это упрощает определение того, что вы имеете в виду, вместо того, чтобы сообщать компьютеру, что делать.

Считываемость - это одна из проблем, хотя на языках, которые не полностью поддерживают это.

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

Ответ 13

Мне вообще не нравится троичный оператор - он не очень читабельен, и я очень сердитый, когда делаю исправления и нахожу такие вещи.

Ответ 14

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

Ответ 15

Несколько скобок помогают легко читабельности.

Подумайте о том, чтобы добавить их, чтобы уточнить, что делает ваш оператор чередования, и вы должны быть в порядке.:)

Ответ 16

Почему бы не сделать что-то еще подобное?

public  string FormattedFileName
{
    get
    {
        return string.Format(
            "{0}_{1}_{2}_{3}.xls", 
            DateTime.Now.Month.ToString().Length == 1 ?
                "0" + DateTime.Now.Month.ToString() :
                DateTime.Now.Month.ToString(), 
            DateTime.Now.Day.ToString().Length == 1 ?
                "0" + DateTime.Now.Day.ToString() :
                DateTime.Now.Day.ToString(), 
            DateTime.Now.Year.ToString(), 
            "DownLoaded_From_Clients");
    }
}

Примечание. Я вообще не изменил код, просто форматирование. Как уже отмечалось, вам не нужно использовать условный оператор здесь, но небольшая осторожность с вашим отступом может значительно улучшить удобочитаемость. Мне нравится условный оператор, но если вы запустите весь свой код вместе в плотном блоке без отступов, он будет нечитаемым, независимо от того, какие операторы вы используете.