12 ноября 2011

Object vs. Dictionary!!!

Многие из разработчиков обычно мало задумываются над тем в чем же состои разница между этими двумя типами данных в actionscript 3.0.
На самом деле различия не такие уж и тайные и непонятные.
Самое главное различие в этих двух типах это то что в типе Object ключом может быть только String, пример:

var str:String = 'text';
var obj:Object = new Object();
obj[str] = some target;

Но большинство обычно скажут что это не все и можно сделать еще и так:
var spr:Sprite = new Sprite;
var obj:Object = new Object();
obj[spr] = some target;

Да действительно, такое написание будет работать, но оно будет эквивалентно:
obj[spr.toString()] = some target;

так что ключь Object может быть только String.
В противовес этого в Dictionary ключом может быть любой объект не теряя своих свойств и методов.
Для подтверждения можно провести эксперимент:
package
{
import flash.display.Sprite;
import flash.utils.Dictionary;
public class Main extends Sprite
{
  public function Main()
  {
  //рисуем Sprite
    var spr:Sprite = new Sprite;
    spr.graphics.beginFill(0,1);
    spr.graphics.drawRect(0,0,100,100);
    spr.graphics.endFill();
    addChild(spr); //добавляем Sprite в список видимости
    
    var obj:Dictionary = new Dictionary();
    obj[spr] = 1;
    for(var f:* in obj)
      f.visible = false; 
      //используем ключ как ссылку на Sprite и все работает, он становится невидимым
  }
}
}
 
А теперь тоже самое но только с Object:

package
{
import flash.display.Sprite;
import flash.text.TextField;
public class Main extends Sprite
{
  public function Main()
  {
    var spr:Sprite = new Sprite;
    spr.graphics.beginFill(0,1);
    spr.graphics.drawRect(0,0,100,100);
    spr.graphics.endFill();
    addChild(spr);
    
    var obj:Object = new Object();
    obj[spr] = 1;
    for(var f:* in obj)
      f.visible = false;
      // будет ошибка ReferenceError: Error #1056: Не удается создать свойство visible в String.
  }
}
}

Как мы можем видеть Dictionary гораздо функциональнее, осталось проверить производительность....

Комментариев нет:

Отправить комментарий

Поделиться своими мыслями...