Re: Стиль написания - if vs ?:
От: Pzz Россия https://github.com/alexpevzner
Дата: 18.03.10 18:17
Оценка: 2 (2) +2 :))) :))) :)
Здравствуйте, Begemot_, Вы писали:

B_>А вот так


B_>
B_>  x ?  add(t) : remove (t);
B_>


А вот так, по-моему, еще круче
(x ? add : remove) (t);
Re[5]: Стиль написания - if vs ?:
От: gear nuke  
Дата: 21.03.10 00:33
Оценка: :))) :))
Здравствуйте, CreatorCray, Вы писали:

Pzz>>(a ? add : remove)( (y ? a : b)[ z ? c : d ] );

CC>Да здравствует обфускация!

ИМХО код вполне читается, а так же самодокументирован: не лезь а то убъёт!
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re: Стиль написания - if vs ?:
От: Кодт Россия  
Дата: 17.03.10 09:24
Оценка: 2 (2) +2
Здравствуйте, Begemot_, Вы писали:

За тернарный оператор:
— позволяет запихнуть всё в одно выражение
— позволяет избежать присваиваний, заменяя их конструированием
— позволяет использовать временные объекты, это полезно для RVO (которое любят компиляторы; тогда как NRVO им даётся с бОльшим трудом)
const Foo x (a() ? b() : c()); // даже copy constructible может не потребоваться
foo(d() ? e() : f());

// versus

/*nonconst*/Foo x; // default constructible, assignable
if(a()) x = b(); else x = c();

if(d()) foo(e()); else foo(f());


За if на разных строчках:
— позволяет ставить брекпоинты на ветках
— не требует однотипности веток

За if на одной строчке:
— кр-сть — с-а т.!

Короче говоря, однострочный if — это худший вариант.
Перекуём баги на фичи!
Re[3]: Стиль написания - if vs ?:
От: Pzz Россия https://github.com/alexpevzner
Дата: 19.03.10 11:44
Оценка: :))) :)
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>(x ? add : remove) (t ? a : b);


А можно и так:

(a ? add : remove)( (y ? a : b)[ z ? c : d ] );

Re[25]: Стиль написания - if vs ?:
От: uzhas Ниоткуда  
Дата: 15.04.10 13:41
Оценка: 4 (1) +1
Здравствуйте, igna, Вы писали:
I>Ну так кури. 4.12.
Покурил немного стандартик

13.3.3.1.1 Standard conversion sequences
фрагмент из Table 9:
Conversion, Rank, Subclause

"Integral Promotion" Promotion 4.5
"Boolean conversions" Conversion 4.12

Как из двух "implicit conversion sequences" найти наилучшую описывается здесь

13.3.3.2 Ranking implicit conversion sequences

Standard conversion sequences are ordered by their ranks: an Exact Match is a better conversion than a Promotion,
which is a better conversion than a Conversion.

В двух словах: так как Promotion лучше, чем Conversion, то будет применяться Integral promotion и bool продвинется до int.
Re: Стиль написания - if vs ?:
От: 0x7be СССР  
Дата: 17.03.10 07:51
Оценка: 2 (2)
Здравствуйте, Begemot_, Вы писали:

B_>Почему так не пишут или я ошибаюсь и это нормально и принято?

Предпочитаю использовать тернарный оператор, если речь идет только о возвращении значения и условный оператор, если имеются побочные эффекты.
Re[4]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 19.03.10 14:12
Оценка: 1 (1) +1
Здравствуйте, Pzz, Вы писали:

Pzz>(a ? add : remove)( (y ? a : b)[ z ? c : d ] );

Да здравствует обфускация!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Стиль написания - if vs ?:
От: gear nuke  
Дата: 21.03.10 00:41
Оценка: +2
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А так еще лучше


PD>(x ? add : remove) (t ? a : b);


PD>после чего читающий этот код долго чешет в затылке, пытаясь понять, что же сделали и с чем.


Какие сложности? В зависимости от x выбирается функтор, а зависимости от t — его аргумент. Своеобразный такой сurrying на C

Чесать в затылке лично мне приходится думая "как это переписать на if", "как поддерживать такой if"...
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[4]: Стиль написания - if vs ?:
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.03.10 11:58
Оценка: +2
Здравствуйте, gear nuke, Вы писали:

PD>>(x ? add : remove) (t ? a : b);


PD>>после чего читающий этот код долго чешет в затылке, пытаясь понять, что же сделали и с чем.


GN>Какие сложности? В зависимости от x выбирается функтор, а зависимости от t — его аргумент. Своеобразный такой сurrying на C


Между прочим, если бы у "функтора" был не один аргумент, а пяток, то так по-моему сильно понятнее выглядит, отдельно выбирать функцию в зависимости от обстановки, а потом одним махом вызывать уже выбраную. Иначе приходится дублировать вычисление аргументов, со всеми вытекающими прелестями копипасты.

Если бы вариантов было не два, а больше, имело бы смысл завести указатель на функцию, вычислить его, а потом позвать.
Re[26]: Стиль написания - if vs ?:
От: Masterkent  
Дата: 22.04.10 12:45
Оценка: 8 (1)
uzhas:

U>Покурил немного стандартик

U>

U>13.3.3.1.1 Standard conversion sequences
U>фрагмент из Table 9:
U>Conversion, Rank, Subclause

