【问题标题】:Actionscript 'Object' labeled as a real datastructure for readabilityActionscript 'Object' 标记为真实的数据结构以提高可读性
【发布时间】:2009-10-14 23:42:41
【问题描述】:

所以在 actionscript 3 中,Object 类的实例可以用作关联数组:

var doNotHaveSexWith:Object = new Object();
doNotHaveSexWith['mum'] = new Person(...);
doNotHaveSexWith['dad'] = new Person(...);
doNotHaveSexWith['dave'] = new Person(...);

假设我有一些班级,其中一个成员是一个只读“对象”,其中包含我的人员集合。

我认为如果我返回这个“对象”,代码可读性会受到很大影响,因为程序员怎么知道如何处理它? 有人知道它是一个集合的唯一方法是他们阅读代码或 cmets...

表明一个对象是一个集合而不是一个简单对象的最佳方式是什么?

选项:

  • 创建一个动态类,简单 从 Object 扩展,称为 “AssociativeArray”什么的,就 所以代码变得更具可读性......

  • 使用AS3 Datastructures Library 之类的东西,尽管这样 似乎有点矫枉过正。

  • 只需将单词 Collection 添加到 变量名的结尾?

例如:

var hotPeopleCollection:Object = new Object();
hotPeopleCollection['me'] = new Person(...); 
hotPeopleCollection['sandrasully'] = new Person(...);

你怎么看?

更新:我决定使用扩展字典的自定义类。这样我可以在搜索函数周围包装一个合理的访问函数:hasOwnProperty,并给类一个有意义的名字。

我选择 Dictionary over Object 的原因有两个:

  1. 字典让集合更直观
  2. 字典似乎在 O(1) 时执行搜索。公平地看到这个 非正式dictionary vs array vs object performance benchmark

【问题讨论】:

    标签: actionscript-3 data-structures readability


    【解决方案1】:

    使用字典。

    http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/Dictionary.html

    您仍然可以使用字符串作为密钥,或任何对象。

    var dict:Dictionary = new Dictionary();
    var obj:Object = new Object();
    var key:Object = new Object();
    key.toString = function() { return "key" }
    
    dict[key] = "Letters";
    obj["key"] = "Letters";
    
    dict[key] == "Letters"; // true
    obj["key"] == "Letters"; // true 
    obj[key] == "Letters"; // true because key == "key" is true because key.toString == "key"
    dict["key"] == "Letters"; // false because "key" === key is false
    delete dict[key]; //removes the key
    

    很多开发者(包括我自己)会告诉你:永远不要使用对象。你基本上是在蒙住你的编译器。始终要么使用内置数据类型,要么自己创建。现在显然在这种情况下您不了解字典,但作为一般规则,如果您认为您想使用普通的旧 Object 数据类型,请再考虑一下。

    更新:

    另一个您可能会觉得有用的链接:

    http://www.gskinner.com/blog/archives/2006/07/as3_dictionary.html

    【讨论】:

    • 太好了,正是我需要的,谢谢。是我自己还是 AS3 缺少数据结构?
    • 是和不是。 Flash player 10 带来了向量,这是我唯一缺少的真实数据类型。 ArrayList 是另一个即将推出的东西(我猜它在 flex4 中),它也可以作为重量级 ArrayCollection 的替代品。但在大多数情况下,我需要的其他任何东西都是特定于域的,这意味着我无论如何都需要编写它;)
    • 我不是那些开发人员之一,但我明白你的意思。另一方面,这就像说“不要使用数组”,因为您不知道其中有什么。一个对象一个关联数组。它非常灵活,一切都继承自它。当然,由于您提到的编译器蒙上眼睛,有时会有 性能成本。都在使用中。
    • 好吧,我想说你应该只将相同“类型”的对象放在一个数组中。即使您可以将不同类型的数据放在同一个数组中,您肯定会看到这是一个坏主意。虽然我同意,但很高兴知道数组中有什么。这就是 FP10 中向量的用武之地。不要误会我的意思,有时动态对象会很有用,但这种情况很少见。
    【解决方案2】:

    我会反其道而行之,吐出令人讨厌的动态型立场。只需使用一个对象。它一个关联数组。变量的名称和上下文应该足够清楚。不要让你的代码比它需要的更复杂。如果你认为它应该是一个类,那就让它成为一个类。这是一个简单的地图,使用一个对象。

    没有理由过火。

    【讨论】:

    • 我遇到的问题是接受一个对象作为参数或返回一个对象,并不能直观地了解 wtf 正在发生的事情。我最关心的是可读性和理解力。
    • 你有函数名和变量名。通过“ArrayCollection”也不会告诉我有关该对象的任何信息。你仍然不知道里面有什么。函数式程序员会倾向于一种方式,而 OO 程序员会倾向于另一种方式。这都是偏好。
    猜你喜欢
    • 1970-01-01
    • 2021-01-10
    • 2014-07-11
    • 1970-01-01
    • 2019-12-24
    • 2018-06-13
    • 2018-03-15
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多