! = ложь против == правда - PullRequest
       12

! = ложь против == правда

0 голосов
/ 23 ноября 2010

Мне кажется, я где-то читал, что оценка отрицания (! = False) быстрее, чем == true

Это правильно?

Ответы [ 5 ]

14 голосов
/ 23 ноября 2010

Это не правильно. Все современные компиляторы и интерпретаторы это оптимизируют.

Что важно (для меня, по крайней мере), так это то, что == true намного быстрее для меня интерпретировать.

Помните, преждевременная оптимизация - корень всего зла.

Редактировать: Да, я использую if(true). Но это был не вопрос.

4 голосов
/ 23 ноября 2010

Нет, это не правильно.

За исключением случаев, когда вы имеете дело с bool? в .Net, вы никогда не должны писать тоже.
Вместо этого вы должны написать if (someBool) или if (!someBool).

3 голосов
/ 23 ноября 2010

Конечно, в общей схеме это не имеет значения, а читаемость важнее. Но что это? Как мы узнаем? Мы проверяем это. Чтобы быть справедливым, мы протестируем равное количество значений True и False с == True и! = False в Python:

>>> from timeit import Timer
>>> import time
>>> f=Timer('x=True;x!=False;x=False;x!=False',timer=time.clock)
>>> t=Timer('x=True;x==True;x=False;x==True',timer=time.clock)
>>> f.timeit(number=10000000)
3.2700000000000005
>>> t.timeit(number=10000000)
3.629999999999999

Теперь это довольно последовательно в течение нескольких прогонов. Вот это да. Тестирование на! = False быстрее, чем тестирование == True. Если вам придется сделать это 10000000 раз, вы выиграете полсекунды. Наслаждайся этим временем.

2 голосов
/ 23 ноября 2010

Никогда, никогда не тестируйте для == true, по крайней мере, на C, C++, Objective C или родственных языках, где любое ненулевое значение эквивалентно (но не обязательно равно ) true.

Допустимо:

if (x)
if (!x)
if (x == false)
if (x != false)

Неправильно и опасно:

if (x == true)
if (x != true)

Аспект производительности совершенно не имеет значения.

2 голосов
/ 23 ноября 2010

Не беспокойтесь об этом!

Любой полуприличный язык преобразует ваш высокоуровневый код в низкоуровневую конструкцию, которая быстрее всего.

Просто используйте любую конструкцию, которая производитсамый читаемый код.И в большинстве языков вам даже не нужно использовать явное сравнение: по возможности используйте if (foo) вместо if (foo == true) или if (foo != false).

...