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

StackOverflow https://stackoverflow.com/questions/725973

Вопрос

На этот вопрос уже есть ответ здесь:

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

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");
        }
    }

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

Это было полезно?

Решение

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

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

Другие советы

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

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

Ваш пример – это злоупотребление условный оператор,

Гораздо яснее это можно выразить так:

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

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

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

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

Например:

a == null? "empty" : a

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

a ?? "empty"

Говорит парень из комиксов.«Худшее использование тернарного оператора».

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

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

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

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

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

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

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

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

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

Отладка - это еще одно:в напр.C++ нельзя поставить точку останова только на одной из ветвей.

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

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

Несколько скобок значительно улучшают читабельность.

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

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

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");
    }
}

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

Это называется тернарный оператор (мы не вызываем бинарный код тот вторичный код, в конце концов), и уже спрашивали:

Разумно ли это использование тернарного оператора?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top