U>"Integral Promotion" Promotion 4.5
U>"Boolean conversions" Conversion 4.12

U>Как из двух "implicit conversion sequences" найти наилучшую описывается здесь

13.3.3.2 Ranking implicit conversion sequences

U>

U>Standard conversion sequences are ordered by their ranks: an Exact Match is a better conversion than a Promotion,
U>which is a better conversion than a Conversion.

U>В двух словах: так как Promotion лучше, чем Conversion, то будет применяться Integral promotion и bool продвинется до int.

Курить стандартик надо с умом, а то ведь ненароком и обкуриться можно.

Если TRUE имеет тип int, то в сравнении TRUE == true какие-либо implicit conversion sequences не рассматриваются вообще.

C++03 — 13.3.3.1/1:

An implicit conversion sequence is a sequence of conversions used to convert an argument in a function call to the type of the corresponding parameter of the function being called.

Operator functions рассматриваются только если хотя бы один из операндов имеет классовый или перечислительный тип:

13.3.1.2 Operators in expressions /2:

If either operand has a type that is a class or an enumeration, a user-defined operator function might be declared that implements this operator or a user-defined conversion can be necessary to convert the operand to a type that is appropriate for a built-in operator. In this case, overload resolution is used to determine which operator function or built-in operator is to be invoked to implement the operator. Therefore, the operator notation is first transformed to the equivalent function-call notation as summarized in Table 8

В данном же случае следует руководствоваться исключительно правилами для встроенных операторов, описанными в разделе 5:

13.3.1.2/1:

If no operand of an operator in an expression has a type that is a class or an enumeration, the operator is assumed to be a built-in operator and interpreted according to clause 5.

5.10/1:

The == (equal to) and the != (not equal to) operators have the same semantic restrictions, conversions, and result type as the relational operators except for their lower precedence and truth-value result.

5.9 Relational operators /2:

The usual arithmetic conversions are performed on operands of arithmetic or enumeration type.

5/9:

Many binary operators that expect operands of arithmetic or enumeration type cause conversions and yield result types in a similar way. The purpose is to yield a common type, which is also the type of the result. This pattern is called the usual arithmetic conversions, which are defined as follows:

— If either operand is of type long double, the other shall be converted to long double.
— Otherwise, if either operand is double, the other shall be converted to double.
— Otherwise, if either operand is float, the other shall be converted to float.
— Otherwise, the integral promotions (4.5) shall be performed on both operands. [Footnote: As a consequence, operands of type bool, wchar_t, or an enumerated type are converted to some integral type]
— Then, if either operand is unsigned long the other shall be converted to unsigned long.
— Otherwise, if one operand is a long int and the other unsigned int, then if a long int can represent all the values of an unsigned int, the unsigned int shall be converted to a long int; otherwise both operands shall be converted to unsigned long int.
— Otherwise, if either operand is long, the other shall be converted to long.
— Otherwise, if either operand is unsigned, the other shall be converted to unsigned.

4.5 Integral promotions /4:

An rvalue of type bool can be converted to an rvalue of type int, with false becoming zero and true becoming one.

Re[25]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 15.04.10 13:44
Оценка: 4 (1)
Здравствуйте, igna, Вы писали:

U>>Пожалуй, не соглашусь. Вроде bool должен сконвертроваться в int.

I>Вот именно, что вроде.
Что тебе мешает проверить?

U>>Чтобы узнать кто куда конвертится, надо курить

4 Standard conversions

I>Ну так кури. 4.12.

Ты путаешь что во что конвертируется.

4.5 Integral promotions

4. An rvalue of type bool can be converted to an rvalue of type int, with false becoming zero and true
becoming one.

4.7 Integral conversions

4. If the destination type is bool, see 4.12. If the source type is bool, the value false is converted to zero
and the value true is converted to one.


if (int == bool)
if (bool == int)

сначала они приводятся к одному типу (т.е. к int) т.к. они оба являются параметрами operator==.
Ну а потом уже operator== возвращает bool.
Так что bool тут является source type
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Стиль написания - if vs ?:
От: Alexander G Украина  
Дата: 18.03.10 14:15
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>
А>B * f()
А>{
А>  return 0 ? (B *)new D1 : new D2; // error C2446: ':' : no conversion from 'D2 *' to 'D1 *'
А>}
А>


А>


Работает. Но конструкция выглядит ещё неудобнее.
И кстати, такое преобразование компиляторы не любят:
http://rsdn.ru/forum/cpp/3078161.1.aspx
Автор: Were
Дата: 26.08.08

http://rsdn.ru/forum/cpp/3079712.1.aspx
Автор: Were
Дата: 27.08.08
Русский военный корабль идёт ко дну!
Re[26]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 15.04.10 14:43
Оценка: 1 (1)
Здравствуйте, CreatorCray, Вы писали:

CC>сначала они приводятся к одному типу (т.е. к int) т.к. они оба являются параметрами operator==.


Ты прав.
Re[3]: Стиль написания - if vs ?:
От: Аноним  
Дата: 18.03.10 12:07
Оценка: -1
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, Кодт, Вы писали:


К>>- не требует однотипности веток


AG>примерчик:

AG>
AG>struct B {};
AG>struct D1 : B {};
AG>struct D2 : B {};

