какой из == и =:= следует использовать?

Разница между равными и и точно равные операторам сравнения терминовобъясняют разницу, но также возникает важный вопрос: какой из них я должен использовать, когда я не сравниваю числа с плавающей запятой с другими вещами?

"Pragmatic Programming Erlang" рекомендует =:= и говорит, что вы должны с подозрением относиться к == и использовать его только при работе с числами с плавающей запятой. Однако в нем также говорится, что многие существующие коды не следуют этому правилу.

Итак, у меня есть небольшая дилемма. Должен ли я использовать "==" (даже если несравнивает числа с плавающей запятой с другими значениями) для согласованности с окружающим кодом? Должен ли я использовать "=:=" соответствующим образом, даже если это будет несовместимо с остальной частью файла? Должен ли я преобразовать другие выражения в файле, чтобы использовать "=:="?

Каковы компромиссы? Является ли один из операторов более эффективным, чем другой? Если один из операндов гарантированно не является числом, имеет ли значение, какой из них я использую? Нет ли скрытых ловушек (скажем, относительно специальных значений с плавающей запятой, таких как NaN, Inf и т. д. - если Erlang их поддерживает).

Кстати, я столкнулся с кодовой базой ejabberd.

6
задан Community 23 May 2017 в 12:11
поделиться