X = X + 1 ? 意味わからん
と、人生で初めてコンピュータ・プログラムというものをみたときに思いました。言語は、 MSX-BASIC でした。
しばらくプログラムを眺めているうちに、右辺の X が、”古い X ”で、左辺の X は、”新しい X ”を意味している、X は X でも、違う X を意味しているらしい、ということに気付いたのですが。
X = X + 1 というのは、一文で read-modify-write の 3 つの操作を表現していますから、コンピュータをよく知らない人間には、理解するのは難しい文なのかもしれませんね。さらに、等号というなじみのある記号を、「記憶域への代入」という、別の意味で使われている、というのも理解の妨げになるでしょう。
このことを思い出したきっかけは、「Java 並行処理プログラミング」にある、以下のサンプルコード。
public class Holder { private int n; public Holder(int n) { this.n = n; } public void assertSanity() { if (n != n) { throw new AssertionError("This statement is false."); } } }
assertSanity メソッドを呼び出すと、 AssertionError を投げることがある、というものですが、一瞬、意味がわかりませんでした。
| 固定リンク

コメント