JavaScript第5版読書会#4 & 懇親会に参加しました

http://groups.google.co.jp/group/kanasanjs/web/kanasan-js-javascript54
初めてのJavaScriptです。とりあえず逆ポーランド電卓を作ってみました。エラーチェックはまだまだ甘いです。やっぱり無名関数が使えるのはいいなぁ。協力してくださった方々、どうもありがとうございます。

<html>
<head><title>rpcalc</title></head>
<body>
<form name="input" onsubmit="rpcalc(); return false;">
<input type="text" name="expr"> = <span id="result"></span>
</form>

<script language="JavaScript">
function op(stack, f) {
  if (stack.length < 2)
    throw "invalid expr.";
  var x1 = stack.pop();
  var x2 = stack.pop();
  stack.push(f(x1, x2));
}

function rpcalc1(exprs) {
  var stack = [];

  for (var i = 0; i < exprs.length; i++) {
    switch (exprs[i]) {
      case '+':
        op(stack, function (x1, x2) { return x2 + x1 });
        break;
      case '-':
        op(stack, function (x1, x2) { return x2 - x1 });
        break;
      case '*':
        op(stack, function (x1, x2) { return x2 * x1 });
        break;
      case '/':
	var f = function (x1, x2) { 
          if (x1 == 0)
            throw "devided by 0.";
          return x2 * x1
        };
        op(stack, f);
        break;
      default:
        stack.push(Number(exprs[i]));
        break;
    }
  }

  return stack.pop();
}

function rpcalc() {
  var expr = document.input.expr.value;
  var result = document.getElementById("result");

  try {
    result.innerHTML = rpcalc1(expr.split(" "));
  } catch(ex) {
    result.innerHTML = ex;
  }
}
</script>
</body>
</html>

その他

  • EMCAは「えくま」と読む。
  • QuickLookのデモ by ujihisaくん。VIMの中から画像表示。