JavaScriptの技法:高度な関数の活用
翻訳校正:原井彰弘
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の記事へ
- 4人の推薦記事
- 2人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(1)
- ホワイトペーパー
- 話題のタグ
文字にドロップシャドウの効果をつける--FirefoxとSafariのCSS対応
iPhoneにAdiumが載らない2つの理由
iPhone 3Gの節電術
マイクロソフトはIE 8で地雷を踏んだ?
マイクロソフト、Internet Explorer 8のベータ2をリリース
「iPhone」のパスコードロックに深刻な脆弱性--連絡先情報が読み取られる危険も
Windows XPのバックアップユーティリティについて知っておくべき10のこと
S・ウォズニアック氏:「エンジニアは自分の心に従って行動すべき」--IDFインタビュー
Firefox 3.1のHTML 5対応を検証--Canvas Text APIとCanvas Shadow API
グーグルが、無料社食をついに廃止?--真実はいかに
iPhoneからサーバにSSHログイン:TouchTerm
トップページにみる日本のウェブデザイン--表現したい人たちが集うMySpace
モジラ、「Firefox 3.1」でJavaScript実行を大幅に高速化
APC SOLUTIONS FORUM 2008をレポート
Techno Exchange
ZDNet Japan Green IT
DELLが掲げる「新・仮想化アセスメントサービス」
Webセキュリティ特集
セキュリティ対策レベルテスト公開!
仮想化環境で求められるストレージの要件
ZDNet Japan ホスティング特集
「シンプル」&「低コスト」な運用管理