JavaScript、ActionScript 3.0、Cの変数や関数の宣言方法

少し間が空いてしまいました><

JavaScripterがCを始めた。の続きです。

型指定の文法に着目して、JS・AS3.0・Cの変数宣言(+初期化)を見比べてみる。

まず、JavaScriptから。
var x;
x = 100;

var y = 1.23;

var文によって、整数だろうが、浮動小数点付きの実数だろうが(オブジェクトだろうが)、お構いなしに代入できる変数が宣言されています。
ブラウザ上で実行される場合、これらの変数の実体は、windowで参照されるグローバルオブジェクトのプロパティです。

次、ActionScript 3.0。
var x:int;
x = 100;

var y:Number = 1.23;

JavaScriptに似ていますが、変数の後に型注釈がついています。
これによって、数値であるはずの変数が知らないうちに文字列になっていたり…ということが無くなります。

そして、C。
int x;
x = 100;

double y = 1.23;

こうしてみると、AS3.0よりシンプルですね。
AS3.0で変数の後に付いていた型注釈が前に出てきて、それがそのまま変数宣言となっています。

同じく、JS・AS3.0・Cの関数定義を見比べてみる。

それぞれ受け取った引数(整数)を3で割った数を返すシンプルな関数を定義してみます。

まず、JavaScriptから。
function f(z) {
	return z / 3;
}

function文によって、仮引数がzの関数fを定義していますが、zが整数であるべきということは仮引数の部分では制限できません。
zは整数でない数かも知れないし、文字列である可能性さえあります。

実数である場合はそのまま計算して返しますし、他の型である場合は自動的に型変換して計算後、値を返します。
返す値についても制限できません。

例えば、文字列を受け取った場合、除算をする段階で数値に型変換します。
変換結果が数値として有効なものでない場合にはNaNとなり、結局NaNを3で割った結果NaNが返ることになります。

次、ActionScript 3.0。
function f(z:int):Number {
	return z / 3;
}

変数の場合と同じように、JavaScriptの関数定義に、型注釈が付いた形です。
これによって、整数でない値が渡されそうになった時点できちんとエラーとして処理されます。

注意すべきは、仮引数の型名(int)だけでなく、「戻り値の型名」(Number)についても記述出来る(する必要がある)ことです。
自分がAS3.0を始めた頃は、この点で躓きました。

そして、C。
double f(int z) {
	return z / 3;
}

これまたシンプルです。

仮引数の部分は変数の場合と同様、型名が前に出てきています。

さらに、AS3.0では関数本体のブロックの直前("{"の前)にあった「戻り値の型名」も、先頭に来ていますね。

まとめ

Cって、シンプル!!

とりあえず、今回は記法の段階で躓く事はなさそうです。><