AS3 最 in 的寫法
Well, ok, pun intended.
問題:
你想知道在某個物件(假設是 btn )中是否有一個名為 ‘title’ 的屬性,該怎麼做?
解法:
基本上這個問題有很多種可能解法,常見的有
1、用 try/catch block 去探測 if( btn['title'] ) 如果回傳 false 就知道不存在
2、用 describeType 之類的 object utility 透過 reflection 知道物件的結構
但這種做法各有不同的爛法。
第1種做法會讓程式碼變的很不優雅,要一大堆 try/catch block。
第2種做法更麻煩,只為了找一個屬性,要把全部的東西都 dump 出來。
正解:
前幾天在翻 air 的 source code,意外發現下面這種寫法
if( ‘title’ in btn ){…}
他/她 直接用 in 就可以探測出 btn 中是否有某個物件,而且不需要 try/catch。
以往 in 都是用在 for in loop這樣的情境中,從來不知道也可以這樣玩,所以當初一看到可真是驚為天人。
後來翻了一下手冊才發現在 language elements 那章就明明白白有講啊,是自已白目沒認真看…
後記:
這件事告讓我們,沒事多讀 framework source code 絕對好處多多,每次我在看的時後,都覺得就在跟 adobe 的工程師對話,邊看邊想像他寫作時腦中的思路,為何他要做這個決定?為何這樣設計?為何寫這段code ?他有試過其它的方式嗎?是不有有其它限制?
不過看 code 也是要有技巧的,不是直接從第一行看到尾,這樣很容易入寶山還是空手回,比較好的方式是先有一個目標,然後進去挖,再搭配一些小技巧,收穫就會比較多(而且比較有效率…)。


1 Comment Add your own
1. bjack&hellip | December 10th, 2007 at 10:44 am
又多學一招了!的確,看Source Code可以提升自己的程式撰寫技巧,把別人的東西偷過來變成自己的,這都是心路歷程啊!只是都沒有好好想想「對方腦中的思路」,哈!不過,經由老師的後記,也偷了一招,也該好好思考一下,希望不會太晚!
Trackback this post | Subscribe to the comments via RSS Feed