JavaScript, Neo-Generation
Written 4/29/00
14. 条件コンパイル
JScript3 以上では条件コンパイルが使えます。
例えば次のように JScript のバージョンによってコンパイルを変えることができます。
  var str = "ほえほえハッピー";
  /*@cc_on@*/
  /*@if(@_jscript_version >= 3)
      alert(str.slice(1));
      @else@*/
      alert(str.substring(1, str.length));
  /*@end @*/
 
上では元の文字列の先頭の文字だけ削った文字列を表示しています。 JScript3以上なら slice メソッドが使えるのですが、 それより前のバージョンでは代わりにちょっとめんどうな substring メソッドを使います。

条件コンパイルは @cc_on ステートメントがあってはじめて有効になります。
条件コンパイルの文は全てコメント内に書かれます。 コメントは次の形をしていなければならないようです。

  /* … @*/
    または
  //
 
条件コンパイルをサポートしていない場合は、コメント内はすべて無視されます。 すなわち上の例は次と同じことになります。
  var str = "ほえほえハッピー";
  alert(str.substring(1, str.length));
 
条件
条件文は @if で始まって @end で終わります。
  /*@cc_on
  @if(@_win32)
      alert("Win32システムです");
  @end @*/
 
@elif@else を使うこともできます。
  /*@cc_on
  @if(@_mac)
      alert("林檎です");
  @elif(@_win16)
      alert("えらく古い窓です");
  @else
      alert("たぶんふつーの窓です");
  @end @*/
 
条件コンパイル変数
上で使っている @_jscript_version@_win32 は条件コンパイル変数といい、 あらかじめ以下のようなものが用意されています。 意味は変数名そのままです。
  @_win32 @_win16 @_mac
  @_alpha @_x86 @_mc680x0 @_PowerPC
  @_jscript @_jscript_build @_jscript_version
 
上の多くは trueNaN を取ります。
変数の作成
条件コンパイルの中で変数を作ることができます。
  @set @version = 1.1;
  @set @minor_version = (@version % 1);
 
取り得る値は数値とブール値のみです。 上のように演算を行うこともできます。 演算するときはかっこでくくります。
  /*@cc_on
  @set @win = (@_win32 || @_win16);
  @if(@win)
      alert("窓です");
  @else
      alert("林檎です");
  @end
  // …
  @if(@win) {
      //なにか窓なコード
  }
  @else {
      //なにか椎名なコード
  }
  @end @*/
 
Back