JavaScript 2.0
ライブラリ
previousupnext

2003/06/04 (Wed)

定義済み型

JavaScript 2.0 では以下のが定義済みである:

値の集合
Never 値は無い
Void undefined
Null null
Boolean   truefalse
Integer +0.0 、–0.0 、+ 、– 、及び NaN を含む数学的に整数である IEEE 倍精度浮動小数点数
Number +0.0 、–0.0 、+ 、– 、及び NaN を含む IEEE 倍精度浮動小数点数
char  1文字の16ビット Unicode 文字
String null を含む変更不能な Unicode 文字列
Function null を含む全ての関数
Array null を含む全ての配列
Type null を含む全ての型
Object nullundefined を含む全ての値

JavaScript 1.5 とは異なりオブジェクトとプリミティブ値 (単純値) の区別は無く、全ての値がメソッドを持つことができる。クラスの中にはその値が封印されている (sealed) ものもあり、これらには動的プロパティの追加は認められない。ユーザ定義クラスについては final クラス修飾子を使うことでプリミティブ値のような振る舞いを持たせることが可能である。

上に挙げた型名は予約語ではない 。これらはローカル変数やクラスメンバの名前として使用することができる。しかしながらこれらはグローバルスコープで定数として定義されているため、パッケージ内でグローバル変数名として使用することはできない。

Object は全ての型の基底型であり、Never は全ての型の派生型である。Never は、無限ループに落ち込むか常に例外を投げるために通常は値を返さない関数の戻り値の型を記述するのに有用である。Never は変数や仮引数の型には使用できない。Void は、処理を返すことはできるが特に値を返さない関数の戻り値の型を記述するのに有用である。根拠」も見よ。

数値リテラルは Number 型のメンバであり、整数値を保持する場合は Integer 型のメンバでもある。文字列リテラルは String 型のメンバである。char 型のリテラルは存在しない。char 値は明示的、もしくは暗黙の型変換によってのみ作成される。

new f (f は関数) で作成されたオブジェクトは Object 型になる。

ユーザ定義型

class 宣言で定義されたあらゆるクラスもまた、そのクラスと子孫クラスのインスタンスの集合を表す型である。これには定義済みクラスも含まれ ObjectDate なども全て型である。null はユーザ定義クラスのインスタンスである。undefined がユーザ定義クラスのインスタンスになることはない。

型の意味

型は普通、変数に格納できるオブジェクトや関数の実引数として渡すことのできるオブジェクトの集合を制限するのに使用される。例えば次の宣言

var x:Integer;

は、変数 x に格納できる値を整数に制限している。

型宣言は変数の読み取りや、そのプロパティへのアクセスにおけるセマンティクスに影響を与えない。従って、例えば式 new MyType()MyType 型の値を返す限り、以下の2つのコード片は等価である。

var x:MyType = new MyType();
x.foo();
var x = new MyType();
x.foo();

これらのコード片が MyType クラス宣言内に書かれ、foo がそのクラスの非公開フィールドである場合でも、この等価性は常に成り立つ。当然、本当の型を注釈として追加してもプログラムの意味は変わらない。

型式

JavaScript 2.0 では型式と値式を構文的に区別しない。そのため型式は型として評価されるコンパイル時定数であれば何でも良い。

型は値でもあり (その型は Type)、式中での使用、変数への代入、関数へ渡すことなどが可能である。例えば次のコードは、

const R:Type = Number;
function abs_val(x:R):R {
  return x<0 ? -x : x;
}

以下と等価である:

function abs_val(x:Number):Number {
  return x<0 ? -x : x;
}

暗黙の強制型変換

暗黙の強制型変換は以下のような状況で起こり得る:

いずれの場合でも、v t であれば v の変換は起こらない。v t であれば、t が値 v について暗黙の型変換マッピングを定義している場合に限ってマップされた v が使用される。それ以外の場合はエラーになる。

明示的な強制型変換

明示的な強制型変換は暗黙のそれに比べてより積極的な型変換を行う。明示的な強制型変換を行うには、型を関数として使用し、変換する値を引数として渡す:

type(value)

例えば Integer(258.1) は整数 258 を返し、String(2+2==4) は文字列 "true" を返す。

value が既に type のメンバであれば、明示的な強制型変換は value を変換せずに返す。valuetype に暗黙の強制型変換可能であれば、暗黙の強制型変換の結果を返す。それ以外の場合は type明示的型変換マッピングが使用される。


Waldemar Horwat
最終更新: 2003年6月4日 (水)
previousupnext
訳者: exeal <exeal@student.interq.or.jp>
このドキュメントのオリジナルは mozilla.org において英語で公布されています。
この和訳は、利用者の利便のために Mozilla Japan 翻訳部門 によって提供されています。
内容に関してご不明な点がありましたら webmaster までお問い合わせください。