FlashDevelopのコード補完機能
FlashDevelop3 beta6が大変便利なので便利なところを自分なりにまとめてみました。
第一弾は下記です。(他にもあるので続くと思います)
「Ctrl+Shift+1」の便利さって?
あちらこちらでよく目にするんですけどどう便利なのか具体的に書いてなくてしばらく便利さに気づきませんでした。
ですので、具体的に書いておこうと思います。
概要
いったい何かを一言で言うとコード入力補完機能です。
どういった補完をしてくれるのかは下記。
未定義の変数をフィールドに追加
class Hoge { public function Hoge() { _foo:Number = 0; | // ←カーソル今ここ } }
この状態でCtrl+Shift+1を押すと
Hoge{ private var _foo:Number | // ←!! public function Hoge() { _foo:Number = 0; } }
という具合に、プライベートメンバを自動で定義してくれる。
インスタンスプロパティのセッターゲッターを自動生成
さらに、その定義されたメンバの行でCtrl+Shift+1を押すと
- Generate Setter & Getter
- Generate Setter
- Generate Getter
というツールチップが出てくるので好きなのを選ぶと
class Hoge { private var _foo:Numbe; public function Hoge() { _foo:Number = 0;//←ここはあとで直す } public function set foo( value:Number ):void { _foo = value; } public function get foo():Number{ return _foo; } }
自動でセッター&ゲッター(もしくはどちらか)を挿入してくれます。型を定義していれば引数などの型宣言も引き継いでくれます。
この際、変数名のアンダーバー(_)を自動的にはずすしてくれるので、このコンボを利用するには変数宣言の時点でアンダーバーをつけた名前で定義する必要があります。
未定義のメソッドを自動生成
変数ができるのであれば、当然関数も補完したくなったので、やってっみました。
class Hoge { private var _foo:Number; public function Hoge() { _foo = 0; init(); | // ←今ここ } public function set foo( value:Number ):void { _foo = value; } public function get foo():Number{ return _foo; } }
ここでCtrl+Shift+1を押すと、当然次のようにプライベートメソッドが定義される。
(private固定なのがちょっとあれだけど。)
class Hoge { private var _foo:Number; public function Hoge() { _foo = 0; init(); } private function init(|):Void{ } public function set foo( value:Number ):void { _foo = value; } public function get foo():Number{ return _foo; } }
ただし、返り値の型指定とか引数も同時定義はできないみたいです。
イベントハンドら自動生成
また、さらに便利なことにイベントハンドラも未定義なものは補完できます。
import flash.events.Event; class Hoge { private var _foo:Number; public function Hoge() { _foo = 0; init(); } private function init():Void{ addEventListener( MouseEvent.CLICK, onClickHandler| ); // ←今ここ } public function set foo( value:Number ):void { _foo = value; } public function get foo():Number{ return _foo; } }
ここでCtrl+Shift+1すると継承されてるイベントが選択肢としてリストアップされ、
- Generate MouseEvent Handler
- Generate EventHandler
任意で選ぶと次のようになります。
import flash.events.Event; class Hoge { private var _foo:Number; public function Hoge() { _foo = 0; init(); } private function init():Void{ addEventListener( MouseEvent.CLICK, onClickHandler| ); } public function onClickHandler( e:MouseEvent ){ | // ←今ここ } public function set foo( value:Number ):void { _foo = value; } public function get foo():Number{ return _foo; } }
こんな感じで受け取るイベントインスタンスを引数定義までしてくれる。
上記はAS3の結果なのでAS2では勝手が違うと思いますが、それでも相当効率よくコードがかけるのでですのでぜひおためしください。
ところで余談ですが
余談ですが、実際に便利さを享受するかどうかはともかく、面白い、便利といわれているものを、一度は自分でやってみて体験としておく作業は、ものづくりをする人間としては大切だとおもいました。
自分で使わなくても、あるシチュエーションでは便利なわけです。そういった状況と解決策を想像するのはとても勉強になるので、なんでこの機能ができたのか、とか、自分にとって不自由な制限も何か意図があるのかなと考えるようにしています。