サンプル・プログラム
インクリメント演算子
キー入力回数が減ることと、何かのカウンタに使っていることを明示する意味で、インクリメント演算子が使われる。
インクリメント演算子には、後置インクリメント i++ と前置インクリメント ++i の2種類がある。評価の順番に留意しておこう。
19: <script>
20: //ページのロード時に実行
21: window.onload = function() {
22: let i = 1;
23: document.getElementById('ret1').innerHTML = 'i = ' + i.toString();
24: document.getElementById('ret2').innerHTML = 'i = ' + (i++).toString();
25: document.getElementById('ret3').innerHTML = 'i = ' + (++i).toString();
26: }
27: </script>
前置インクリメント ++i は、式 (++i).toString() が評価される前に加算する。直上の後置インクリメントで1加算された後、さらに1加算されるので、表示は 3 となる。
19: <script>
20: //ページのロード時に実行
21: window.onload = function() {
22: //後置インクリメントでwhileループ
23: let i = 1;
24: while (i++ < 5) {
25: document.getElementById('ret1' + i.toString()).innerHTML = 'i = ' + i.toString();
26: }
27:
28: //前置インクリメントでwhileループ
29: i = 1;
30: while (++i < 5) {
31: document.getElementById('ret2' + i.toString()).innerHTML = 'i = ' + i.toString();
32: }
33: }
34: </script>
ループ処理でインクリメント演算値を使うときは、後置にするか前置にするか注意が必要だ。
デクリメント演算子
演算子 | 意味 |
---|---|
A++ | 後置インクリメント演算子 |
++A | 前置インクリント演算子 |
A-- | 後置デクリメント演算子 |
--A | 前置デクリメント演算子 |
練習問題
コラム:ノイマン型コンピュータと万能チューリングマシン
この問題に気付いたアメリカの数学者フォン・ノイマンは、プログラムとデータを区別せずに記憶装置に記憶でき、演算装置はアドレスを使って記憶装置の任意の場所にアクセスできるアーキテクチャを提案し、これが後にノイマン型コンピュータと呼ばれ、メインフレームから現代のパソコン、スマホ、IoT機器に至るまで、すべてのコンピュータの基本アーキテクチャとなった。
マス目に分かれた任意の長さのテープと、そのテープの上を1マスずつ前後に移動でき、現在位置のマス目の記号を読み取ったり書き込んだりできるヘッドで構成される簡単な機械をチューリングマシンと呼ぶ。この機械に外部から、(1)有限個の記号の定義、(2)あらかじめ記号の列が書き込まれたテープ、(3)ヘッドの状態を遷移させる規則の集合を与えると、さまざまな計算ができる。ノイマン型コンピュータに置き換えると、(1)はハードウェア、(2)と(3)がソフトウェア(プログラム+データ)である。
万能チューリングマシンとは、任意の符号化されたチューリングマシンを受け取って、その動作を完全に真似ることができるものを指す。
JavaScript をはじめとするモダン・プログラミング言語では、プログラム(関数・メソッド)とデータ(変数・プロパティ)は分かれているように見える。しかし、後述する「インスタンス」でわかるように、メソッドと同じレベルでプロパティを扱うことができる。また、今日では脆弱性の1つとされる evalメソッドも、万能チューリングマシンという観点からみると必要なメソッドである。