プログラミング言語について理解するにあたっては、既存のよく知られたライブラリやデータ構造の実装をしてみると良いものです。JavaScriptでStackを実装してみましょう。
ライブラリは次のようになります。配列オブジェクトのメソッドをそのまま利用しているので簡単に実装できることがわかります。stack.jsという名前で保存しておきます。
(function(undefined) { "use strict"; var global = Function('return this')(); function Stack() { this.stack = []; } Stack.prototype.empty = function() { return this.stack.length === 0; } Stack.prototype.size = function() { return this.stack.length; } Stack.prototype.push = function(value) { this.stack.push(value); } Stack.prototype.pop = function() { if (this.empty()) { return undefined; } else { return this.stack.pop(); } } Stack.prototype.peek = function() { if (this.empty()) { return undefined; } else { var v = this.stack.pop(); this.push(v); return v; } } global.Stack = Stack; }());
Stackを使うには次のようにします。JavaScript, Java, Ruby という文字列をpushした後に、空になるまでpopすると逆順に値が出力されることがわかります。
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Stack</title> <script src="stack.js"></script> </head> <body> <div id="logtext" style="position:absolute;"></div><br /> <script> function log(element) { var html = document.getElementById('logtext').innerHTML; document.getElementById('logtext').innerHTML = html + '<br>' + element; } var stack = new Stack(); stack.push("JavaScript"); stack.push("Java"); stack.push("Ruby"); while (stack.peek()) { log(stack.pop()) } </script> </body> </html>
JavaScriptについては、下記の書籍の参考になるでしょう。
- JavaScriptプログラミング入門 第2版
- JavaScript本格入門 ~モダンスタイルによる基礎からAjax・jQueryまで
- JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技
プログラミング言語一般については、下記が参考になるでしょう。
- クラスベースのオブジェクト指向プログラミング言語の基礎を学ぶには … 改訂版 基礎Java(CD-ROM付) (IMPRESS KISO SERIES)
- クラスベースのオブジェクト指向プログラミング言語を学ぶには … プログラミング言語Java (The Java Series)
- 関数型プログラミング言語を学ぶには … Scalaスケーラブルプログラミング第2版
- プログラミング言語の理論を学には … プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト)