мне часто хочется функциональных if и switch.
что-то типа:
auto res = if (1) {
// some codereturn 1;
} else {
// some codereturn 0;
}
auto res = switch ( idx) {
case 0: { /* some code */; return 33; }
case 1: { /* some code */; return 44; }
default: return -1;
}
по поводу циклов, не знаю, нужно ли оно...
какие мысли?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: что думаете про функциональные if-else, switch, for, while ?
Здравствуйте, niXman, Вы писали:
X>привет!
X>мне часто хочется функциональных if и switch. X>что-то типа: X>... X>auto res = switch ( idx) { X> case 0: { /* some code */; return 33; } X> case 1: { /* some code */; return 44; } X> default: return -1; X>} X>[/ccode] X>по поводу циклов, не знаю, нужно ли оно...
X>какие мысли?
Может я чего-то не понял, но чем это от обычных лямбд отличается? Что-то вроде:
auto res = []( auto idx ) { switch( idx ) {
case 0: { /* some code */; return 33; }
case 1: { /* some code */; return 44; }
}}( idx );
Можно в макрос завернуть, чтобы idx не писать несколько раз.
Re[2]: что думаете про функциональные if-else, switch, for, while ?
Здравствуйте, SaZ, Вы писали:
SaZ>Может я чего-то не понял, но чем это от обычных лямбд отличается?
тем, что лямбды для данного случая — лечение последствий.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: что думаете про функциональные if-else, switch, for, while ?
Здравствуйте, niXman, Вы писали:
SaZ>>Может я чего-то не понял, но чем это от обычных лямбд отличается? X>тем, что лямбды для данного случая — лечение последствий.
Каких последствий?
Re[4]: что думаете про функциональные if-else, switch, for, while ?
Здравствуйте, niXman, Вы писали:
X>мне часто хочется функциональных if и switch.
чуток не по теме
идет подмена понятий
функциональный if — это паттерн матчинг (он же декларативный получается)
if в виде функции — это фигня какая-то )) по типу, как в tcl: http://wiki.tcl.tk/1042
Re: что думаете про функциональные if-else, switch, for, while ?
Здравствуйте, niXman, Вы писали:
X>мне часто хочется функциональных if и switch. X>что-то типа: X> X>какие мысли?
ИМО, к функциональщине это имеет лишь опосредованное отношение. Это называется if-expression, switch-expression. (обычные называются if-statement, switch-statement)
If-expression кстати есть в C++, называется conditional expression/operator condtition ? true-expression : false-expression.
Также есть оператор запятая.
И конечно, как уже упомянули выше, вызов лямбды/замыкания — это тоже выражение, а уж внутри может быть что угодно.
Re[2]: что думаете про функциональные if-else, switch, for, while ?
Здравствуйте, uzhas, Вы писали:
U>if в виде функции — это фигня какая-то ))
это не фигня хотябы потому, что компилятор сможет проверять, во всех ли блоках происходит возврат значения.
и да, я знаю, это можно сделать при помощи тех же лямбд.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: что думаете про функциональные if-else, switch, for, while ?
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, niXman, Вы писали:
X>>мне часто хочется функциональных if и switch. X>>что-то типа: X>> X>>какие мысли?
EP>ИМО, к функциональщине это имеет лишь опосредованное отношение. Это называется if-expression, switch-expression.
не знал. ок.
EP>If-expression кстати есть в C++, называется conditional expression/operator condtition ? true-expression : false-expression.
тернарка?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: что думаете про функциональные if-else, switch, for,
Здравствуйте, uzhas, Вы писали:
X>>мне часто хочется функциональных if и switch. U>чуток не по теме U>идет подмена понятий U>функциональный if — это паттерн матчинг (он же декларативный получается)
Он не про pattern matching, а про if-expression. В некоторых языках if это expression (по типу condtition ? true-expression : false-expression в C++), а не statement, со всеми вытекающими. Причём не только if, но и другие условные конструкции, и например блоки кода.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Он не про pattern matching, а про if-expression. В некоторых языках if это expression (по типу condtition ? true-expression : false-expression в C++), а не statement, со всеми вытекающими. Причём не только if, но и например блоки кода, и другие условные конструкции.
да-да, я об этом.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: что думаете про функциональные if-else, switch, for, while ?
Кажется, это должно работать так: если хочется что-то добавить в язык, то желательно сделать прототип, попробовать им воспользоваться, собрать шишки, и если опыт окажется удачным, то внести предложение в комитет (можно, конечно, и без прототипа, но это даст меньше шансов, если польза от предложения не очевидна сразу всем).
И вот эта идея на самом деле уже реализована много-много лет назад, как минимум в трёх известных компиляторах (gcc/clang/icc) под названием Statements and Declarations in Expressions. Тот факт, что за это время этой возможностью серьёзно никто не заинтересовался, говорит лишь о том, что, видимо, такая функциональность никому особо и не нужна в стандарте языка. Тем более, что появившиеся с тех времён лямбды теперь предлагают достаточно универсальную альтернативу.
Re[2]: что думаете про функциональные if-else, switch, for, while ?
Здравствуйте, watchmaker, Вы писали:
W>Кажется, это должно работать так: если хочется что-то добавить в язык, то желательно сделать прототип, попробовать им воспользоваться, собрать шишки, и если опыт окажется удачным, то внести предложение в комитет (можно, конечно, и без прототипа, но это даст меньше шансов, если польза от предложения не очевидна сразу всем).
логично.
W>И вот эта идея на самом деле уже реализована много-много лет назад, как минимум в трёх известных компиляторах (gcc/clang/icc) под названием Statements and Declarations in Expressions.
всегда думал, что это только в GCC поддерживается, потому никогда и не использовал...
к тому же, синтаксис еще ужасней чем при использовании лямбд %)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: что думаете про функциональные if-else, switch, for, while ?
Здравствуйте, niXman, Вы писали:
X>ясно, пропосал никто писать не хочет =)
1) появляется желание (у тебя)
2) появляются велосипедные реализации (у меня и Евгения Панасюка)
3) нарабатывается практика использования (тебе надо, ты и используешь)
4) обнаруживаются подводные грабли, описываются истории успеха и всё такое
5) велосипед попадает в буст
6) буст попадает в пропозал
7) пропозал попадает в стандарт
Вот, как-то так.
Перекуём баги на фичи!
Re: что думаете про функциональные if-else, switch, for, while ?
return там не к месту. Это оператор немедленного выхода из функции.
если бы просто значение блока в фигурных скобках было бы равно значению последнего выражения в этом блоке, то да, была бы годная вещь.
auto res = if (1) {
// some code
1;
} else {
// some code
0;
}
Нет такого преступления, на которое не пошло бы суверенное родоплеменное быдло ради продления своего бессмысленного рода и распространения своего бессмысленного генома.