kagamihogeの日記

kagamihogeの日記です。

Flex でテーブル駆動方式なコードを書く

入力されたキーで分岐して何か処理させたいとかそんな感じのコードを書きたい場合。swtich で分岐してもいいんだけど、配列使ってやると switch 使わずに書ける。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" applicationComplete="init()">
    <mx:Script>
        <![CDATA[
            private var methodTable:Object = new Object;
            private function init():void {
                methodTable["a"] = function():void {trace("a pressed");}
                methodTable["b"] = function():void {trace("b pressed");}
                methodTable["c"] = cPressed;
            }
        
            private function doKeyUp(event:KeyboardEvent):void {
                var charCode:String = String.fromCharCode(event.charCode)
                if (methodTable.hasOwnProperty(charCode)) {
                    methodTable[charCode](event);
                }
            }
            
            private function cPressed(event:KeyboardEvent):void {
                trace("c pressed" + event);
            }
        ]]>
    </mx:Script>
        
    <mx:TextInput id="textInputA" keyUp="doKeyUp(event)" />
</mx:Application>

CODE COMPLETE 第2版 上 でテーブル駆動方式って名前で紹介されてるやりかたです。利点は if 文使わずに分岐構造を表現できることですな。AS は(Java に比べると)関数の扱い方が柔軟なんでこういうコード書きたい場合は柔軟で良いですなぁ。