Как избежать чрезмерных скобок в сложных условиях - PullRequest
0 голосов
/ 18 сентября 2018

Считаете ли вы вонючий код использованием скобок, чтобы отрицать условие?Если так, то какой будет правильная форма?

Пример:

    for(int i = 0; i < array.size(); i++) {
        test += "just a test";

        if (!(array.size() == i+1)) {
            test += ",";
        }
    }

запятая должна встречаться не только на последней итерации

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

В частности, для C #, один крайний случай, когда это может быть несколько полезно, - это отрицание оператора is и сопоставление с образцом:

if (!(foo is Bar bar))
{
    // Do something
} 

Вне специфических для языка нюансов, более ясным намерением будет следоватьnot equal to реляционный оператор для любого языка, на котором вы работаете:

  • Фортран: /=
  • ОСНОВНОЙ: <>
  • Lua: ~=
  • C: !=
  • Пакет: NEQ

Обратите внимание, что некоторые языки имеют специальные операторы равенства, которые следует использоватьв зависимости от сравниваемых объектов.В случае с Javascript у вас есть и неравенство (!=), и неидентичность (!==), которые ведут себя по-разному.

0 голосов
/ 18 сентября 2018

Лучше использовать оператор неравенства, в этом примере:

if (array.size() != i+1) {
    test += ",";
}

Левая и правая части вычисляются перед выполнением !=, поэтому, если array.size() возвращает 10и i устанавливается на 5, тогда array.size() != i+1 оценивается как 10 != 5+1 или 10 != 6, которые возвращают true.Если i было установлено на 9, то array.size() != i+1 оценивается как 10 != 9+1 или 10 != 10, что возвращает false.

Обычно оператор "not" используется при обращении к методу, которыйвернет логическое значение, и его необходимо проверить на обратное условие:

if (!form.validated()) {
    // Do something for not validated.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...