Объедините несколько строк кода C # для краткости или отдельно для ясности

1

Я новичок в С# и пытаюсь изучить лучшие практики. На прошлой неделе я столкнулся со многими ситуациями, в которых мне нужно сделать выбор между более длинным + более простым кодом или более коротким кодом, который объединяет несколько действий в один оператор. Каковы некоторые стандарты, которые вы используете в качестве ветеранов, когда пытаетесь написать четкий, сжатый код? Вот пример кода, который я пишу двумя вариантами. Что предпочтительнее?

A)

        if (ncPointType.StartsWith("A"))//analog points
        {
            string[] precisionString = Regex.Split(unitsParam.Last(), ", ");
            precision = int.Parse(precisionString[1]);
        }
        else
            precision = null;

B)

        if (ncPointType.StartsWith("A"))//analog points
            precision = int.Parse(Regex.Split(unitsParam.Last(), ", ")[1]);
        else
            precision = null;
Теги:

7 ответов

3
Лучший ответ

Нет никакого правильного или неправильного. Это мнение основано на самом деле.

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

  • 2
    +1 для того, чтобы другие программисты могли следить за этим проще
  • 2
    +1 за вышесказанное и тот простой факт, что вам будет легче, если вы вернетесь к коду через 6 месяцев и не вспомните, что именно вы сделали (или почему). Короткий код всегда выглядит аккуратно и доставляет массу удовольствия, но удобство сопровождения и читаемость важнее в долгосрочной перспективе (IMO).
Показать ещё 1 комментарий
0

Как отмечают все остальные, нет никаких жестких "правил" как таковых, но, вероятно, должны быть скобки вокруг обоих блоков кода; оба A и B имеют характеристики, сходные с ошибкой Apple goto, поскольку вводят потенциальную двусмысленность.

Рассматривать:

void Main()
{
    int x=1;
    if (x==1)
        Console.WriteLine("1");
    else if (x==2)
        Console.WriteLine("NOT 1");
        Console.WriteLine("OK");
}

будет производить

1
OK

Для кого-то, просматривающего код, особенно если он окружен другим, безобидным выглядящим кодом, это может быть легко ошибочно воспринято как "только распечатать" ОК ", если x==2). Очевидно, некоторые люди это заметят, а некоторые не будут, но почему представить опасность для отсутствия скобы фигурных скобок :)

0

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

int a = 0;
if (a == 0)
    int b = 3;

Недействительно, тогда как:

int a = 0;
if (a == 0)
{
    int b = 3;
}

Действует.

  • 0
    Если кому-то все равно, в первом примере error CS1023: An embedded statement may not be a declaration or labeled statement
0

Но еще лучше:

precision = ncPointType.StartsWith("A")? 
                 int.Parse(Regex.Split(unitsParam.Last(), ", ")):
                 null;

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

0

Если вы спросите меня, что A и B - плохая практика. Вы всегда должны использовать фигурные скобки независимо от того, является ли она одной строкой или несколькими строками. Это помогает предотвратить ошибки в будущем, когда люди добавляют дополнительные строки кода в ваши блоки if или else и не замечают, что фигурные скобки отсутствуют.

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

0

В основном это зависит от выбранного вами стандарта кодирования. Нет правильного или неправильного, просто личного предпочтения.

Согласитесь, как команда, что вы предпочитаете.

0

Легче отлаживать опцию A, но опция B более кратка, хотя она еще читаема. Вы можете сделать это еще более кратким с тернарным оператором:

precision = ncPointType.StartsWith("A") ? int.Parse(Regex.Split(unitsParam.Last(), ", ")[1]) : null;

Хотя это гораздо более читаемо таким образом (и все равно работает одинаково!):

precision = ncPointType.StartsWith("A") ? 
                int.Parse(Regex.Split(unitsParam.Last(), ", ")[1]) : 
                null;

Лучше придерживаться стандартов, используемых в вашем проекте. Читаемость гораздо важнее для удобства обслуживания, чем с меньшим количеством строк кода. В обоих вариантах эффективность одинакова, поэтому в этом случае вам не нужно беспокоиться о скорости.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню