Что будет считаться более ремонтопригодным?
if (a == b) c = true; else c = false;
или же
c = (a == b);
Я пытался посмотреть в Code Complete, но не могу найти ответ.
Я думаю, что первое является более читабельным (вы можете буквально прочитать его вслух), что, как мне кажется, делает его более понятным. Второй, безусловно, имеет больше смысла и уменьшает код, но я не уверен, что он так удобен для разработчиков на C # (я бы ожидал увидеть эту идиому больше, например, в Python).
.net
code-quality
readability
maintainability
clean-code
Брет Уокер
источник
источник
else c = false
для первого или сделать назначение||=
во втором.c = a==b ? true : false;
Ответы:
Второй вариант лучше.
Есть определенная причина, чтобы с осторожностью относиться к умным ярлыкам программирования, которые наносят ущерб удобству сопровождения, скрывая намерения кода. Так что я не виню вас за то, что вы задали вопрос.
Однако я не считаю
c = (a == b);
это примером хитрого трюка. Это прямое представление простой концепции. Как можно проще.Надлежащее, «ремонтопригоден» форматирование Вашего первого примера (без отсутствующих скобок и одной строки конструкции, которые я делать рассмотреть умный ярлык) дам этот код:
По моему опыту, написание простой логической логики таким многословным, подверженным ошибкам способом является признаком «ненадежного» кода. Это заставило бы меня задуматься о том, как более сложная логика обрабатывается в этой кодовой базе.
источник
Во-первых, осознайте, что ваши две формы не эквивалентны.
c
будет установлено в true, еслиa
равноb
, и если нет, его значение останется таким, каким оно уже есть.c
будет установлено значение true, еслиa
равноb
, а если нет, то будет установлено значение false.Если вам нужен эквивалент второй формы, в стиле первой формы, вам нужно написать его так:
Теперь понятно, какой из этих двух компонентов более читабелен, более удобен в обслуживании и менее подвержен ошибкам, если что-то изменится. Придерживайтесь второй формы.
источник
Я бы не согласился с тем, что ваша первая форма более читабельна - это, конечно, не идиоматический C #, чтобы иметь два оператора в одной строке, и не рекомендуется иметь
if
оператор без использования скобок.Во-вторых, я не вижу, как вторая форма менее ремонтопригодна - нечего поддерживать. Это простое изложение отношений между
a
и,b
и это не может быть выражено более просто.Другая причина предпочесть вторую форму в том, что вы можете объявить
c
и назначить ее в одном выражении, т.е.Изменение переменных может легко привести к ошибкам, поэтому я бы избежал этого. Использование
if
оператора требует, чтобы переменная была объявлена перед условием, а затем изменена.источник
Another reason to prefer the second form is that you can declare c and assign it in a single statement
"«более ремонтопригодный» может быть очень субъективным.
Я обычно предпочитаю читаемость и намерение, а не сокращение кода. Я думаю, что вы сохраняете 8 печатных символов, используя сокращенную форму.
По моему мнению, восприятие языка и культуры вокруг языка является характеристикой «читабельности».
Есть моменты, когда производительность может быть причиной уменьшения кода для оптимизации результирующего байтового кода, но это следует делать осторожно после некоторого профилирования.
источник
Секунда. Он имеет меньше повторений (СУХОЙ) и легче понять, что происходит, что
c
имеет значение равны или нетa
и бытьb
.ИМХО, даже лучше было бы
Так же, как я бы написал
1 + 2 + 3
вместо((1 + 2) + 3)
5 + 3 * 7
вместо(5 + (3 * 7))
Очевидно и тривиально ненужный код не является достоинством. Это загромождено.
источник
Избиратели, пожалуйста, уточните, что не так с моим пересмотренным ответом.
Да,
c = (a == b);
может быть трудно читать (еще хуже, StyleCop жалуется на ненужные скобки), но мне все еще нравится простотаa == b
. Поэтому вот что я люблю использовать, когда обаa
иb
они одинаковы:И тогда вы можете сделать:
this.c = this.NoPeriod
вместо:источник
return this.MyWaveLength = this.HerWaveLength;
илиreturn this.MyWaveLength == this.HerWaveLength;
вместо?c = (a == b);
не подвержен ошибкам. Первая форма исходного вопроса гораздо более подвержена ошибкам , о чем свидетельствует сам ОП, вынужденный редактировать свой вопрос, чтобы исправлять ошибки!