Russian Qt Forum
Май 06, 2024, 10:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: [флэйм] if(expr) return 1; else return 0;  (Прочитано 34365 раз)
ритт
Гость
« : Февраль 11, 2009, 05:26 »

[off]
всегда хотел узнать почему люди так пишут
Код:
    if (expr) {
        return 1;
    } else {
        return 0;
    }

раньше думал, что это отличительная черта пыхпыхеров, теперь сомневаюсь...
[/off]
« Последнее редактирование: Февраль 15, 2009, 21:10 от Константин » Записан
AAXEE
Гость
« Ответ #1 : Февраль 12, 2009, 21:56 »

[off]
А что не так?
Или Вы имеете ввиду, что быстрее написать так?
Код:
return exp ;
[/off]
Записан
ритт
Гость
« Ответ #2 : Февраль 13, 2009, 04:25 »

[off]
не...
зачем return else return?
[/off]
Записан
BRE
Гость
« Ответ #3 : Февраль 13, 2009, 08:19 »

[off]
не...
зачем return else return?
[/off]
[off]
+ для таких конструкций есть:
return (expr)? variant1 : variant2;
[/off]
Записан
ритт
Гость
« Ответ #4 : Февраль 13, 2009, 09:07 »

[off]
+ для таких конструкций есть:
return (expr)? variant1 : variant2;
[/off]
[off]
я об этом же.
ну, или хотя бы if() return; return;
а так только путает, когда читаешь код с кучей таких фейковых элсов...
[/off]
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #5 : Февраль 14, 2009, 02:27 »

Код:
    if (expr) {
        return 1;
    } else {
        return 0;
    }

Очень красивый и понятный код. Фигурные скобки, конечно, лишние, но код практически человеческим языком описывает логику своей работы.

Так и нужно писать, без всяких "return (expr)? variant1 : variant2;", ибо конструкция "()?:" предназначена совсем для других случаев.
Записан

Собираю информацию по крупицам
http://webhamster.ru
BRE
Гость
« Ответ #6 : Февраль 14, 2009, 12:16 »

Так и нужно писать, без всяких "return (expr)? variant1 : variant2;", ибо конструкция "()?:" предназначена совсем для других случаев.
Поясни, пожалуйста.  Подмигивающий
Или это просто комплексы?
« Последнее редактирование: Февраль 14, 2009, 12:30 от BRE » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Февраль 14, 2009, 16:02 »

Или Вы имеете ввиду, что быстрее написать так?
Код:
return exp ;

В данном случае я бы так и написал. Зачем лишние конструкции if/else?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ритт
Гость
« Ответ #8 : Февраль 14, 2009, 16:20 »

не, изначально был общий случай типа if(i==10)
просто тему отделил (много оффа собралось) и теперь контекст неоднозначен...
Записан
spirit
Гость
« Ответ #9 : Февраль 14, 2009, 17:13 »

[off]
всегда хотел узнать почему люди так пишут
Код:
    if (expr) {
        return 1;
    } else {
        return 0;
    }

раньше думал, что это отличительная черта пыхпыхеров, теперь сомневаюсь...
[/off]
индуским стилем попахивает Улыбающийся никого обидеть не хотел.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Февраль 14, 2009, 18:21 »

я иногда тоже так пишу, когда планрую какую-нибудь работу делать до return'а, но пока не реализовано пусть хотябы компилится.
Записан

Юра.
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #11 : Февраль 15, 2009, 01:27 »

Так и нужно писать, без всяких "return (expr)? variant1 : variant2;", ибо конструкция "()?:" предназначена совсем для других случаев.
Поясни, пожалуйста.  Подмигивающий
Или это просто комплексы?

Операция выбора "()?:" следует использовать для избежания дублирования кода. Например, ее можно использовать внутри вызовов печати (всякие printf). Например, если требуется при нуле выводить строку, а при наличие числа просто печатать это число, то вместо конструкции

Код:
if(i==0)
 printf("Количество найденых объектов: %d Внимание! Объекты не найдены",i);
else
 printf("Количество найденых объектов: %d",i);

Можно воспользоваться конструкцией