AG>B * f()
AG>{
AG>  return 0 ? new D1 : new D2; // error C2446: ':' : no conversion from 'D2 *' to 'D1 *'
AG>}
AG>


B * f()
{
  return 0 ? (B *)new D1 : new D2; // error C2446: ':' : no conversion from 'D2 *' to 'D1 *'
}


Re[2]: Стиль написания - if vs ?:
От: Pavel Dvorkin Россия  
Дата: 19.03.10 10:36
Оценка: :)
Здравствуйте, Pzz, Вы писали:

Pzz>А вот так, по-моему, еще круче

Pzz>
Pzz>(x ? add : remove) (t);
Pzz>


А так еще лучше

(x ? add : remove) (t ? a : b);

после чего читающий этот код долго чешет в затылке, пытаясь понять, что же сделали и с чем.
With best regards
Pavel Dvorkin
Re: Стиль написания - if vs ?:
От: igna Россия  
Дата: 12.04.10 14:37
Оценка: :)
Здравствуйте, Begemot_, Вы писали:

B_>А вот так


B_> x ? add(t) : remove(t);


B_>Я не встречал, хотя имхо это более читабельнее чем

B_> if (x) 
B_>   add(t);
B_> else
B_>   remove()t;


А вот так:

  x && add(t);


читабельнее чем

B_> if (x) 
B_>   add(t);


?
Re[4]: Стиль написания - if vs ?:
От: vpchelko  
Дата: 14.04.10 09:23
Оценка: -1
Здравствуйте, igna, Вы писали:

I>Здравствуйте, CreatorCray, Вы писали:


CC>>И, ты уж звиняй, но первый вариант лично я отношу исключительно к индусокоду.


I>А такой не относишь?:


I>
I>x ? add(t) : remove(t);
I>


I>Речь конечно не о том случае, когда add и remove возвращают значение, которое затем в программе используется, а о том, когда вышеприведенная конструкция используется вместо if.


(x == true) ? add(t) : remove(t); // это нормальный код, кратко и по теме.
Сало Украине, Героям Сала
Re[5]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 14.04.10 09:33
Оценка: :)
Здравствуйте, vpchelko, Вы писали:

V>(x == true) ? add(t) : remove(t); // это нормальный код, кратко и по теме.


((x ? true : false) == true) ? add(t) : remove(t);
Re[5]: Стиль написания - if vs ?:
От: mike_rs Россия  
Дата: 14.04.10 09:38
Оценка: +1
Здравствуйте, vpchelko, Вы писали:

V>(x == true) ? add(t) : remove(t); // это нормальный код, кратко и по теме.


у меня еще с чистого C неприятие прямого сравнения с true. != false или в данном случае вообще if (x) гораздо лучше.
Re[9]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 14.04.10 13:26
Оценка: +1
Здравствуйте, vpchelko, Вы писали:

_>>>>у меня еще с чистого C неприятие прямого сравнения с true. != false или в данном случае вообще if (x) гораздо лучше.

I>>>Чем же сравнение с false лучше сравнения с true?
CC>>Тем, что только ноль == false. А за true принимается любое ненулевое значение.

V>С какой такой стати? false и true это константы.

В С++ есть тип bool и у него есть два значения: true и false, константы, да
В С булевского типа изначально не было в принципе (В С99 добавили stdbool, но это не встроенный тип). Равно как и true/false констант.

помедитируй над таким вот кодом.
int i = какое нибудь число;
if (i) 
    foo ();
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Стиль написания - if vs ?:
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.04.10 13:17
Оценка: :)
Здравствуйте, Begemot_, Вы писали:

B_>
B_>  x ?  add(t) : remove (t);
B_>


x && add(t);

или

(x && add(t)) || remove(t);


Вот так гораздо лучше.

Монады хаскела просто скучны по сравнению с логическими операторами С++.
Стиль написания - if vs ?:
От: Begemot_ Россия http://softvoile.com/
Дата: 17.03.10 06:28
Оценка:
вот так вот считается нормальным
 int t = x ? 5 : 7;


А вот так

  x ?  add(t) : remove (t);


Я не встречал, хотя имхо это более читабельнее чем
 if (x) 
   add(t);
 else
   remove()t;

 или 
 
 if (x) add(t); else remove(t);


