Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Странное поведение Boolean (http://www.flasher.ru/forum/showthread.php?t=214022)

СлаваRa 29.03.2017 18:40

причем тут Java, какое она имеет отношение к AS3?

callme 29.03.2017 18:42

СлаваRa, это всё понятно, но мне кажется такое поведение языка непоследовательным. Надо было разрешить неявное приведение булева типа к числу и в других операциях.

Bletraut 29.03.2017 18:42

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

Добавлено через 42 секунды
Цитата:

Сообщение от СлаваRa (Сообщение 1199924)
причем тут Java, какое она имеет отношение к AS3?

Такое что + там тоже перегружен, однако, сложить true и 2 нельзя.

Добавлено через 3 минуты
Могли бы в других операторах разрешить приведение типов, а не только в +.

Добавлено через 10 минут
Тем более оператором +, нельзя выполнить математическое сложение числа и строки с числом, всегда будет строка.

Добавлено через 13 минут
Код AS3:

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

Точнее там сказано, что если выражение не является строкой, то флеш плеер его автоматически преобразует в число. Что им мешало сделать тоже самое с остальными?

caseyryan 29.03.2017 20:42

Цитата:

Такое что + там тоже перегружен, однако, сложить true и 2 нельзя.
И тем не менее, я тоже не понимаю, при чем тут джава? Другой язык, другая платформа, другие разработчики. Там и строка не является примитивным типом и с помощью == строки не сравниваются посимвольно как в as3, вместо этого используется метод equals. И много других отличий. Не вижу смысла искать одинаковое поведение операторов в языках, в которых и без этого миллион различий.
Цитата:

Могли бы в других операторах разрешить приведение типов, а не только в +.
Для чего?
Не вижу ни одной ситуации, где это бы пригодилось. Возможно не хватает перегрузки операторов, например, чтобы упростить сложение векторов. Но умножать булево на число - занятие совершенно бессмысленное. Если уж это для чего-то потребовалось, ты всегда можешь сделать явное приведение типов и без проблем произвести операцию

Жень Шень 30.03.2017 13:33

Мне кажет, что каша в голове по поводу "странного поведения Boolean" возникла из-за двойственного предназначении оператора +, а именно:
+ addition
Складывает числовые выражения. Если оба выражения являются целыми числами, их сумма также будет выражена целым числом; если одно из выражений или оба выражения являются числами с плавающей запятой, их сумма также будет выражена числом с плавающей запятой.
Если одно выражение является строкой, все другие выражения преобразуются в строки и сцепляются, а не суммируются. В противном случае, если выражение не является числом, проигрыватель Flash® Player преобразует его в число.

+ concatenation
Сцепляет (объединяет) строки. Если одно выражение является строкой, все другие выражения преобразуются в строки и сцепляются.
Если оба выражения являются числами, данный оператор выполняет функцию оператора сложения.
Компилятор распознаёт, что вы имели ввиду в своём выражении.
А теперь посмотрим, что будет, если приведение логики будет с другими операторами:
123/false = 123/0 – деление на ноль;
true * "one" – умножение строк. А это как?
Ну и дальше в том же духе.

Bletraut 30.03.2017 19:23

Цитата:

Для чего?
Не вижу ни одной ситуации, где это бы пригодилось.
Понадобилось мне для игры, где в зависимости от значения к итоговому значению переменной прибавляется некоторое число, и чтобы не городить условий я просто написал.

Код AS3:

a = 20;
b = 80;
c = true;
d = a + c*b;


Wolsh 30.03.2017 20:34

Код AS3:

d = c ? a + b : a;


caseyryan 31.03.2017 10:20

Цитата:

Сообщение от Bletraut (Сообщение 1199956)
Понадобилось мне для игры, где в зависимости от значения к итоговому значению переменной прибавляется некоторое число, и чтобы не городить условий я просто написал.

Код AS3:

a = 20;
b = 80;
c = true;
d = a + c*b;


Вот я я и говорю, для таких редких случаев, можно сделать явное приведение типа

Bletraut 31.03.2017 16:05

Цитата:

Сообщение от Wolsh (Сообщение 1199959)
Код AS3:

d = c ? a + b : a;


Удобочитаемость страдает.

СлаваRa 31.03.2017 19:52

Код AS3:

d = a + int(c)*b;



Часовой пояс GMT +4, время: 14:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.