Форум Flasher.ru

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

inozemcev 08.12.2010 19:30

оператор switch при проверке типа
 
Допустим есть такой код

Код AS3:

function getDefinition (object:DisplayObject) :String
{
    if (object is Sprite) return 'sprite'
    else if (object is MovieClip) return 'movieclip'
    else if (object is TextField) return 'textField'
    else return 'uknown type' 
}

Возможно ли в этом случае вместо конструкций if/else использовать switch

p.s (к примеру прошу не придираться, главная сложность в примере заключается в том, что при таком синтаксисе :

Код AS3:

switch (object) 
{
    case is Sprite : ...
}

подсвечивает как ошибку)

Psycho Tiger 08.12.2010 19:39

Нет, с is никак.

iNils 08.12.2010 19:39

Код AS3:

switch (true) {
        case object is Sprite://{ /
                break;
        //}
        case object is MovieClip://{ /
                break;
        //}
        case object is TextField://{ /
                break;
        //}
        default :
}


Psycho Tiger 08.12.2010 20:02

iNils, это уже высосано из пальца)

inozemcev 08.12.2010 20:04

А что будет быстрее ?! ))

iNils 08.12.2010 20:15

inozemcev, они одинаковы, но case выглядит читабельнее.

inozemcev 09.12.2010 18:09

благодарю

nOobCrafter 10.12.2010 01:27

по идее еще можно typeOf проверять ;) но я делал как написал тов. iNils

Psycho Tiger 10.12.2010 01:30

typeof даст object слишком часто.
На самом деле switch(true) считаю немного "кривой" конструкцией, сродни if (a===true). По мне switch — когда надо перебирать возможные значения какой-либо переменной. Тут наверное со мной многие не согласятся, но вот так.

ZergMaster 10.12.2010 01:42

а можно ещё так:
Код AS3:

swith (getQualifiedClassName(object)) 
{
        case Sprite:
        break;
 
        case MovieClip:
        break;
 
        case TextField:
        break;
}

=))

Котяра 10.12.2010 03:06

тогда уж
Код AS3:

swith (getDefinitionByName(getQualifiedClassName(object))) 
{
      case Sprite:
        break;
 
        case MovieClip:
        break;
 
        case TextField:
        break;
 
}

Только не надо забывать, что тут будет логика отличная от варианта iNils.
Потому, что ключ в его случае может быть как спрайтом так и мувиклипом, а в моём случае он скорей всего будет его наследником (если object символ из либы).
Тут на помощь приходит.
getQualifiedSuperclassName )
В общем, эти нюансы надо учесть.

zuxul 10.12.2010 10:18

Нужно в "case" классы расставить от наследников к базовым классом, но на самом деле, с "if"-ами такая же ситуация.


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

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