Тут я бы мог привязаться со словами, что слово void не приведено в качестве типа, но в качестве слова для обозначения «пустой», но вот тут показано, что как бы всё не так и, как оказалось, void является псевдотипом наряду с mixed, number, callback, но о нём какого-то фига написано внизу. Позор мне. Сам для функций без возврата @return опускал.
Я писал в общем, не привязываясь к конкретному языку — не считаю что вопрос реализации присваивания в Эф Шарпе или Коммон-лиспе играет особую роль. В си-плюс особенно — там и разговора нет, мы там способны наделать макросов и как угодно писать. Но, пожалуй, добавлю, что если префиксный ++ для числа и += 1 не взаимозаменяемы, то скорее всего код содержит ошибку в своей семантике.
Не важно с чем ассоциируется ++, важно то, что было одно значение, а стало другое с тем же именем, в той же области видимости. Вот и всё, а остальное зависит от реализации.
* x++ может сменить класс x, так как в других языках так не делают
В php :) горячо любимом. Там люто целое становится float'ом, если не влезло. В результате выполнения операции.
+= Тоже может заменить значение бывшее Fix в Big если так случится.
winnie@tsundere:~$ irb
ruby-1.9.2-head > i = 2 ** (666.size * 8 — 2) — 1
=> 4611686018427387903
ruby-1.9.2-head > i.class
=> Fixnum
ruby-1.9.2-head > j = (i += 1) + 10
=> 4611686018427387914
ruby-1.9.2-head > i.class
=> Bignum
Это не повод убрать += из-за того, что в C++ так не делают, извините.
* Укажите пожалуйста, какие идеологические проблемы были бы с введением оператора ++, если бы был один класс для всех целых чисел.
Почти никаких. Matz'у предложили, он отказался. Мне это нравится.
Вот привёл примеров немного — все эти действия вернули объекты. И значения переменных равны результатам.
LEFT VAlUE = RIGHT VALUE
winnie@tsundere:~$ irb
ruby-1.9.2-head > i = 10 + 2
=> 12
ruby-1.9.2-head > j = 10 ** 2
=> 100
ruby-1.9.2-head > d = i — 1
=> 11
ruby-1.9.2-head > m = (i += 1) — 2
=> 11
Если бы мы добавили в руби, скажем, постфиксный инкремент, то вышло бы так
i = 10
i++
Результат выражения i++ — десятка. А значение i после его выполнения — 11. В этом и есть некоторое неудобство.
Вот, например, такие дела в php, где есть си-стайл инкремент.
php > $i = 10;
php > echo $i++;
10
php > echo $i;
11
Я могу написать отсебятины вроде той, что многие программисты зря обращают внимание на префиксные и постфиксные формы в ущерб читаемости, но думаю, что это никому не интересно :)
* Чем вас так напугало, то что последнее вычисленное значение является возвращаемым значением метода?
Меня не напугало. Мне это нравится. Мне любо почти не писать return. Я всем грю: «Смотри ретурн не нужно писать».
Инкремент в префиксной форме является сахаром для операции += 1.
По сути своей, ++ содержит в себе неявное присваивание в любых формах. Проблем с преобразованием нет — мы получаем уже другой объект, а не модифицируем старый. Отказ от ++ скорее не вяжется с философией руби по возможности возвращать последнее вычисленное значение (а в случае использования постфиксной формы инкремента в си-подобных языках возвращается исходное значение). Вот, кстати, matz пишет об этом redmine.ruby-lang.org/issues/show/1432
Разница — в один пиксель по вертикали сверху и снизу, что является вполне решаемым, так как для кроссбраузерной верстки «пиксель-в-пиксель» всё равно пришлось бы убрать границы input и обернуть его в div (один из вариантов).
Например, если открыть в хроме — вертикальные отступы тоже будут.
Я вот не понимаю почему все обижаются на майкрософт в данном случае.
Тестировал я на html 4.01 strict, определив его по краю доктайпа в тексте поста.
Тут я бы мог привязаться со словами, что слово void не приведено в качестве типа, но в качестве слова для обозначения «пустой», но вот тут показано, что как бы всё не так и, как оказалось, void является псевдотипом наряду с mixed, number, callback, но о нём какого-то фига написано внизу. Позор мне. Сам для функций без возврата @return опускал.Не важно с чем ассоциируется ++, важно то, что было одно значение, а стало другое с тем же именем, в той же области видимости. Вот и всё, а остальное зависит от реализации.
* x++ может сменить класс x, так как в других языках так не делают
В php :) горячо любимом. Там люто целое становится float'ом, если не влезло. В результате выполнения операции.
+= Тоже может заменить значение бывшее Fix в Big если так случится.
winnie@tsundere:~$ irb
ruby-1.9.2-head > i = 2 ** (666.size * 8 — 2) — 1
=> 4611686018427387903
ruby-1.9.2-head > i.class
=> Fixnum
ruby-1.9.2-head > j = (i += 1) + 10
=> 4611686018427387914
ruby-1.9.2-head > i.class
=> Bignum
Это не повод убрать += из-за того, что в C++ так не делают, извините.
* Укажите пожалуйста, какие идеологические проблемы были бы с введением оператора ++, если бы был один класс для всех целых чисел.
Почти никаких. Matz'у предложили, он отказался. Мне это нравится.
Вот привёл примеров немного — все эти действия вернули объекты. И значения переменных равны результатам.
LEFT VAlUE = RIGHT VALUE
winnie@tsundere:~$ irb
ruby-1.9.2-head > i = 10 + 2
=> 12
ruby-1.9.2-head > j = 10 ** 2
=> 100
ruby-1.9.2-head > d = i — 1
=> 11
ruby-1.9.2-head > m = (i += 1) — 2
=> 11
Если бы мы добавили в руби, скажем, постфиксный инкремент, то вышло бы так
i = 10
i++
Результат выражения i++ — десятка. А значение i после его выполнения — 11. В этом и есть некоторое неудобство.
Вот, например, такие дела в php, где есть си-стайл инкремент.
php > $i = 10;
php > echo $i++;
10
php > echo $i;
11
Я могу написать отсебятины вроде той, что многие программисты зря обращают внимание на префиксные и постфиксные формы в ущерб читаемости, но думаю, что это никому не интересно :)
* Чем вас так напугало, то что последнее вычисленное значение является возвращаемым значением метода?
Меня не напугало. Мне это нравится. Мне любо почти не писать return. Я всем грю: «Смотри ретурн не нужно писать».
По сути своей, ++ содержит в себе неявное присваивание в любых формах. Проблем с преобразованием нет — мы получаем уже другой объект, а не модифицируем старый. Отказ от ++ скорее не вяжется с философией руби по возможности возвращать последнее вычисленное значение (а в случае использования постфиксной формы инкремента в си-подобных языках возвращается исходное значение). Вот, кстати, matz пишет об этом redmine.ruby-lang.org/issues/show/1432
Так не будет работать без java?
img-fotki.yandex.ru/get/3609/winniehabr.0/0_37957_7886ed0_orig
Разница — в один пиксель по вертикали сверху и снизу, что является вполне решаемым, так как для кроссбраузерной верстки «пиксель-в-пиксель» всё равно пришлось бы убрать границы input и обернуть его в div (один из вариантов).
Например, если открыть в хроме — вертикальные отступы тоже будут.
Я вот не понимаю почему все обижаются на майкрософт в данном случае.
Тестировал я на html 4.01 strict, определив его по краю доктайпа в тексте поста.