Здравствуйте, Vamp, Вы писали:
E>>Типа на символ? прикольный подход к кодированию... V>Гораздо больше, чем на один символ. V>x != 0 — 6 символов. V>!!х — 3 символа. В 2 раза быстрее!
А что если "x" в коде выглядит как a — b? Тогда еще пару скобочек посчитать придется
--
Справедливость выше закона. А человечность выше справедливости.
E>Кроме того, в приведённом контексте название переменной наводит на мысли, что это таки число. Что такое "двойное отрицание пяти", например?
ну а в чем проблема. В Си исходно булевого типа не было, их роль играли целые.
Двойное отрицание не меняет логического значения и только нормализует в 1/0.
Пятерка нормализуется в единицу.
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, Mr.Delphist, Вы писали:
MD>>Если p — обычный указатель, то оба if пролетят мимо, а если p — "умный", то в первый if мы таки заскочим. Получается, что написание !! превращает код в легко мигрирующий (или безопасную заготовку для шаблона).
E>Не понятно, чем же != 0 плох в этом контексте.
Ничем не плох. Имею такую версию (например). '!!' располагается целиком слева и оттого (дичайше) напоминает операторную запись — в математическом смысле (Fx или F(x)). То есть это (вощемто) оператор "естественного вложения" какого-то объемлющего множества — "кольца" — в {0, 1}.
E>>Кроме того, в приведённом контексте название переменной наводит на мысли, что это таки число. Что такое "двойное отрицание пяти", например?
D>ну а в чем проблема. В Си исходно булевого типа не было, их роль играли целые.
Проблема в том, что нечитабельно. Если у тебя value -- это число, а не логический тип, то не понятно как-то, что такое его отрицание
Кроме того, приличные люди в С писали что-то типа
typedef int BOOL;
D>Двойное отрицание не меняет логического значения и только нормализует в 1/0. D>Пятерка нормализуется в единицу.
Спасибо, С я знаю. Но я не понимаю, зачем писать Сщные ребусы вместо понятного кода
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Warturtle, Вы писали:
W>Имею такую версию (например). '!!' располагается целиком слева и оттого (дичайше) напоминает операторную запись — в математическом смысле (Fx или F(x)). То есть это (вощемто) оператор "естественного вложения" какого-то объемлющего множества — "кольца" — в {0, 1}.
Что-то мне так кажется, что таким соображением никто ни разу не пользовался, при написании !!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
>2) Никогда не понимал, зачем так страдать. Нет бы написать понятно ххх != 0
почему страдать? если есть BOOL a, b; // где BOOL — какой-нть очередной typedef int
то в написании if (!!a == !!b) меньше страданий, чем в if ((a && b) || (!a && !b))
Здравствуйте, Вумудщзук, Вы писали:
>>2) Никогда не понимал, зачем так страдать. Нет бы написать понятно ххх != 0 В>почему страдать? если есть BOOL a, b; // где BOOL — какой-нть очередной typedef int В>то в написании if (!!a == !!b) меньше страданий, чем в if ((a && b) || (!a && !b))
Боже ж мой! Ты контекст исходного сообщения видел?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>2) Никогда не понимал, зачем так страдать. Нет бы написать понятно ххх != 0
Для ненулевых значение удобно писать проверки
if ( i )
{
}
минус данной конструкции — warning(losing data бла-бла int to bool)
E>2) Никогда не понимал, зачем так страдать. Нет бы написать понятно ххх != 0
Это невсегда возможно. Одно время был подход определять оператор! для преобразования в bool (т.к. сам operator bool имеет некоторые недостатки). Поэтому и писали так:
class A
{
public:
bool operator!() const
{
return !good_;
}
private:
bool good_;
};
MD>Как я понимаю, это пошло-поехало от умных указателей. Там оператор "!" переопределяется с целью изучить внутреннее содержимое, а не обертку.
MD>
MD>p = NULL;
MD>if (p)
MD>{
MD> // do something
MD>}
MD>if (!!p)
MD>{
MD> // do something
MD>}
MD>
MD>Если p — обычный указатель, то оба if пролетят мимо, а если p — "умный", то в первый if мы таки заскочим. Получается, что написание !! превращает код в легко мигрирующий (или безопасную заготовку для шаблона).
Покажи, хоть один такой пример умного указателя (кроме каких-нибудь своих доморощенных). В нормальных реализациях сделано так, что проверка умного указателя и обычного дают один и тот же результат (ну или, на худой конец, как в auto_ptr, вообще она не реализована). Т.е. не ошибешься
On 05/08/10 21:50, Erop wrote:
> 1) Лучше, всё-таки сравнивать оператором == > 2) Никогда не понимал, зачем так страдать. Нет бы написать понятно ххх != 0
А ещё есть javascript, и, наверняка ещё какие-нибудь подобные языки, где тип может быть не только число, а много чего — (строка, пустой массив и т.п.), которые тоже имеют логическое значение false, и привести к логическому типу проще всего именно с помощью !!.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, Pzz, Вы писали:
E>>2) Никогда не понимал, зачем так страдать. Нет бы написать понятно ххх != 0 Pzz>Это разделяет читателей программы на 2 лагеря: равных автору в мудрости своей, и тех, кто ничего не понял
Есть ещё и третий лагерь -- те, кто понял всё, кроме того, зачем так извращаться
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском