AS3 最 in 的寫法

In flex   December 7, 2007 - 8:30 pm

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 也是要有技巧的,不是直接從第一行看到尾,這樣很容易入寶山還是空手回,比較好的方式是先有一個目標,然後進去挖,再搭配一些小技巧,收穫就會比較多(而且比較有效率…)。

by admin

1 Comment Add your own

  • 1. bjack&hellip  |  December 10th, 2007 at 10:44 am

    又多學一招了!的確,看Source Code可以提升自己的程式撰寫技巧,把別人的東西偷過來變成自己的,這都是心路歷程啊!只是都沒有好好想想「對方腦中的思路」,哈!不過,經由老師的後記,也偷了一招,也該好好思考一下,希望不會太晚!

留言回應

hidden

您的留言會先經過站長認証後才刊登在網站上。
your comments will be approved by Administrator before appearing on the page.

Trackback this post  |  Subscribe to the comments via RSS Feed

mobile phone