Вопрос

Учитывая следующие идиомы:

1)

variable = value1
if condition
  variable = value2

2)

variable = value2
if not condition
  variable = value1

3)

if condition
  variable = value2
else
  variable = value1

4)

if not condition
  variable = value1
else
  variable = value2

Что вы предпочитаете и почему?

Мы предполагаем, что наиболее распространенным путем выполнения является путь condition будучи ложным.

Я склонен учиться использовать вариант 1), хотя не совсем понимаю, почему он мне нравится больше.

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

variable = condition ? value2 : value1
...
variable = value2 if condition else value1
Это было полезно?

Решение

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

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

Я предпочитаю метод 3, потому что он более лаконичный и логичный.Он устанавливает значение только один раз, его можно перемещать как блок, и он не так уж подвержен ошибкам (что случается, особенно.в методе 1, если установка значения1 и проверка и необязательно установка значения2 разделены другими операторами)

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

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

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

Большую часть кода я пишу на C#, но я по-прежнему стараюсь избегать тройного оператора, если только не работаю (в основном) с локальными переменными.Строки имеют тенденцию ОЧЕНЬ быстро становиться длинными в тернарном операторе, если вы вызываете три уровня вглубь некоторой структуры, что снова быстро ухудшает читаемость.

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

Это не аргумент в пользу неиспользования их в языках, которые предоставляют такой синтаксис.Кстати, сюда входят все основные языки, существующие на данный момент после моего последнего подсчета.

и они не подходят для расширения присваивания переменной за счет включения более одного оператора в будущем.

Это верно.Однако часто можно быть уверенным, что такое продление никогда не произойдет, потому что condition всегда будет давать один из двух возможных случаев.

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

switch утверждение также работает.Если это просто и больше 2-3 вариантов, я использую именно это.

В ситуации, когда условие может не произойти.Я бы выбрал 1 или 2.В противном случае это просто основано на том, что я хочу, чтобы код делал.(т.е.согласен с Крузером)

Я склонен использовать if not... return.

Но это если вы хотите вернуть переменную.Если сначала убрать дисквалификаторы, это сделает текст более читабельным.Это действительно зависит от контекста высказывания, а также от языка.Оператор case может работать лучше и быть читабельным большую часть времени, но в VB производительность снижается, поэтому в этом конкретном случае серия операторов if/else имеет больше смысла.

Для меня метод 1 или метод 3.Метод 1 позволяет избежать входа/выхода дополнительной области, но метод 3 позволяет избежать дополнительного назначения.Я бы предпочел избегать метода 2, поскольку стараюсь максимально упростить логику условий (в данном случае оператор !является посторонним, так как без него его можно было бы переписать как метод 1), и та же причина применима и к методу 4.

Это зависит от того, какое состояние я проверяю.

Если это состояние флага ошибки, я буду использовать 1) установку флага ошибки, чтобы поймать ошибку, а затем, если условие выполнено успешно, сбросить флаг ошибки.Таким образом, нет никакой возможности пропустить условие ошибки.

Для всего остального я бы использовал 3)

Логика НЕ ​​только добавляет путаницы при чтении кода — ну, в моей голове, не могу говорить за всех остальных :-)

Если переменная имеет естественное значение по умолчанию, я бы выбрал #1.Если любое из значений одинаково (не) подходит для значения по умолчанию, я бы выбрал № 2.

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

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