В некоторых языках if (foo = bar) подразумевает, что назначение было применено правильно. Итак, звонки:
if( ( foo = bar ) )
оценит присваивание и вернет результат как external (), действующий как LHS, т. Е.
blah = foo = bar
внешний () акт вроде как бла.
В ANSI C и его дочерних C ++ и Objective-C это не является строго обязательным. Однако, как уже упоминалось, некоторые компиляторы выдают предупреждение, так как type-o "=" / "==" может быть неприятным. Этот тип-о привел к тому, что идиома размещения константы или константы в левой части вызывала проблему времени компиляции:
if( nil == foo )
если обе стороны являются переменными, хотя это все еще возможно ошибка.
Для этого есть веская причина, хотя gcc не предупреждает вас и не оценивает вещи иначе.
Если вы пишете код в командной среде, ваши коллеги могут быть не уверены, что вы имели в виду «=» или просто неправильно набрали «==», что заставляет их более внимательно смотреть на то, что вы делаете, даже если в этом нет необходимости. В стиле «напиши один раз, чтобы прочитать 1000 раз» ты вставляешь подсказки, чтобы люди не тратили время на чтение твоего кода. Например, используйте четкие и прописанные имена переменных (в наши дни экономия на байтах!). Не используйте тупые и чрезмерно оптимизированные конструкции в областях, которые не снижают производительность, - пишите свой код аккуратно.
В этом случае используйте (()), чтобы указать, что вы знали, это было "=" не "==".
Не забывайте, Apple пишет свои примеры для чтения не только дюжиной людей, но и потенциально каждым мужчиной, женщиной и ребенком на земле, чтобы читать сейчас и в будущем. Ясность имеет первостепенное значение.