Это чисто педантичный вопрос, чтобы удовлетворить свое любопытство.«Если ([bool] == true)« требуется еще один шаг, чем «if ([bool])»?
Я, как правило, уезжаю с последним вариантом в вопрос (так: if (boolCheck) { ... }
), а коллега всегда пишет первый (if (boolCheck == true) { ... }
). Я всегда его дразнил, и он всегда объяснял это как старую привычку, когда он начинал программировать.
Но сегодня мне пришло в голову, что на самом деле, выписывая всю часть == true
, на самом деле может потребоваться дополнительный шаг для обработки, поскольку любое выражение с оператором ==
оценивается по булевскому значению. Это правда?
Другими словами, как я понимаю, вариант без == истинная линия может быть свободно описана следующим образом:
- Проверить X
Хотя вариант с == истинная линия будет больше похожа:
- Пусть Y истинно, если X истинно, otherwi себе ложные
- Проверить Y
Am Я правильно? Или, может быть, любой нормальный компилятор/интерпретатор покончит с этим различием? Или я что-то пропускаю, и на самом деле нет никакой разницы?
Очевидно, что не будет никакой разницы в отношении фактических наблюдаемых характеристик. Как я уже сказал, мне просто интересно.
EDIT: Спасибо всем, кто действительно опубликовал скомпилированные результаты, чтобы проиллюстрировать, были ли разные шаги между этими двумя подходами. (Кажется, большую часть времени они были, хотя и незначительно.)
Я просто хочу повторить, что я был не, спрашивая, что такое «правильный» подход. Я понимаю, что многие люди предпочитают друг друга. Я также понимаю, что, по логике, они идентичны. Мне было просто интересно, если фактические операции, выполняемые CPU, равны точно таким же для обоих методов; как выясняется, большую часть времени (очевидно, это зависит от языка, компилятора и т. д.), это не так.
Это зависит от языка. На некоторых языках два условия на самом деле не совпадают. Например, в C (с #define true 1), "if (3) return;" возвращает, но "if (3 == true) return:" does not. – UncleO
С другой стороны, с #define false 0, «boolCheck! = False» и «boolCheck» имеют тот же эффект, что и условия. – UncleO
@uncleo: Вот почему TRUE не определяется как 1. Он определяется как (! FALSE). –