Положительный результат в случае если или еще? - PullRequest
0 голосов
/ 15 сентября 2011

Это стиль кодирования, было интересно, лучше ли поместить положительный результат решения if / else в блок if или else.Например:

    yes_no = object.get() #Response will be 'yes' or 'no'
    if yes_no == 'yes':
        yes response
    else:
        no response

лучше, чем:

    yes_no = object.get() #Response will be 'yes' or 'no'
    if yes_no != 'yes':
        no response
    else:
        yes response

Насколько я могу судить, нет никакой разницы, поскольку они оба ищут «да» и выводят ответ «да»,но есть ли какой-нибудь стиль, которому люди следуют или которому легче читать?

Я использую python, но, так как если / else везде, я думаю, что другие языки также актуальны.

РЕДАКТИРОВАТЬ: Замененные проходы без ответа, поскольку были излишними.

Ответы [ 5 ]

3 голосов
/ 15 сентября 2011

Я думаю, что больше всего зависит от того, что программист хочет выделить. Условие ЕСЛИ должно быть либо:

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

Лично я всегда стараюсь избегать этого:

if condition:
    ... tons of code ...
else:
    ... one line of code ...
2 голосов
/ 15 сентября 2011
  • В большинстве случаев чище избегать двойного отрицания (например, !is_no)
  • Сначала ставьте ранние операторы вне зависимости от условия:

    if(!a): 
        return
    else:
        long 
        sequence
        of
        statements
    
1 голос
/ 15 сентября 2011

Это строго зависит от логики вашей программы.Если имеет смысл сделать «положительное» условие, то сделайте его положительным.Если это отрицательное «условие», то сделайте его отрицательным условием.Нет никаких установленных правил стиля, когда дело доходит до условий любого типа, или, по крайней мере, не так, как мне известно.

0 голосов
/ 15 сентября 2011

Если ваш метод возвращает только одно из двух значений, укажите его return True или return False, а не произвольные строки.И вам, вероятно, следует переименовать его, чтобы имя метода что-то значило.

Тогда вы можете сделать

if object.get():
    # do something
else:
    # do something else

или

if not object.get():
    # do something
else:
    # do something else

, исключив else, если только одиндело на самом деле приводит к ответу.

0 голосов
/ 15 сентября 2011

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

yes_no = object.get() #Response will be 'yes' or 'no'
    if yes_no == 'yes':
        yes response

Если для условия no нет действия, нет причины проверять его. Я также переработал бы «get», чтобы было более понятно, почему он возвращает ответ «да» или «нет». На самом деле object.get() довольно расплывчато.

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