JScript.NET  新JavaScript入門  JavaScript,Neo-Generation  DOM  WSH  掲示板  表紙
はじめのいっぽ  配列 
Written 5/6/03
Last Updated 5/19/03
JScript.NET
データ型
整数型
整数型にはデータの大きさに応じて4つの種類があります。
データサイズ数値の範囲
sbyte1バイト-128〜127
short2バイト-32768〜32767
int4バイト-231〜231-1
long8バイト-263〜263-1
intは約-21億〜21億、 longは約-9×1018〜9×1018 です。
それぞれには符号なし型があります。
データサイズ数値の範囲
byte1バイト0〜255
ushort2バイト0〜65535
uint4バイト0〜232-1
ulong8バイト0〜264-1
uintは0〜約42億、 ulongは0〜約1.8×1019 です。
十進数型
decimalは、符号部、指数部と整数部を有します。 整数部だけで12バイトを使います。すなわち、
    12 * 8 * log102 = 28.8988...
    100.8988 = 7.921...
 
だからとりうる値の範囲は、約-8×1028〜8×1028 です。
指数部は、これを割る10のべきを指定します。 割るのは100〜1028です。 すなわち、表しうる最も小さい正の数は10-28です。
    decimal.js
    ---------------------------------------------
    var a : decimal = 1;
    while(a > 0) {            //0になったら抜ける
        print(a.ToString("E"));  //指数表示で出力
        a /= 10;
    }
 
上のプログラムは 1から順に一桁ずつ小さくなっていく数値を標準出力するプログラムです。 最後は、1.000000E-028と表示されて終ります。
このdecimal は大きな数字を扱いたいけど丸め誤差を発生させたくない、 経理ソフトなどに使うために用意されたものです。
浮動小数点数型
ふつうに、 floatdoubleがあります。 それぞれ、4、8バイトです。 doubleと同じもので Numberというものも用意されています。 従来バージョンとの互換性のためでしょう。
オーバーフロー
整数型と十進数型はオーバーフローすると例外が発生します。
    overflow.js
    ---------------------------------------------------------
    var a : int = 0x7fffffff;  //intの最大値
    try {
        print(a);
        print(++a);            //オーバーフローで例外発生
    }
    catch(e : System.OverflowException) {    //例外を捕らえる
        print(e.Message);
    }
 
catch以下は今のところあまり気にしないでください。
浮動小数点数型ではオーバーフローではなくInfinityになります。
    overflow2.js
    ---------------------------------------------------------
    var a : float = 1.0;
    try {
        while(a < Infinity)   //約3.4e+38を超えるとInfinity
            print(a *= 10);
    }
    catch(e : System.OverflowException) {    //ここには来ない
        print(e.Message);
    }
 
10倍ずつしていくと、いつかInfinity(無限)になります。
文字型
charはUnicode 1文字を表します。
    char.js
    ---------------------------------------------------------
    var a : char;
    a = 'a';    //シングルクォートでも
    print(a);
    a = "a";    //ダブルクォートでも同じ
    print(a);
    a = "命";   //2バイト文字も
    print(a);
    a = 0x31;   //整数は自動変換
    print(a);   //1
    a += 16;    //これも自動変換
    print(a);   //A
 
charは内部的には2バイトの整数ですが、 printすると文字が表示されます。
ブール型
booleantrueまたは falseの値をとります。
参照型
StringArrayDateといった従来からのオブジェクト型も残されています。
型キャスト
前のページでも使ってましたが、 次のように型キャストします。
    var a : uint = 3;     //uint型
    var b : int;          //int型で宣言
    b = int(a);           //intにキャスト
 
列挙型
次のように列挙型を定義できます。
    enum Program {
        News, Music, Anime, Drama, Sports, Variety
    }
 
型の名前がProgramで、 News, Music, ...というメンバを持ちます。
これを次のように使います。
    var a : Program;
    a = Program.Anime;
    print(String(a));   //Anime
    print(int(a));      //2
 
文字列型にキャストするとメンバ名になります (この場合、実際には明示的にキャストする必要はない)。
列挙型には『基となるデータ型』というものがあり、デフォルトではintになります。 そして、メンバの値はデフォルトで最初から0, 1, ...となります。
列挙型にはこのデータを入力してもよいです。
    var b : Program = 1;
    print(b);           //Music
 
『基となるデータ型』は、整数型を使うことができます。 そしてこのデータは次のように定義することができます。
    enum Musume : long {      //long型
        Mame = 5738494866,
        Ai = 4251485060,
        Nono = 4578515124
    }
    
    print(int(Musume.Nono));  //4578515124
 
この定義を省略した場合は、最初のメンバは0、それ以外は(前の値)+1です。
    enum ClassA {
        Asami,          //0
        Kemeko = -1,
        Kaori,          //0
        Makoto          //1
    }
 
演算
C/C++と違う演算はこんな感じです。
    var a : double = 1 / 3;
    print(a);               //0.33333...
    print(++a);             //1.33333...
    print(--a);             //0.33333...
    print(3.1 % 1.6);       //1.5
 
演算はスクリプトらしさを残しています。
prev, next, exit