Call by value

日本語では値呼び出しかな。本来はプログラミング言語の意味論の話で、この他にはCall by name, Call by need, Call by referenceなんてのもある。Call by needは、lazy evaluationと呼ばれることの方が多いかも知れない。今どきのプログラミング言語はCall by valueしかないと言っても過言ではないので、それしか知らない人も多いだろうなあ。というかむしろ、それが当たり前でCall by valueとは何かすら意識していないと思うなぁ。
今日出くわしたJavaプログラムで、何これ?っていう感じで全然意味が分からない関数(メソッド)があった。そのプログラムとにらめっこすることしばし。分かった。この人はメソッドの引数がCall by referenceだと思っているらしい。呼び出し先でパラメタに値を代入して、呼び出し元で更新した(と勝手に思って)それを使っている模様。これは動かないでしょ。何でこの人Call by referenceなんて知っているんだろう??