JavaScriptの技法:高度な関数の活用

文:Nick Gibson(Builder AU)
翻訳校正:原井彰弘
2008/01/10 07:00

JavaScriptに含まれている高度な関数を用いると、ウェブサイトをパワフルかつ迫力のあるものにできる。本稿では、再帰と参照渡し、および値渡しの利用方法を紹介する。

再帰

 「再帰 -- 【形容詞】『再帰』を参照。」というボタンは、再帰の意味を非常に簡潔に表現している。再帰とは、関数が自分自身を直接的もしくは間接的に呼び出すことである。再帰を用いる際には、関数の実行が必ず終了するように注意深く出口を作成する必要があるため、再帰の利用は危険でもありうる。しかし、再帰を用いると解決が容易になる問題も存在する。ここでは、例として数学の関数である階乗(!)を用いよう。階乗は、1から指定した値までの自然数の積だ。従って、たとえば5!は120であり、6!は720になる。リストGに再帰を用いて実装した階乗関数を示した。

リストG

function factorial(x) {
       if(x < 2)
              return 1;
       else
              return x * factorial(x - 1);
}

 クラスのメソッドでも再帰を用いることは可能だが、それは少々危険である。なぜかというと、クラスのメソッド名を呼び出すことによって再帰を実行しようとすると、「Object Expected」エラーになってしまうのである。エラーを避けるには、メソッドのもとの関数名を用いるか、もしくはarguments.calleeを用いて再帰を実行しなければならない。リストDをもとにしてmyMathクラスにfactorialメソッドを追加したコードを、リストHに示した。

リストH

function myMath() {
// Properties
this.result; // Result of method

// Methods
this.add = myAdd; // Add method
this.factorial = myFactorial; // Factorial method

function myAdd(x,y) {
this.result = x + y;

return this.result;
}

function myFactorial(x) {
if(x < 2)
return 1;
else {
this.result = x * arguments.callee(x - 1);

return this.result;
}
}
}

var math = new myMath(); // Create an instance

for(var i=0;i <= 10;i++)
document.write(i + '! = ' + math.factorial(i) + '<br />');

まとめ

 関数はJavaScriptで中心的な役割を果たすので、基本的な部分は丁寧にドキュメント化されている。しかし、残念なことにJavaScriptの関数の高度な機能については、概要を示したドキュメントがほとんど存在しない。本稿で示した例も決してJavaScript関数の高度な機能すべてを網羅しているわけではない。しかし、学習を進める際の目印にはなるだろう。

この記事は海外CNET Networks発のニュースをシーネットネットワークスジャパン編集部が日本向けに編集したものです。海外CNET Networksの記事へ

記事の感想やご意見をコメントでお寄せください(CNET_IDログインが必要です)
ログイン パスワードを忘れた方  |  新規登録
  • 昨日のトップ記事
  • 2日前
  • 3日前
  • 4日前
  • 5日前
  • 新着記事
  • 人気記事
  • 特集
  • ブログ