実行サンプル
$ chmod +x crud.js
$ ./crud.js
CRUD> hello
文法エラーです。
CRUD> insert "United Kingdom" => "London"
CRUD> insert "Japan" => "Osaka"
CRUD> select ".*"
United Kingdom => London
Japan => Osaka
CRUD> insert "Japan" => "Tokyo"
Japan は既に存在します。
CRUD> update "Japan" => "Tokyo"
CRUD> select ".*"
United Kingdom => London
Japan => Tokyo
CRUD> delete "japan"
japan が見つかりませんでした。
CRUD> delete "Japan"
CRUD> select ".*"
United Kingdom => London
CRUD> exit
$
|
ソースコード
crud.js
#!/usr/local/bin/jshost
LoadModule('jsstd');
LoadModule('jsio');
var CRUD = function() {
this.hash = {}
}
CRUD.prototype.insert = function(arg0, arg1) {
var h = this.hash;
if (arg0 in h) {
throw new Error(arg0 + ' は既に存在します。');
}
h[arg0] = arg1;
}
CRUD.prototype.select = function(arg0) {
var h = this.hash;
var p = new RegExp(arg0);
for (var key in h) {
if (key.match(p)) {
Print(key + ' => ' + h[key] + '\n');
}
}
}
CRUD.prototype.update = function(arg0, arg1) {
var h = this.hash;
if (!(arg0 in h)) {
throw new Error(arg0 + ' が見つかりませんでした。');
}
h[arg0] = arg1;
}
CRUD.prototype.delete = function(arg0) {
var h = this.hash;
if (!(arg0 in h)) {
throw new Error(arg0 + ' が見つかりませんでした。');
}
delete h[arg0];
}
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
}
var parse = function(s) {
var p0 = /^$/; // CRUD>
var p1 = /^([a-z]+).*$/; // CRUD> cmd .....
var p2 = /^([a-z]+)$/; // CRUD> cmd
var p3 = /^([a-z]+)\s+"([^"]+)"$/; // CRUD> cmd "arg0"
var p4 = /^([a-z]+)\s+"([^"]+)"\s*=>\s*"([^"]+)"$/; // CRUD> cmd "arg0" => "arg1"
var r;
s = s.trim();
r = s.match(p0);
if (r) {
return { cmd: '' }
}
else {
r = s.match(p1);
if (r) {
switch(r[1]) {
case 'exit':
r = s.match(p2);
if (r) {
return { cmd: r[1] }
}
break;
case 'select':
case 'delete':
r = s.match(p3);
if (r) {
return { cmd: r[1], arg0: r[2] }
}
break;
case 'insert':
case 'update':
r = s.match(p4);
if (r) {
return { cmd: r[1], arg0: r[2], arg1: r[3] }
}
break;
}
}
}
throw new Error('文法エラーです。');
}
var crud = new CRUD();
while(true) {
try {
Print('CRUD> ');
var r = parse(File.stdin.Read());
switch(r.cmd) {
case 'insert':
crud.insert(r.arg0, r.arg1);
break;
case 'select':
crud.select(r.arg0);
break;
case 'update':
crud.update(r.arg0, r.arg1);
break;
case 'delete':
crud.delete(r.arg0);
break;
case 'exit':
Halt();
break;
case '':
break;
}
}
catch(e) {
Print(e.message + '\n');
}
}
|
更新履歴
| 日付 |
内容 |
| 2008-04-06 |
情報 |
新しく言語を学ぶときの最初のお題 CRUD から JavaScipt のソースコードを分割して、単独の記事にした。 |
| 2008-03-28 |
変更 |
ハッシュのキーの有無を調べる方法を変更した。
修正前: if (h[arg0]) { }
修正後: if (arg0 in h) { }
|
| 2008-03-27 |
初版 |
|