22 февраля 2006

Быстрая проверка на ненулёвость

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


if($id_product * $id_boutique * $id_top > 0)


Примерно так же можно проверить, является ли хоть одна из проверяемых строк непустой:


if($name_product . $name_boutique . $name_top != "")

4 комментов:

valker комментирует...

Это может быть с точки зрения набора исходного текста быстро... прототипирования... но вот если смотреть на оптимизацию... извините!

A4 комментирует...

А чем плохо?

бомж комментирует...

Умножение более ресурсоемкая операция чем сравнение три раза на "не 0". А тем более конкатенация строк.

A4 комментирует...

Твой пост вызвал некоторые сомнения в правильности моей позиции. После серии тестов выявился определённый дуализм:

Да, умножение и конкатенация работают дольше в этих условиях за счёт того, что чаще всего if() не отработает до конца: как только найдётся предикат, равный ЛОЖЬ, сработает соответствующая ветка условного оператора. А умножение и конкатенация предполагают полное вычисление выражения. Обгон моего способа на 60%.

C другой стороны, если хоть немного изменить условия (заменить условие ">0" на ">=0", или AND на OR, или вообще все переменные не подходят под условие, что предполагает вычисление всех предикатов), то предложенный мной способ чуть-чуть быстрее, процента на 2 :]

Таким образом, должен признать, что Бомж прав.

Отправить комментарий