PDA

Просмотр полной версии : Вопрос по сравнению в операторе Switch


Pronoob
18.12.2011, 01:54
В Колин Мук сказано, что: при сравнении результата выражения условноеВыражение со значениями выражений case используется оператор строго равенства.

switch (условноеВыражение) {
case Выражение1:
блокКода
break;
}

Какой может быть результат у выражения условноеВыражение, если оно пока ни с чем не сравнивалось, и значения результата не false и ни true.
И какие значения могут быть у выражий case.

Толи тупо сравнивается значения двух выражений и потом составному выражению присваивается значение true или false, либо я чего-то не понимаю. Объясните пожалуйста.

HardCoder
18.12.2011, 02:18
:wacko:Что-то я ничего не понял... var var1:uint = 5;
switch (var1) {
case 3:
trace("var1 - это число 3");
break;
case 4:
trace("var1 - это число 4");
break;
case 5:
trace("var1 - это число 5");
break;
default:
trace("Ни один из вариантов не подходит");
}Читается так:

switch (var1) - проверяем переменную var1:
___case 3: - если var1 равно 3, выводим: "var1 - это число 3"
_________break - прекращаем проверку.
___case 4: - если var1 равно 4, выводим: "var1 - это число 4"
_________break - прекращаем проверку.
___case 5: - если var1 равно 5, выводим: "var1 - это число 5"
_________break - прекращаем проверку.
___default: - если ни один из вариантов не подходит, то выводим: "Ни один из вариантов не подходит".

При чем, здесь выполняется проверка строго равенства === , а не ==

Pronoob
18.12.2011, 03:23
вот я и пытаюсь просечь смысл фразы Мука...

thirst
18.12.2011, 08:14
http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/operators.html#strict_equality

Вообще условноеВыражение сравнивается (в том порядке, в каком вы написали) с Выражение1, только без типизации. Т.е. если будет так(взял код выше).
var var1:uint = 5;
switch (var1) {
case 3:
trace("var1 - это число 3");
break;
case 4:
trace("var1 - это число 4");
break;
case "5":
trace("var1 - это число 5");
break;
default:
trace("Ни один из вариантов не подходит");
}
}
То при этом выведется "Ни один из вариантов не подходит", т.к Строка "5" не равна числу 5. А если бы оператор switch сравнивал выражения с помощью ==. То строка преобразовалась бы в число, и тогда выполнялся тот блок кода, где у тебя было trace("var1 - это число 5");

Pronoob
18.12.2011, 15:41
Теперь все - почти понял, но остался последний маленький вопросик. Почему тогда из приведнный выше цитаты говорится, что сравнивается не значение условноеВыражение, а его результат... Это одно и то же? Результат и значение?

Aquahawk
18.12.2011, 15:53
вы можете написать
switch (2+3) {
и сначала будет вычислено 2+3, а потом результат уже будет сравниваться.

Pronoob
18.12.2011, 15:58
а если будет
switch (3) {,

то здесь результат сразу 3? И в данном случае результат сразу является значением?

Aquahawk
18.12.2011, 16:11
да, именно так.
дополнительно могу сказать что если вы сделаете
switch (someObject.someFunction()) {
то вызовется функция у этого объекта один раз, то что она вернёт запомнится и потом будет сравниваться.

goodguy
18.12.2011, 17:50
то здесь результат сразу 3? И в данном случае результат сразу является значением?
По-моему это должно быть очевидно даже для новичка

Wolsh
18.12.2011, 19:15
Отличие товарища Pronoobа от классических местных новичков в том, что он начал свое обучение не с создания MMORPG и даже не с автогонок, а кинулся в другую крайность, пытаясь сначала выучить все слова и правила языка по книге, а потом уже начать "говорить".
Пишите уже что-нибудь, делайте тесты! От этого копания в терминологии у Вас без практики мало что задержится в мозгу.

dimarik
19.12.2011, 00:16
Вообще условноеВыражение сравнивается с Выражение1, только без типизации.

Как вы это сравнение себе представляете?

Например, для обычного equality (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/operators.html#equality) в решебнике записаны оба варианта: когда типы сравниваемых операндов совпадают и не совпадают.
switch (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/statements.html#switch) использует strict equality (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/operators.html#strict_equality), но доки почему-то упоминают об этом косвенно (Связанные элементы API: === (строгое равенство)).