Haxeの通常のswitch文は以下のようになります。
var colorName = "赤";
var num = switch( colorName ) {
case "red", "赤": 0xFF0000;
case "green", "緑": 0x00FF00;
case "blue", "青": 0x0000FF;
case "うぐいす": 0x928C36;
default:
throw "そんな色知らないよ!";
}
「break;」がない、caseが複数指定出来る、値を返すというのが特徴です。
これだけでも便利なんですがさらに便利なのはEnum(列挙型)を使った時です。
#Enumとは
Enumは、AS3でいうところのイベント定数やキーコード定数のような実装を行うときに使われるデータ型です。
以下のように使います。
Main.hx
enum Keyboard {
UP;
DOWN;
LEFT;
RIGHT;
Number( num:Int );
Alphabet( charString:String );
}
class Main {
static function main() {
getKeyCode( Keyboard.UP ); //38
getKeyCode( Keyboard.Alphabet( "A" ) ); //65
getKeyCode( Keyboard.Alphabet( "z" ) ); //90
getKeyCode( Keyboard.Number( 1 ) ); //49
}
static function getKeyCode( key:Keyboard ) {
switch( key ) {
case LEFT:
return 37;
case UP:
return 38;
case RIGHT:
return 39;
case DOWN:
return 40;
case Alphabet( char ):
if ( char.length != 1 ) throw "charStringの長さは1でなければなりません";
char = char.toUpperCase();
var code = char.charCodeAt( 0 );
if ( code < 65 || 90 < code ) throw "文字列がアルファベットじゃありません";
return code;
case Number( n ):
if ( n < 0 || 9 < n ) throw "0~9を指定してください";
return n + 48;
}
}
}
HaxeのEnumは変数を指定できるのが特徴で、これをswitch文により取りだすことができます。
Enumに複数の変数を指定することも可能です。
enum Sample {
TEST( i:Int, s:String );
}
追記:
Haxe3になって、switch文はさらに便利になりました。
詳しくは、パターンマッチング - Haxe