Haxe

Haxeはswitch文が便利

More than 5 years have passed since last update.

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