Microsoft® JScript
関数
チュートリアル  


関数とは
Microsoft JScript の関数は、何らかの処理を実行して結果を返すことができます。関数の結果は、数値計算や比較演算の結果の場合もあります。

関数とは、複数の処理がまとめられ、1 つの名前が付けられたものです。関数を使用すると、コードを簡素化することができます。一連のステートメントを記述してそれに名前を付けておくと、必要な情報を渡して関数を呼び出すだけで、いつでも一連のステートメント全体をまとめて実行することができます。

関数に情報を渡す場合は、渡す情報を関数の名前の後ろにかっこで囲んで指定します。関数に渡される情報は、引数またはパラメータと呼ばれます。関数には、引数をまったく必要としないものがあります。また 1 つだけ引数を必要とするものや複数の引数を必要とするものもあります。また、用途に応じて引数の数が変わる関数もあります。

JScript では、あらかじめ言語に組み込まれている関数と、プログラマが自分で作成する関数の 2 種類がサポートされています。

特別に用意された組み込み関数
JScript 言語には、いくつかの組み込み関数が用意されています。その中には、式や特殊文字を扱える関数、および文字列を数値に変換する関数があります。

たとえば、escape() 関数や unescape() 関数を使用すると、HTML コードで特別な意味を持つためにテキストに直接指定することができない文字を変換することができます。たとえば、山形かっこの "<" および ">" は、HTML タグを囲むのに使用される特殊文字です。

このような特殊文字を引数に指定すると、escape 関数は、その文字を表すエスケープ コードを返します。この関数が返すエスケープ コードは、パーセント記号 (%) とその後ろの 2 桁の数字です。unescape 関数は、逆の処理を行います。引数としてパーセント記号と 2 桁の数字の文字列を指定すると、その数値が表す文字を返します。

このほかに、便利な組み込み関数として、eval() があります。この関数は、文字列形式で表されている有効な数式を評価し、その値を返します。eval() 関数では、引数に評価する式を 1 つ指定します。

var anExpression = "6 * 9 % 7";
var total = eval(anExpression);        // 変数 total に 5 の値が代入されます。
var yetAnotherExpression = "6 * (9 % 7)";
total = eval(yetAnotherExpression)     // 変数 total に 12 の値が代入されます。

var totality = eval("大量の貝...");     // エラーが発生します。
これらの関数およびその他の関数の詳細については、「チュートリアル」を参照してください。

独自の関数の作成
JScript では、独自の関数を作成し、必要に応じて使用することができます。関数を定義するには、1 つの関数ステートメントと、一連の JScript ステートメントによるブロックを記述します。

次の例に示す checkTriplet 関数では、引数として三角形の 3 つの辺の長さを指定します。指定した数値がピタゴラスの三平方の定理を満たしているかどうかを調べることにより、その三角形が直角三角形かどうかを評価します (直角三角形の斜辺の長さの 2 乗は、ほかの 2 つの辺の長さの 2 乗の和に等しくなります)。checkTriplet 関数は、直角三角形かどうかを評価するときに、ほかの 2 つの関数のいずれかを呼び出します。

浮動小数点数版の評価では、評価変数として非常に小さい数値 ("epsilon") を使用している点に注目してください。浮動小数点数の計算では、丸め誤差によって正しい結果が得られない場合があります。したがって、指定された 3 つの数値のいずれかが整数ではない場合には、斜辺の 2 乗と他の 2 つの辺の 2 乗の和を直接比較しても正しい結果が得られない可能性があります。ただし、直接比較した方がより正確に直角三角形であることを確認できるため、この例のコードでは、まず直接比較することが適切かどうかを調べ、適切であれば直接比較する方法を使用しています。

var epsilon = 0.0000000000001;  // 浮動小数点数の計算に使用する非常に小さい数値。
var triplet = false;

function integerCheck(a, b, c)  {  // 整数用の評価関数。
    if ( (a*a) == ((b*b) + (c*c)) )  {  // 評価部分。
    triplet = true;
    }
}  // 整数用の評価関数終わり。

function floatCheck(a, b, c)  {  // 浮動小数点数用の評価関数。
var theCheck = ((a*a) - ((b*b) + (c*c)))  // 評価する値を作成します。
    if (theCheck < 0)  {  // 評価する値は絶対値でなくてはならないため、theCheck が負の場合は符号を反転させます。
    theCheck *= -1;
    }
    if (epsilon > theCheck)  {  // 値が十分小さければ、ほぼ直角三角形であるといえます。
    triplet = true;
    }
}  // 浮動小数点数用の評価関数終わり。


function checkTriplet(a, b, c)  {  // 三角形チェック関数。まず、最も長い辺を "a" にします。
var d = 0;  // 一時的に数値を格納する変数を作成します。
    if (c > b)  {  // c > b の場合は、b と c を入れ替えます。
    d = c;
    c = b;
    b = d;
    }  // c > b でない場合は、無視します。
    if (b > a)  {  // b > a の場合は、a と b を入れ替えます。
    d = b;
    b = a;
    a = d;
    }  // b > a でない場合は、無視します。

// これで、辺 "a" が 1 番長い辺 (直角三角形の場合なら斜辺) になりました。

    if (((a%1) == 0) && ((b%1) == 0) && ((c%1) == 0))  {  // 3 つの数値すべてが整数であるかどうかを調べます。
    integerCheck(a, b, c);  // 3 つとも整数であれば、正確な評価を行います。
    }
    else
        floatCheck(a, b, c);  // 浮動小数点数がある場合は、適切な範囲内で可能な限り正確な評価を行います。
}  // 三角形チェック関数の終わり。


// 次の 3 つのステートメントでは、関数をテストするために単純な値を変数に代入します。
var sideA = 5;
var sideB = 5;
var sideC = Math.sqrt(50);

checkTriplet(sideA, sideB, sideC);  // 関数を呼び出します。呼び出した後は、変数 triplet に結果が入っています。

© 1997 Microsoft Corporation.