Код:
printf("Количество найденых объектов: %d %s",i, i==0 ? "" : "Внимание! Объекты не найдены");

Грубо говоря, конструкция выбора предназначена для вычисления на лету отправляемых в функцию значений. Бывают ситуации, когда это может быть полезно, хотя лучше вычисление все же выносить вперед перед вызовом функции для наглядности.


Еще, пара мыслей из книги "Практика программирования".

Цитировать
Некоторые конструкции, кажется, просто обречены на злоупотребление. Именно такова операция выбора по условию "?:", с помощью которой можно построить довольно загадочные выражения:

Код:
child=(!LC&&!RC)0:(!LC?RC:LC);

Следующая форма значительно длиннее, но понять ее гораздо легче, потому что эти альтернативы более очевидны:

Код:
if(LC==0 && RC==0) 
 child=0;
else
 if(LC==0)
  child=RC;
 else
  child=LC;

В целом, операцию выбора по условию нельзя считать равноценным заменителем условного оператора.

Цитировать
Записывайте выражения в естественной форме. Следует писать выражения так же, как бы вы читали их вслух. В этом смыле, условные операторы, написанные синтаксически правильно, но содержащие операцию отрицания, всегда труднее понять, особенно если используется составное условие со связками И/ИЛИ. Лучше использовать утвердительную форму проверок, например, заменив знак проверки "больше" на "меньше".

Цитировать
Выражайтесь как можно понятнее. Программисты прилагают нескончаемые усилия, чтобы написать как можно более краткий код или изобрести самый остроумный способ достичь нужного результата. Правда, часто эти усилия направлены не на ту цель - ведь необходимо писать самый понятный, а не самый изощренный код.

Цитировать
Понятность кода - это совсем не то же самое, что его краткость. Довольно часто более понятный код является в то же время более кратким. С другой стороны, он может быть и более длинным, как в примере с заменой операции выбора по условию операторами if - else. Критерием выбора тут является легкость понимания кода.

Записан

Собираю информацию по крупицам
http://webhamster.ru
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #12 : Февраль 15, 2009, 01:53 »

Или Вы имеете ввиду, что быстрее написать так?
Код:
return exp ;
В данном случае я бы так и написал. Зачем лишние конструкции if/else?

Затем, что в них видно, какие варианты результата работы функции возможны. В случае "return exp;" читащему код еще надо разглядеть, что выражение не вычисляется по какой-то формуле как математическое выражение, а является логическим выражением. Хорошо, если функция короткая. А если заголовок уехал за экран, то правильно понять такую конструкцию сложнее, чем явное условие.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Rcus
Гость
« Ответ #13 : Февраль 15, 2009, 10:44 »

Примерчик порадовал Улыбающийся
Код:
child=(!LC&&!RC)0:(!LC?RC:LC);
слишком пессимистично
Код:
child = (LC || RC) ? (LC ? LC : RC) : 0;
оптимистичнее и понятнее Улыбающийся даже если сравнивать с if/else
а еще можно так:
Код:
child = LC ? LC : (RC ? RC : 0);
« Последнее редактирование: Февраль 15, 2009, 11:08 от Rcus » Записан
BRE
Гость
« Ответ #14 : Февраль 15, 2009, 10:47 »

Операция выбора "()?:" следует использовать для избежания дублирования кода. Например, ее можно использовать внутри вызовов печати (всякие printf).
Это все очень не убедительно, если не сказать смешно (не хочу тебя обидеть, но это больше похоже на "не могу это понять, значит это плохо и я использовать не буду.")
Я правильно понял, что по твоему мнению операция выбора добавленна в язык специально для функций вывода?
Если нет, то объясни почему нельзя использовать return (expr)? variant1 : variant2; или var = (expr)? variant1 : variant2;


Код:
if(LC==0 && RC==0) 
 child=0;
else
 if(LC==0)
  child=RC;
 else
  child=LC;

У меня и первое выражение не вызвало затруднений ( хоть там и добущенна ошибка), а такая конструкция у тебя вызывает затруднения?
Код
C++ (Qt)
if( !LC && !RC )
child = 0;
else
child = ( !LC )? RC : LC;
 
Записан
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.076 секунд. Запросов: 22.