- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
sub get0 { print("get0\n"); return 0; }
sub get2 { print("get2\n"); return 2; }
my ($a, $b) = (1, 1);
$a ? $b = get0() : $b = get2();
print Dumper({
'a' => $a,
'b' => $b,
});
an0nym 27.10.2012 03:32 # +4
$a ? ($b = get0) : ($b = get2);
inkanus-gray 27.10.2012 07:31 # +1
А если скобки поставить только у первого выражения, то будет жаловаться на несоответствие типов. Как он пытается распарсить выражение в этом случае?
guest 27.10.2012 08:19 # +5
$a ? ($b = get0) : $b = get2;
эквивалентно выражению
($a ? ($b = get0) : $b) = get2;
в итоге присвоить get2 нечему.
Elvenfighter 27.10.2012 14:54 # +1
синтаксически неправильная
bormand 27.10.2012 16:44 # +2
USB 27.10.2012 19:24 # −1
тото если тото иначе тото
да и лишнее ключевое слово then убрали
bormand 27.10.2012 20:04 # +5
Для меня, как и для многих других программистов, для которых питон не является основным языком, более естественным порядком все-таки является cond -> then_expr -> else_expr. Это, конечно, мое имхо, но и на голосовании PEP308 многим людям тоже не нравился данный порядок, и этот вариант стоял аж на четвертом месте.
Судя по всему, из-за того, что голосование не выявило явного победителя, а оставлять питон без тернарника и терпеть говнище в виде cond and T or F уже надоело, Гвидо проявил инициативу, и зафорсил свое предложение с T if cond else F.
USB 27.10.2012 20:59 # 0
Для тебя, как и многих других программистов, для которых питон не является основным языком для общения - это весьма приятный и лаконичный вариант, пришедший из естественных языков передачи информации между людьми
bormand 27.10.2012 21:22 # +5
Но, к сожалению, питон это язык программирования, а когда я пролистываю код, мне, почти всегда, хочется увидеть условие, и только затем последствия, к которым приведет его исполнение. Почему? Во-первых потому, что так легче понять логику кода. Во-вторых - действия, как правило, длиннее условий.
Приведу пример из пёрла: Не правда ли, что второе читается легче и быстрее, хотя и несколько отдалено от естественных языков?
Vindicar 29.10.2012 09:53 # +1
Да и сколь-нибудь длинные вычисления тоже лучше класть в классический if. Конструкция x if c else y - только для коротких операций и должна умещаться в одну строку.
bormand 29.10.2012 10:04 # +1
Истину глаголите.
Ну так то да, тернарник с большими формулами в ветвях и на си смотрится как говно.
TarasB 29.10.2012 10:03 # 0
bormand 27.10.2012 21:30 # +5
1) Я сварю пельмени, если они есть, иначе придется сходить в магазин.
2) Если у меня есть пельмени, я сварю их, иначе придется сходить в магазин.
У меня ПГМ, если мне больше нравится второе предложение? ;)
USB 27.10.2012 21:34 # +1
inkanus-gray 28.10.2012 06:05 # +2
eth0 28.10.2012 17:35 # +5
TarasB 29.10.2012 10:05 # +2
bormand 29.10.2012 10:17 # +2
TarasB 29.10.2012 14:12 # 0
bormand 29.10.2012 14:48 # +3
TarasB 29.10.2012 14:50 # 0
bormand 29.10.2012 14:54 # 0
eth0 29.10.2012 18:50 # +1
Там для всего свой конец, даже для неба, даже для. же.
bormand 29.10.2012 19:03 # 0
bormand 29.10.2012 19:14 # +1
eth0 30.10.2012 21:27 # +1
Я считаю, что с этим разнообразием концов они пошли гораздо дальше паскаля. Из аналогий - разве что бейсик с его NEXT/END IF.
bormand 30.10.2012 21:44 # −1
КонецБля
3.14159265 29.10.2012 15:07 # +1
Steve_Brown 29.10.2012 15:06 # 0
Lure Of Chaos 30.10.2012 00:12 # +4
bormand 30.10.2012 06:17 # +3
Только сегодня! Спешите видеть! Великий и ужасный маг Lure Of Chaos на ваших глазах создаст чай и булки и съест их!
Steve_Brown 30.10.2012 10:22 # +1
bormand 30.10.2012 11:08 # +1
На пельмени.
eth0 30.10.2012 21:28 # +1
А вот будь это язык без GC, чай бы утёк.
bormand 30.10.2012 21:45 # +2
Тогда пришлось бы и посуду за собой удалять или мыть и возвращать в пул.
3.14159265 25.07.2013 19:18 # 0
Учитесь, все подсвечивается.
sayidandrtfm 29.10.2012 10:54 # 0
Если, пельмени есть, то приготовить пельмени
иначе разгрузочный день.
3.14159265 29.10.2012 15:08 # 0
Посылает жена в магазин, дает наставления:
- Купи буханку хлеба, а если будут яйца, то десяток.
Программер возвращается, приносит 10 буханок хлеба.
- wtf???!!!
- но ведь яйца–то были!!!
LispGovno 29.10.2012 16:06 # −1
wvxvw 30.11.2012 14:24 # +1
- а кто вообще сказал, что там это хорошо устроено? Как правило, там херня полнейшая.
- из практических соображений, даже в натуральных (и не синтетических) языках используют конструкции, где сначала идет условие, а потом действие. Например, телефонный автоответчик большой компании, цитирую:
"Для получения информации на русском языке нажмите один, ... служба технической поддержки? - нажмите 9 и решетку" и т.д. Потому что бесполезно тратить время позвонившего рассказывая ему как сделать то, что, возможно ему делать вообще не нужно, и только рассказав сообщить о том, зачем это делать.
bormand 30.11.2012 15:22 # 0
А в этот момент человек уже и забыл как это делать, потому что слушал предыдущий фрагмент невнимательно, и не старался его запоминать...
Все верно, в подобных случаях условия должны идти в начале, чтобы человек знал, когда ему сосредоточиться.
PascalGovno 30.11.2012 19:28 # +1
К сожалению к настоящему времени почти везде заткнуто
TarasB 30.11.2012 19:38 # +1
Вот надо мне узнать, сколько у меня бабла на карточке. Подхожу, ищу вариант где есть что-то типа "узнать счёт". Нету. Ищу вариант со словом "баланс". Нету. Оказывется, нужен был вариант "выписка по счёту". Ну пиздец.
Если бы там стоят специальный официант, то я бы, не просыпаясь и не забивая мозг на 100% задачей "какой бля вариант выбрать?!", подошёл бы, спросил "скока денег у меня" и всё.
Терминалы с вариантами выбора - говно. Особенно если варианты каждый раз меняются
wvxvw 30.11.2012 19:47 # +1
TarasB 01.12.2012 12:26 # 0
wvxvw 01.12.2012 13:56 # +2
TarasB 01.12.2012 15:54 # 0
TarasB 03.12.2012 19:06 # 0
Может он не в курсе, когда эти фильмы вышли? Или он считает, что 60е-70е - это конец века?
Govnocoder#0xFF 03.12.2012 19:40 # 0
Смотря какого.
inkanus-gray 01.12.2012 08:46 # 0
Вариант 1: ЕСЛИ хотите получить информацию, нажмите один.
Вариант 2: Вы получите информацию, ЕСЛИ нажмёте один.
guest 01.12.2012 13:51 # +2
roman-kashitsyn 27.10.2012 21:59 # +1
TarasB 27.10.2012 14:56 # +4
($a ? ($b = get0) : $b) = get2;
вполне может быть скомпилировано
guest 30.11.2012 22:36 # −2
7ion 27.10.2012 12:02 # +3
Говнокодеры, млин.
Elvenfighter 27.10.2012 15:00 # 0
guest 27.10.2012 14:31 # +3
эквивалентно