23:59
Приоритет ?:
Несмотря на то, что я повесил на стенку на рабочем месте таблицу с приоритетами операций в Си/Си++, всё равно иногда напарываюсь.
Я очень люблю операцию ?:. Она позволяет многие длинные конструкции заменять на более короткие -- и более понятные. Хотя наворотить с ней можно и совершенно непонятную фигню.
Вот, например, вместо:
if(a>3) a++; else a--;
можно написать:
a+=a>3?1:-1;
Не всем кажется, что второй вариант понятен, но я не про это.
Приоритет этой операции один из самых низких. Он такой же, как у присваивания, поэтому в данном случае всё правильно работает только за счёт того, что ассоциативность у присваивания -- справа налево (за счёт этого работают штуки вроде a=b=c=0
. То есть, ?: вычисляется раньше, чем присваивание.
Но могут быть и более сложные случаи, например:
a=x*invert?1:-1;
Тут ошибка. Сначала икс умножится на инверт, в то время как задумка была в том, чтобы a получила значение либо x, либо -x. Вот на этом-то я и накололся.
Поэтому ?: надо всегда заключать в скобки:
a=x*(invert?1:-1);
Я очень люблю операцию ?:. Она позволяет многие длинные конструкции заменять на более короткие -- и более понятные. Хотя наворотить с ней можно и совершенно непонятную фигню.
Вот, например, вместо:
if(a>3) a++; else a--;
можно написать:
a+=a>3?1:-1;
Не всем кажется, что второй вариант понятен, но я не про это.
Приоритет этой операции один из самых низких. Он такой же, как у присваивания, поэтому в данном случае всё правильно работает только за счёт того, что ассоциативность у присваивания -- справа налево (за счёт этого работают штуки вроде a=b=c=0

Но могут быть и более сложные случаи, например:
a=x*invert?1:-1;
Тут ошибка. Сначала икс умножится на инверт, в то время как задумка была в том, чтобы a получила значение либо x, либо -x. Вот на этом-то я и накололся.
Поэтому ?: надо всегда заключать в скобки:
a=x*(invert?1:-1);
10.12.2018 в 08:25
Я бы сказал, что он вообще не понятен.
Кстати, все пытаюсь перейти на VSCode вместо штатного Powershell ISE. Получается пока медленно. Так вот - так же медленно VSC заставляет меня отвыкать от сокращенных форм записи командлетов (нервно реагирует даже на select вместо select-object, а уж про % вместо foreach вообще молчу). Аргументирует тем, что читабельность кода падает. И я начинаю с ним соглашаться.
10.12.2018 в 09:17
10.12.2018 в 13:21
>>Я бы сказал, что он вообще не понятен.
Вот. Возможно, это сила привычки, когда такие выражения выцепляются взглядом и понимаются отдельно.
>>VSC заставляет меня отвыкать от сокращенных форм записи командлетов (нервно реагирует даже на select вместо select-object, а уж про % вместо foreach вообще молчу). Аргументирует тем, что читабельность кода падает. И я начинаю с ним соглашаться.
Типичная дилемма удобство вс. безопасность или удобство написания вс. удобство чтения. Я тут интересовался языком Rust. Он позиционируется как замена Си с улучшенной читаемостью и безопасностью. Достигается это различными запретами времени компиляции. Привыкшие по Си совершать какое-нибудь неявное преобразование типов, будут спотыкаться -- их просто дальше не пустят.
>>Нет ли в нашем мире (в поведении людей, в функционировании общества, экономики, исторических событий, чего угодно) признаков работы программы (программ)?
Вы про то, не живём ли мы в матрице? Есть аргументы в пользу этого, но, на мой взгляд, довольно слабые. Ознакомиться с ними можно тут:
www.youtube.com/watch?v=SnQkTfSpfOU
Если вы про что-то другое, то поясните, о чём вы.
10.12.2018 в 13:43
10.12.2018 в 13:52
10.12.2018 в 21:04
А такие еще есть?
10.12.2018 в 21:08
10.12.2018 в 21:25
10.12.2018 в 22:11
10.12.2018 в 23:55
11.12.2018 в 01:10
11.12.2018 в 01:11
-- На трёх слонах.
-- А те?
-- На трёх китах.
-- А те?
-- На огромной черепахе.
-- А черепаха эта на чём стоит?
-- На ещё большей черепахе.
-- А она на чём?
-- А там дальше -- сплошные черепахи.
11.12.2018 в 09:57