- 1
return (a >= factor || (a == factor && (c & 1) == 1)) ? 1 : 0;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+140
return (a >= factor || (a == factor && (c & 1) == 1)) ? 1 : 0;
https://github.com/mono/mono/blob/master/mono/metadata/decimal.c
return a >= factor;
Разве у true значение гарантировано быть 1? По-моему по стандартам гарантировано только, что "не 0".
Там по замыслу нужно int возвратить, а не bool.
В общем, это то же, что и return (a >= factor)? 1: 0;
Один фиг компилятор скорее всего заоптимизирует.
The result has type int.
Но видимо какие-то проблемы были с компиляторами, раз многие ентого боятся
Всё-таки это не всем читающим код будет очевидно, особенно после того как мир познал C++, C#, Java (он уже не будет таким, как прежде).
Плюс ещё семантика. Т.е. например char гарантирован быть единицей, но я никогда не пишу в си "malloc(4)", я пишу malloc(sizeof(char)*4) -- чтобы видна была *семантика* -- что мы выделяем четыре символа, а не четыре непонятных абстрактных байта.
Тут так же, имхо. Мы показываем семантику -- что мы возвращаем число, а не bool. Пусть синтаксически и избыточно...
Тут я вижу достаточно разумные размышления есть. Нечего на carsten, gegMOPO4 и absolut вешать некрасивый ярлык.
ps: >подводом мыши
Спасибо, не знал.
???
Чем же эти оси не заслужили начинаться с большой буквы?
И что здесь в списке делают языки? Неужели вы предрекаете их появление?
http://govnokod.ru/user/2895
Delphi точно видел, по-моему ещё *Govno есть
Может наоборот?
Впрочем, это было быстро разъедено раком, eg: PHPGovno - чистой воды тавтология.
Если функция, в которой встретился этот код, имеет именно булевскую семантику (т.е. возвращает булевский по своей сути результат), то тогда, конечно, использование оператора '?:' не обосновано и лишь запутывает код.
Если же эта функция имкеет численную сементику (т.е. например возвращет некий коэффициент, который просто по стечению обстоятельств оказался равен либо 0, либо 1), то все становится наоборот: правильно реализовывать именно так, как приведено выше, с использованием оператора '?:'.
В последнем случае оно, конечно, будет работать и без '?:', т.к. "истина" в Си - это 1, а ложь - это 0, но тем не менее подобное смещение булевского и численного контекстов есть бессмысленное хакерство, говнокодинг и запутывание кода.
То-то же, а меня местные говнохакеры минусуют :) Но ещё придирка в самом условии -- вторая часть никогда не выполнится.