Что не так с этими кодами стиля новичка? - PullRequest
1 голос
/ 18 июля 2010

Я новичок, и я читал https://stackoverflow.com/questions/237241/what-coding-mistakes-are-a-telltale-giveaway-of-an-inexperienced-programmer. Я не получил несколько вещей.

1. Почему написание чего-то подобного не одобряется?

if (IsAManMan == true) { 
   Console.WriteLine("It's a MAN, man!");
}

2. как насчет этого?

if (test) {
  return true;
}
else {
  return false;
}

Я не пишу код, как указано выше. Должно ли это быть написано так: return test? или для удобства чтения я иногда пишу это как return test?true:false или return (test==true)? true:false

Ответы [ 6 ]

12 голосов
/ 18 июля 2010

В этом примере:

if (IsAManMan == true) { 
   Console.WriteLine("It's a MAN, man!");
}

В большинстве языков условия if всегда оценивают логическое выражение, что означает, что IsAManMan может быть только истинным или ложным.Таким образом, сравнивать с истиной или ложью не нужно, поскольку подразумевается .Поэтому мы просто пишем это вместо:

if (IsAManMan) {
   Console.WriteLine("It's a MAN, man!");
}

И в этом примере:

if (test) {
  return true;
}
else {
  return false;
}

Следуя вышеприведенному примеру, это означает, что test может быть либо истинным, либо ложным, чтокак сказать:

if (true) {
  return true;
}
else { // If it's not true, it's false
  return false;
}

Это снова излишне подробный код, поэтому вместо этого мы просто

return test;

.

В конце концов, это все еще вопрос предпочтений и читаемости,Например, если вы думаете, что if (IsAManMan == true) легче интерпретировать, чем if (IsAManMan), вы все равно можете написать его таким образом, и компилятор не будет возражать.

8 голосов
/ 18 июля 2010

Это просто тавтология. Если идет дождь и Если это правда, что идет дождь точно такой же, и, следовательно, вы можете (или должны) исключить лишние сравнения, проверки и возвраты.

2 голосов
/ 18 июля 2010

В обоих случаях вы проверяете значение логической переменной.Поскольку ваше значение уже является логическим, нет необходимости явно проверять соответствие true, поскольку оно подразумевается в операторе if (и аналогичных конструкциях, которые содержат логический тест, например, циклы)

Например

if(isAManMan == true){ 
    //...
}

можно оценить как

if(true == true){ //answer: true
     //...
}

или

if(false == true){ //answer: false
     //...
}

, что равносильно написанию

if(isAManMan){ 
    //...
}

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

Опять же,

if (test) {
  return true;
}else {
  return false;
}

может оценить

if (true == true) { //returns true
  return true;
}else {
  return false;
}

или

if (false == true) { //returns false
  return true;
}else {
  return false;
}

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

return test;

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

0 голосов
/ 20 июля 2010

Скажем, вы хотите вернуть логическое значение, а не фактическое значение теста для 2-го случая.

Вы могли бы сделать

return !!test 

на большинстве языков или что-то вроде

return bool(test)

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

0 голосов
/ 19 июля 2010

Из-за этого теги не зависят от языка:

Существуют языки, в которых ключевые слова могут использоваться для имен переменных.В ФОРТРАНЕ это правильное утверждение: ЕСЛИ ЕСЛИ ПОТОМ ЭТО ИЛИ ПРОЧИЕ.

Если true определено как логическая переменная со значением false, предлагаемые сокращенные решения не совпадают смногословные.Ни в том случае, если test, IsAMan, true и false, во-первых, не являются логическими значениями.

Реальный пример в Python 2.0

>>>True = False
>>>True
False

Язык в щеке.

0 голосов
/ 18 июля 2010

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

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