Почему так не пишут или я ошибаюсь и это нормально и принято?
--
Блог шароварщика
[url=http://begemotov.net/wxwidgets/]Микроблог про wxWidgets[/url
--
Блог шароварщика ::Микроблог про wxWidgets
Re: Стиль написания - if vs ?:
От: jazzer Россия Skype: enerjazzer
Дата: 17.03.10 08:49
Оценка:
Здравствуйте, Begemot_, Вы писали:

у тернарного оператора много ограничений, вообще-то. По сравнению с ифом.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Стиль написания - if vs ?:
От: zitz  
Дата: 17.03.10 12:01
Оценка:
Здравствуйте, Begemot_, Вы писали:

B_>Почему так не пишут или я ошибаюсь и это нормально и принято?


Я в своём коде использую только для возвращаемоего параметра.
1 условия с else имеют свойство разрастаться, к томуже 2 не поставить бряку на ветку, просто тупо чтобы не путать 3 (тернальный на возвращаемое только), 4 чтобы иметь одинакое строение условий везде (не везде есть else, как то тупо в одном месте писать x ? foo1() : foo2(); а во втором if ( x ) foo(); )
Вот такие причины лично у меня.

Резюме:
1. Если тебя это не смущает, то пользуйся на здоровье
2. Если у тебя тревожно на душе из-за такого написания, то не пиши так и спи спокойно
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[2]: Стиль написания - if vs ?:
От: Alexander G Украина  
Дата: 17.03.10 13:46
Оценка:
Здравствуйте, Кодт, Вы писали:

К>- не требует однотипности веток


примерчик:
struct B {};
struct D1 : B {};
struct D2 : B {};

B * f()
{
  return 0 ? new D1 : new D2; // error C2446: ':' : no conversion from 'D2 *' to 'D1 *'
}
Русский военный корабль идёт ко дну!
Re[3]: Стиль написания - if vs ?:
От: Кодт Россия  
Дата: 17.03.10 14:50
Оценка:
Здравствуйте, Alexander G, Вы писали:

К>>- не требует однотипности веток

AG>примерчик:

Вот именно. В данном случае компилятор мог догадаться, что у типов операндов (D1* и D2*) есть общий супертип B* — но он не обязан это делать.
Перекуём баги на фичи!
Re: Стиль написания - if vs ?:
От: minorlogic Украина  
Дата: 20.03.10 10:16
Оценка:
Для меня if намного более читабелен. Мне кажется условный оператор был введен только для потдержки макросов типа MAX()
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[6]: Стиль написания - if vs ?:
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.03.10 11:53
Оценка:
Здравствуйте, gear nuke, Вы писали:

Pzz>>>(a ? add : remove)( (y ? a : b)[ z ? c : d ] );

CC>>Да здравствует обфускация!

GN>ИМХО код вполне читается, а так же самодокументирован: не лезь а то убъёт!


А это мысль! А то у меня часто возникает обратная проблема: лезут, а убивать приходится мне, а у меня для этого характер слишком мягкий
Re: Стиль написания - if vs ?:
От: alex-t  
Дата: 12.04.10 14:24
Оценка:
Здравствуйте, Begemot_, Вы писали:

B_>Почему так не пишут или я ошибаюсь и это нормально и принято?


ИМХО тренарный оператор используем там, где он позволяет избежать дублирования кода и повысить читаемость, например:
longName = very_very_very_long_function_name (argumentOne, argumentTwo, flag ? number : 45);

т.е. четко видно, чем отличаются ветки (в отличие от if/else).
В случае с return он позволяет избежать дублирования слова return Ну и сэкономить 3 строчки при строгом стиле кодирования (4 строки на if/else) и одну при "самом строгом" (3 строки на тренарный оператор)
Re[2]: Стиль написания - if vs ?:
От: Begemot_ Россия http://softvoile.com/
Дата: 12.04.10 15:19
Оценка:
Здравствуйте, igna, Вы писали:


Нет, тут уже подмена понятий.

I>А вот так:


I>
I>  x && add(t);
I>


I>читабельнее чем


I>
B_>> if (x) 
B_>>   add(t);
I>


I>?
--
Блог шароварщика
[url=http://begemotov.net/wxwidgets/]Микроблог про wxWidgets[/ur
--
Блог шароварщика ::Микроблог про wxWidgets
Re[3]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 13.04.10 06:28
Оценка:
Здравствуйте, Begemot_, Вы писали:

B_> Нет, тут уже подмена понятий.


Да? И каких?

if (e1) e2; вычисляет e1, затем в зависимости от результата вычисляет или не вычисляет e2. e1 && e2 выполняет те же действия плюс имеет значение. Отбрасывание вычисленного значения в C/C++ используется постоянно. А вот e1 ? e2 : e3 в отличие от if (e1) e2; else e3; не только имеет значение, но и выполняет преобразование типа.

Я собственно не за и не против замены if выражениями, но не согласен с тем, что ?: в каком-то объективном смысле лучше чем &&.
Re[4]: Стиль написания - if vs ?:
От: tarkil Россия http://5209.copi.ru/
Дата: 13.04.10 07:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>  return 0 ? (B *)new D1 : new D2;
А>


Не надо приучаться так писать!

Лучше так:

  return 0 ? static_cast<B*>(new D1) : new D2;

Но уж лучше if, право слово.
--
wbr, Peter Taran
Re[2]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 13.04.10 09:41
Оценка:
Здравствуйте, igna, Вы писали:

I>
I>  x && add(t);
I>

I>читабельнее чем
I>
B_>> if (x) 
B_>>   add(t);
I>


Ничуть.
И, ты уж звиняй, но первый вариант лично я отношу исключительно к индусокоду.
И написавшего такое в production code буду крайне жестоко отучать так делать впредь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 13.04.10 09:46
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>И, ты уж звиняй, но первый вариант лично я отношу исключительно к индусокоду.


А такой не относишь?:

x ? add(t) : remove(t);


Речь конечно не о том случае, когда add и remove возвращают значение, которое затем в программе используется, а о том, когда вышеприведенная конструкция используется вместо if.
Re[4]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 13.04.10 15:42
Оценка:
Здравствуйте, igna, Вы писали:

I>А такой не относишь?:

Такой тоже отношу.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 13.04.10 16:03
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Такой тоже отношу.


Чтож ответил не на оригинальный пост, а куда-то набок невпопад?
Re[6]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 13.04.10 18:49
Оценка:
Здравствуйте, igna, Вы писали:

CC>>Такой тоже отношу.

I>Чтож ответил не на оригинальный пост, а куда-то набок невпопад?
Потому как x && add(t); хуже чем то, что предлагалось в исходном посте, не удержался.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 14.04.10 06:04
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Потому как x && add(t); хуже чем то, что предлагалось в исходном посте, не удержался.


Cубъективно — да, и для меня хуже; но объективно хуже (или по крайней мере не лучше) то, что предлагалось в исходном посте. Почему — уже писал
Автор: igna
Дата: 13.04.10
. То есть дело привычки. Хотя привычка тоже аргумент.

И кстати, я ведь не предлагал использовать && вместо if, а задавал вопрос автору темы.
Re[2]: Стиль написания - if vs ?:
От: c-smile Канада http://terrainformatica.com
Дата: 14.04.10 06:31
Оценка:
B_>>
B_>>  x ?  add(t) : remove (t);
B_>>


Pzz>А вот так, по-моему, еще круче

Pzz>
Pzz>(x ? add : remove) (t);
Pzz>


Я не уверен что в этом случае компилятор сможет сделать inlining если что.
Ну и для методов это работать не будет. Вернее будет, но запись получится очень громоздкой.
Re[8]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 14.04.10 07:56
Оценка:
Здравствуйте, igna, Вы писали:

I>И кстати, я ведь не предлагал использовать && вместо if, а задавал вопрос автору темы.

Ну сорри, не заметил знак вопроса — слишком он оторван от тела сообщения.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Стиль написания - if vs ?:
От: vpchelko  
Дата: 14.04.10 09:45
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, vpchelko, Вы писали:


V>>(x == true) ? add(t) : remove(t); // это нормальный код, кратко и по теме.


I>
I>((x ? true : false) == true) ? add(t) : remove(t);
I>

Это уже жжж, зачем такое нужно?
Сало Украине, Героям Сала
Re[6]: Стиль написания - if vs ?:
От: vpchelko  
Дата: 14.04.10 09:48
Оценка:
Здравствуйте, mike_rs, Вы писали:

_>Здравствуйте, vpchelko, Вы писали:


V>>(x == true) ? add(t) : remove(t); // это нормальный код, кратко и по теме.


_>у меня еще с чистого C неприятие прямого сравнения с true. != false или в данном случае вообще if (x) гораздо лучше.

Ни чего тут неприятного не вижу. Всегда лучше явно написать с чем сравниваешь.
А == true или != false это уж зависит от стиля текущего проекта.
Сало Украине, Героям Сала
Re[7]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 14.04.10 10:14
Оценка:
Здравствуйте, vpchelko, Вы писали:

I>>((x ? true : false) == true) ? add(t) : remove(t);

V>Это уже жжж, зачем такое нужно?

Да как тебе сказать... Всегда лучше явно написать что сравниваешь.
А (x ? true : false) или (!x ? false : true) это уж зависит от стиля текущего проекта.
Re[6]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 14.04.10 10:16
Оценка:
Здравствуйте, mike_rs, Вы писали:


_>у меня еще с чистого C неприятие прямого сравнения с true. != false или в данном случае вообще if (x) гораздо лучше.


Чем же сравнение с false лучше сравнения с true?
Re[8]: Стиль написания - if vs ?:
От: vpchelko  
Дата: 14.04.10 10:23
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, vpchelko, Вы писали:


I>
I>>>((x ? true : false) == true) ? add(t) : remove(t);
I>

V>>Это уже жжж, зачем такое нужно?

I>Да как тебе сказать... Всегда лучше явно написать что сравниваешь.

I>А (x ? true : false) или (!x ? false : true) это уж зависит от стиля текущего проекта.
Ответь зачем 2 раза сравнивать?

Это ((x ? true : false) == true) ? add(t) : remove(t); Че это такое?
Если это расписать if / else...

if (x)
{
if(true == true)
{
add(t);
}
// else (X_x);
}
else
{
// if(true == false) (x_X)
remove(t);
} // ну типо я сам руками с оптимизирован.
Сало Украине, Героям Сала
Re[9]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 14.04.10 10:35
Оценка:
Здравствуйте, vpchelko, Вы писали:

V>Ответь зачем 2 раза сравнивать?


Там строго говоря одно сравнение и две проверки. Если же ты под сравнением понимаешь собственно сравнение или проверку, то в моем примере три сравнения, а в твоем было два. А достаточно одного.
Re[7]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 14.04.10 11:24
Оценка:
Здравствуйте, igna, Вы писали:

_>>у меня еще с чистого C неприятие прямого сравнения с true. != false или в данном случае вообще if (x) гораздо лучше.

I>Чем же сравнение с false лучше сравнения с true?
Тем, что только ноль == false. А за true принимается любое ненулевое значение.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Стиль написания - if vs ?:
От: vpchelko  
Дата: 14.04.10 12:28
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, igna, Вы писали:


_>>>у меня еще с чистого C неприятие прямого сравнения с true. != false или в данном случае вообще if (x) гораздо лучше.

I>>Чем же сравнение с false лучше сравнения с true?
CC>Тем, что только ноль == false. А за true принимается любое ненулевое значение.

Мдээээээээээээээээээ.
Сало Украине, Героям Сала
Re[8]: Стиль написания - if vs ?:
От: vpchelko  
Дата: 14.04.10 12:49
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, igna, Вы писали:


_>>>у меня еще с чистого C неприятие прямого сравнения с true. != false или в данном случае вообще if (x) гораздо лучше.

I>>Чем же сравнение с false лучше сравнения с true?
CC>Тем, что только ноль == false. А за true принимается любое ненулевое значение.

С какой такой стати? false и true это константы.
Сало Украине, Героям Сала
Re[10]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 14.04.10 13:44
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>помедитируй над таким вот кодом.

CC>int i = какое нибудь число;
CC>if (i) 
CC>    foo ();


Стой, куда! Нет, ты уж приведи пример, в котором сравнение с false нельзя заменить на сравнение с true!
Re[10]: Стиль написания - if vs ?:
От: vpchelko  
Дата: 14.04.10 13:59
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, vpchelko, Вы писали:


_>>>>>у меня еще с чистого C неприятие прямого сравнения с true. != false или в данном случае вообще if (x) гораздо лучше.

I>>>>Чем же сравнение с false лучше сравнения с true?
CC>>>Тем, что только ноль == false. А за true принимается любое ненулевое значение.

V>>С какой такой стати? false и true это константы.

CC>В С++ есть тип bool и у него есть два значения: true и false, константы, да
CC>В С булевского типа изначально не было в принципе (В С99 добавили stdbool, но это не встроенный тип). Равно как и true/false констант.

CC>помедитируй над таким вот кодом.

CC>
CC>int i = какое нибудь число;
CC>if (i) 
CC>    foo ();
CC>

Так зачем ты пишешь про true и false, которых в С нет?
Сало Украине, Героям Сала
Re[11]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 14.04.10 13:59
Оценка:
Здравствуйте, igna, Вы писали:

I>Стой, куда! Нет, ты уж приведи пример, в котором сравнение с false нельзя заменить на сравнение с true!


На.
// If the function succeeds, the return value is nonzero.
// If the function fails, the return value is zero.

BOOL WINAPI CheckTokenMembership(HANDLE TokenHandle, PSID SidToCheck, PBOOL IsMember);
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[12]: Стиль написания - if vs ?:
От: vpchelko  
Дата: 14.04.10 14:01
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, igna, Вы писали:


I>>Стой, куда! Нет, ты уж приведи пример, в котором сравнение с false нельзя заменить на сравнение с true!


CC>На.

CC>
CC>// If the function succeeds, the return value is nonzero.
CC>// If the function fails, the return value is zero.

CC>BOOL WINAPI CheckTokenMembership(HANDLE TokenHandle, PSID SidToCheck, PBOOL IsMember);
CC>

Ровняй BOOL на TRUE и FALSE.
Сало Украине, Героям Сала
Re[11]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 14.04.10 14:02
Оценка:
Здравствуйте, vpchelko, Вы писали:

_>>>>>>у меня еще с чистого C неприятие прямого сравнения с true. != false или в данном случае вообще if (x) гораздо лучше.

I>>>>>Чем же сравнение с false лучше сравнения с true?
CC>>>>Тем, что только ноль == false. А за true принимается любое ненулевое значение.

V>>>С какой такой стати? false и true это константы.

CC>>В С++ есть тип bool и у него есть два значения: true и false, константы, да
CC>>В С булевского типа изначально не было в принципе (В С99 добавили stdbool, но это не встроенный тип). Равно как и true/false констант.

CC>>помедитируй над таким вот кодом.


V>Так зачем ты пишешь про true и false, которых в С нет?

в С нет встроенного типа bool, но булевы операции есть.
в С++ при конвертации в bool работают правила: == 0 -> false, != 0 -> true

А началось всё с выделенного вверху.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 14.04.10 14:03
Оценка:
Здравствуйте, vpchelko, Вы писали:

CC>>На.

CC>>
CC>>// If the function succeeds, the return value is nonzero.
CC>>// If the function fails, the return value is zero.

CC>>BOOL WINAPI CheckTokenMembership(HANDLE TokenHandle, PSID SidToCheck, PBOOL IsMember);
CC>>


V>Ровняй BOOL на TRUE и FALSE.

Что ты этим хотел сказать?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: Стиль написания - if vs ?:
От: vpchelko  
Дата: 14.04.10 14:05
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, vpchelko, Вы писали:


CC>>>На.

CC>>>
CC>>>// If the function succeeds, the return value is nonzero.
CC>>>// If the function fails, the return value is zero.

CC>>>BOOL WINAPI CheckTokenMembership(HANDLE TokenHandle, PSID SidToCheck, PBOOL IsMember);
CC>>>


V>>Ровняй BOOL на TRUE и FALSE.

CC>Что ты этим хотел сказать?

НЕ ЛЬЗЯ СРАВНИВАТЬ ТИП BOOL с true / false.
Сало Украине, Героям Сала
Re[12]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 14.04.10 14:07
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>BOOL WINAPI CheckTokenMembership(HANDLE TokenHandle, PSID SidToCheck, PBOOL IsMember);


Так, а где сравнение с false?
Re[12]: Стиль написания - if vs ?:
От: vpchelko  
Дата: 14.04.10 14:12
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, vpchelko, Вы писали:


_>>>>>>>у меня еще с чистого C неприятие прямого сравнения с true. != false или в данном случае вообще if (x) гораздо лучше.

I>>>>>>Чем же сравнение с false лучше сравнения с true?
CC>>>>>Тем, что только ноль == false. А за true принимается любое ненулевое значение.

V>>>>С какой такой стати? false и true это константы.

CC>>>В С++ есть тип bool и у него есть два значения: true и false, константы, да
CC>>>В С булевского типа изначально не было в принципе (В С99 добавили stdbool, но это не встроенный тип). Равно как и true/false констант.

CC>>>помедитируй над таким вот кодом.


V>>Так зачем ты пишешь про true и false, которых в С нет?

CC>в С нет встроенного типа bool, но булевы операции есть.
CC>в С++ при конвертации в bool работают правила: == 0 -> false, != 0 -> true

CC>А началось всё с выделенного вверху.


В чистом C нет встроенного типа бул, как там было с константами типа true / false? Честно говоря я не помню...
Сало Украине, Героям Сала
Re[13]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 14.04.10 14:58
Оценка:
Здравствуйте, vpchelko, Вы писали:

V>В чистом C нет встроенного типа бул, как там было с константами типа true / false? Честно говоря я не помню...

тоже нету.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 14.04.10 14:58
Оценка:
Здравствуйте, vpchelko, Вы писали:

V>>>Ровняй BOOL на TRUE и FALSE.

CC>>Что ты этим хотел сказать?
V>НЕЛЬЗЯ СРАВНИВАТЬ ТИП BOOL с true / false.
Почему? С false можно. Без побочных эффектов.
Потому бранчстартер (mike_rs) и писал что лучше уж сравнивать с false чем с true.
Это заморочка в стиле if (5 == i), когда написание константы перед оператором == некоторым помогало от потенциальной опечатки, когда вместо сравнения получалось присваивание.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Стиль написания - if vs ?:
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.04.10 15:01
Оценка:
Здравствуйте, vpchelko, Вы писали:

V>В чистом C нет встроенного типа бул, как там было с константами типа true / false? Честно говоря я не помню...


Есть, в C99
Re[16]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 14.04.10 16:01
Оценка:
Здравствуйте, CreatorCray, Вы писали:

V>>НЕЛЬЗЯ СРАВНИВАТЬ ТИП BOOL с true / false.

CC>Почему? С false можно. Без побочных эффектов.

Ты пример давай. Сравнения BOOL с false.
Re[17]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 15.04.10 08:18
Оценка:
Здравствуйте, igna, Вы писали:

I>Ты пример давай. Сравнения BOOL с false.


bool GetCorrectAnswer ();
BOOL WINAPI GetSomething ();

if (GetSomething () == GetCorrectAnswer ()) ...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 15.04.10 08:25
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>if (GetSomething () == GetCorrectAnswer ()) ...


Ну вот, приехали... Начиналось то вот как:

_>>>у меня еще с чистого C неприятие прямого сравнения с true. != false или в данном случае вообще if (x) гораздо лучше.
I>>Чем же сравнение с false лучше сравнения с true?
CC>Тем, что только ноль == false. А за true принимается любое ненулевое значение.


А сравнение GetSomething () == GetCorrectAnswer () какое отношение к этому имеет?
Re[19]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 15.04.10 08:26
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, CreatorCray, Вы писали:


I>
CC>>if (GetSomething () == GetCorrectAnswer ()) ...
I>


I>Ну вот, приехали... Начиналось то вот как:


I>

_>>>>у меня еще с чистого C неприятие прямого сравнения с true. != false или в данном случае вообще if (x) гораздо лучше.
I>>>Чем же сравнение с false лучше сравнения с true?
CC>>Тем, что только ноль == false. А за true принимается любое ненулевое значение.


I>А сравнение GetSomething () == GetCorrectAnswer () какое отношение к этому имеет?

тем, что для false оно ОК, а для true уже не факт
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[20]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 15.04.10 09:08
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>тем, что для false оно ОК, а для true уже не факт


У человека было "неприятие прямого сравнения с true" вместо которого по его мнению лучше использовать "!= false". То есть он предлагает заменять сравнение на равенство с true на сравнение не неравенство с false. Ты с его мнением согласен?
Re[20]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 15.04.10 09:14
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>тем, что для false оно ОК, а для true уже не факт


По-твоему, выражение TRUE == true может оказаться ложным?
Re[21]: Стиль написания - if vs ?:
От: vpchelko  
Дата: 15.04.10 09:33
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, CreatorCray, Вы писали:


CC>>тем, что для false оно ОК, а для true уже не факт


I>По-твоему, выражение TRUE == true может оказаться ложным?


На чистом C может, зависит от того как юзер определить true.
Сало Украине, Героям Сала
Re[22]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 15.04.10 09:46
Оценка:
Здравствуйте, vpchelko, Вы писали:

I>>По-твоему, выражение TRUE == true может оказаться ложным?


V>На чистом C может, зависит от того как юзер определить true.


Ты выпал из контекста. false vs. true.
Re[21]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 15.04.10 11:36
Оценка:
Здравствуйте, igna, Вы писали:

I>У человека было "неприятие прямого сравнения с true" вместо которого по его мнению лучше использовать "!= false". То есть он предлагает заменять сравнение на равенство с true на сравнение не неравенство с false. Ты с его мнением согласен?


скорее уж я согласен с его "в данном случае вообще if (x) гораздо лучше."
А про предпочтение использовать false в операциях сравнения вместо true — во времёна С это имело под собой реальные основания, которые я вероятно не смог внятно разъяснить, раз уж ветка так разрослась.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[21]: Стиль написания - if vs ?:
От: CreatorCray  
Дата: 15.04.10 11:36
Оценка:
Здравствуйте, igna, Вы писали:

CC>>тем, что для false оно ОК, а для true уже не факт

I>По-твоему, выражение TRUE == true может оказаться ложным?
Разумеется.

TRUE — int
true — bool
во время сравнения bool приведётся к int, т.е. будет if (TRUE == 1)
касательно числового значения TRUE у нас нет никаких гарантий кроме одной: TRUE != 0

так что в общем случае TRUE != true
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[22]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 15.04.10 12:27
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>во время сравнения bool приведётся к int


Наоборот, int приведётся к bool, а именно любое ненулевое число приведется к true, и следовательно TRUE == true всегда истинно.
Re[23]: Стиль написания - if vs ?:
От: uzhas Ниоткуда  
Дата: 15.04.10 13:02
Оценка:
I>Наоборот, int приведётся к bool, а именно любое ненулевое число приведется к true, и следовательно TRUE == true всегда истинно.
Пожалуй, не соглашусь. Вроде bool должен сконвертроваться в int.
#include <iostream>

int main(int argc, char** argv)
{
  int x = 4;
  bool flag = true;
  bool result = (flag == x);
  std::cout << "Result = " << result << std::endl;
  return 0;
}

Данная программа выводит

Result = 0


3.9.1 Fundamental types
...
6. Values of type bool are either true or false.42) [Note: there are no signed, unsigned, short, or
long bool types or values. ] As described below, bool values behave as integral types. Values of type
bool participate in integral promotions (4.5).

Чтобы узнать кто куда конвертится, надо курить

4 Standard conversions


TRUE == true всегда истинно

по другой причине : потому что #define TRUE 1 =)
Re[24]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 15.04.10 13:08
Оценка:
Здравствуйте, uzhas, Вы писали:

U>Пожалуй, не соглашусь. Вроде bool должен сконвертроваться в int.


Вот именно, что вроде.

U>Чтобы узнать кто куда конвертится, надо курить

4 Standard conversions


Ну так кури. 4.12.
Re[14]: Стиль написания - if vs ?:
От: vpchelko  
Дата: 15.04.10 13:10
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, vpchelko, Вы писали:


V>>В чистом C нет встроенного типа бул, как там было с константами типа true / false? Честно говоря я не помню...


Pzz>Есть, в C99


С99 == чистый С?
Сало Украине, Героям Сала
Re[2]: Стиль написания - if vs ?:
От: ambel-vlad Беларусь  
Дата: 16.04.10 05:11
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>(x && add(t)) || remove(t);


Сие не равнозначно выражению "x ? add(t) : remove (t);"
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Стиль написания - if vs ?:
От: igna Россия  
Дата: 16.04.10 05:38
Оценка:
Здравствуйте, ambel-vlad, Вы писали:

I>>(x && add(t)) || remove(t);


AV>Сие не равнозначно выражению "x ? add(t) : remove (t);"


А "if (x) add(t); else remove(t);" (в том же смысле) равнозначно?
Re[3]: Стиль написания - if vs ?:
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.04.10 05:40
Оценка:
Здравствуйте, ambel-vlad, Вы писали:

AV>Здравствуйте, Ikemefula, Вы писали:


I>>(x && add(t)) || remove(t);


AV>Сие не равнозначно выражению "x ? add(t) : remove (t);"


Все равно прикольно
Re[4]: Стиль написания - if vs ?:
От: ambel-vlad Беларусь  
Дата: 16.04.10 06:38
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>>>(x && add(t)) || remove(t);


AV>>Сие не равнозначно выражению "x ? add(t) : remove (t);"


I>Все равно прикольно


Если смотреть в таком разрезе, то тут и более прикольные варианты приводились.

Тем более, что для приколов есть другой форум
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Стиль написания - if vs ?:
От: Pzz Россия https://github.com/alexpevzner
Дата: 19.04.10 15:14
Оценка:
Здравствуйте, vpchelko, Вы писали:

V>>>В чистом C нет встроенного типа бул, как там было с константами типа true / false? Честно говоря я не помню...


Pzz>>Есть, в C99


V>С99 == чистый С?


А вы как считаете?
Re[16]: Стиль написания - if vs ?:
От: vpchelko  
Дата: 19.04.10 15:23
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, vpchelko, Вы писали:


V>>>>В чистом C нет встроенного типа бул, как там было с константами типа true / false? Честно говоря я не помню...


Pzz>>>Есть, в C99


V>>С99 == чистый С?


Pzz>А вы как считаете?


По выше указному мнению некоего аватара, было несогласие. Лично я с "чистым" си кодом, дела ни когда не имел, в основном смешанный с/с++ код.
Сало Украине, Героям Сала
Re[27]: Стиль написания - if vs ?:
От: uzhas Ниоткуда  
Дата: 22.04.10 18:31
Оценка:
Здравствуйте, Masterkent, Вы писали:

M>Курить стандартик надо с умом, а то ведь ненароком и обкуриться можно.


Бобер, выдыхай! (с)
Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.