トップ » 技術記事 » クライアント(ブラウザ)もサーバも同一言語で書ける haXe を使ってみる(4) - 少し文法を掘り下げる

クライアント(ブラウザ)もサーバも同一言語で書ける haXe を使ってみる(4) - 少し文法を掘り下げる はてなブックマーク数 このエントリーをブックマークに追加

どうも、あかさたです。前回haXe の基本的な文法を紹介しました。今回は、もう少しだけマニアックな部分を見ていきたいと思います。

概要

前回の記事では「クラスの定義」「インスタンスの生成」「基本的な型」「制御構文」「オブジェクト指向プログラミング」について触れました。haXe は ActionScript3 や Java と似ていますが、細かいところの違いが、開発上の障壁となる場合もあります。今回は、haXe を開発に利用する場合、知っておいた方がよいと思われる文法の詳細を紹介します。

詳細な文法

パッケージについて

前回触れ損なってしまったのですが、haXe には ActionScript3 や Java のようなパッケージがあります。Java 風のパッケージ構造で、フォルダ構造に対応してファイルを配置します。「my.pack.C」であれば「my/pack/C.hx」というように配置します。

// パッケージの宣言
package my.pack;

// クラスのインポート
// 型を直接指定する
// ワイルドカード(*)は使えない
import my.pack.C;
オプショナル引数

引数の前に ? をつけると、オプショナル引数(省略可能な引数)にすることができます。オプショナル引数は省略した場合、その引数は undefined として扱われます。

function hoge( ?x : Int ) {
}

undefined をどのように扱うのかわからないのですが、言語リファレンスにも記述はありません。比較時には undefined な引数は null として取り扱うことができました。trace 関数は、両者を分けて取り扱います。

型推論と untyped

haXe で書かれたコードを見ていると、変数の宣言時などに型を書いたり書かなかったりしていることに気づくかもしれません。haXe には型推論が搭載されています。型推論とは、変数や関数の型を宣言していなくても、コンパイラがコードからその型を推測する機能を指します。

var num = 0; // コンパイラは整数型に推測する

動的型言語に慣れると、型の指定を煩わしく感じるものですが(特に ActionScript3 など)、haXe ではその煩わしさは型推論によって軽減されます。もちろん、型を明示的に指定してやることで、明確なコードを記述することもできます。

次回以降で詳しく見ていく予定ですが、haXe で JavaScript クライアントを開発する場合などは、必ずしもコンパイラによる型チェックがありがたいとは限りません。untyped で囲ってやることで、コンパイラの型チェックを回避することもできます。

untyped {
	// 処理
}

ただ、私は基本的には型チェックがあることは haXe の利点と考えているので、積極的に untyped を使用すべきではないと考えています。

クロージャ

JavaScript と似たような形式でクロージャを記述することができます。以下のような書式になります。

var funcData = 200;
func = function() {
	trace("do func: " + funcData);
}
func();
制御構造は式として定義されている

haXe では、制御構造は式として定義されています。(この辺は C 系の言語というよりは、Ruby のようですね。)たとえば、if 文も値を返しますので、以下のような記述が可能になります。

// 5 が返される
trace(if (true) 5);

// 10 が返される
trace(if (false) 5 else 10);

// null が返される
trace(if (false) 5);

// null が返される
trace(if (true){ var a : Int = 5; } );

// a が返される
trace(if (true){
	var a : Int = 5;
	a;
} );

for 文 の例も見てみましょう。以下の例はコンパイルすることができません。ここは Ruby とは異なるようです。haXe の言語リファレンスではループも式で括られていますが、実際の取り扱いは異なるのかもしれません。

// コンパイルすることができない
trace(for (i in 0..2){
	i;
});

Ruby であれば、ループは nil(null)を返す式です。(break に引数を与えることで、戻り値を指定することもできます。)個人的な感想としては haXe は型推論やダイナミックな型を取り扱えるようにしているあたり、流行の思想を取り入れている言語といえますが、Ruby のように極端というわけでもないようです。

まとめ

以上で haXe の文法解説は終わりです。こうしてみてみると、入り口は ActionScript3 や Java に似ている言語として敷居を下げていますが、プログラミング言語としてのユーザビリティをあげるために様々な工夫をしていることがわかります。本記事では、Dynamic 型の詳細やイテレータについては触れられなかったので、興味のある方は haXe の言語リファレンスを参照してください。

次回からは実際に haXe で Flash や JavaScript クライアントを開発してみたいと思います。それでは!

Series NavigationhaXe と JavaScript ライブラリ「ExtJS」を連携させてみる»

このサイトについて

八角研究所
株式会社八角研究所のWEBサイトですよー。 いろんなものを創り出すことのできる環境をコツコツ構築中。 いったい、いつになったらできるのか。 この技術情報サイトもそのための活動の一環のつもり。

執筆者紹介

あかさた

あかさた

未踏(2006年度下期)でWeb上で動作するモデリング環境 Kodougu の開発をしてました。こちらでもブログを書いています。

TrackBack URL :