>

2010年2月18日木曜日

Windows上のFlex SDK(Flex Builder)でASDocがうまく作成されない件

WindowsでASDocを作成しようとすると

Error: could not find a JVM.

と怒られる場合は
C:\Program Files\Adobe\Flex Builder 3 Plug-in\sdks\3.2.0\bin\jvm.config
にあるjava.homeの項目を次のように編集する。

java.home=/Program Files/Java/jre1.6.0_07

上記は僕のJVMのインストールフォルダだが要するにC:\...のような形式ではなく/から始まる形式にする。通常はC:\が/に対応する。

2010年2月17日水曜日

ActionScriptのメンバ変数の命名では頭に_をつけるべきか

メンバ変数の名前の先頭にはアンダーバーをつけるべきかどうか。

FlexBuider 3を使用した場合、Javaエディタと異なり、ActionScriptではメンバ変数のフォント色を自動的に変えてくれないため一目で見分けがつかない。
この解決方法として命名規則とかでプレフィックスとしてアンダーバーをつけてこれを解決することは妥当なのか考える。

一目で見分けがつかない不便さの解消方法としては_とかをつける他には全ての参照箇所でthis.をつける方法があるがこの方法と比較してみる。

1)this.は参照箇所すべてに付ける必要があり、コーディング規約としては抜けなく守るのが難しい
2)次のようなコードではthis.はHogeインスタンスを示さないので逆にthis.をつけてはならない。こうなるとthis.がついたりつかなかったりで混乱を招く

public class Hoge
{
 var private myMemberStr:String = null;

 public function AlbumManager(albumUrl:String)
 {
  var proc:MyProcedure = new MyProcedure();
  proc.execute();

  proc.addEventListener(Event.COMPLETE, function(event:ResultEvent):void{
   //ここでthis.を入力するとFlexBuilder3のオートコンプリートではmyMemberStrが
   //候補として表示されるがこれはバグ。
   //この行が終わってもHogeインスタンスのmyMemberStrはnullのまま。this.をつけなければ
   //意図したとおりにHogeインスタンスのmyMemberStrにevent.resultが代入される。
   this.myMemberStr = event.result as String;
  });
 }
}


以上より全ての参照箇所でthis.をつける方法は危険。よって_をつけるのは妥当である。
なお、基本的には_をつけたメンバ変数は基本的にはprivateにし、アクセスにはgetter, setterを使う。getter, setterでアクセスする際は_はつけない方がかっこいいのではないかと思う。(というか普通そうなのかもしれないが。)

//例
//メンバ変数名には頭に_をつける
private var _myMemberStr:String;

//関数名には_はつけない
public function myMemberStr ():String{
 return _myMemberStr;
}


結論として
ActionScriptのメンバ変数の命名では頭に_をつける。メンバ変数はprivateとしてそれにアクセスする際にはgetter, setterを用いる。getter, setterの関数名には_はつけない。