shoorick: (Default)
shoorick ([personal profile] shoorick) wrote2007-08-10 08:03 pm

Век живи — век учись

Заглянув в man perlop, обнаружил что в перле приоритет операций сравнения (например, eq) не только выше, чем у логический операций заданных словами (например, or), но даже выше, чем && и ||.
Это ж сколько лишних скобок я за 10 лет поставил!
ext_659893: Sapa (Default)

[identity profile] sappa.livejournal.com 2007-08-10 06:37 pm (UTC)(link)
Ну, во-первых, это совершенно логично. Было бы странным если бы конструкция
if ($a > 3 && $a < 10) работала правильно, как и в источнике откуда была заимствована (язык C), а аналогичная ей if ($a gt 'aaa' && $a lt 'ccc') отличающаяся лишь типом данных - по иному. Логические операторы or/and с пониженным приоритетом хоть и употребимы в подобных конструкциях, однако общепринято чаще используются для другого. Для условного выполнения операторов (например: my $r = fetch_next() or return;)

Во-вторых, лишних скобок не бывает. Если ставил - значит сомневался, если сомневался, значит и другие могут усомниться. Читаем Библию Конституцию perldoc perlstyle:

When in doubt, parenthesize. At the very least it will let some
poor schmuck bounce on the % key in vi.

Even if you aren't in doubt, consider the mental welfare of the
person who has to maintain the code after you, and who will proba‐
bly put parentheses in the wrong place.

[identity profile] anspa.livejournal.com 2007-08-10 08:42 pm (UTC)(link)
но интереснее взаимотношение ||, && и словесных or и and. я как-то полдня потратил, прежде чем понял что || и or это не одно и то же.

[identity profile] selfmade.livejournal.com 2007-08-12 12:43 am (UTC)(link)
Мало скобок не бывает (с) Программист на Lisp