[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 1557] Re: ポインタの定義 (Re: 集約とコンポジション )
前橋です。
小薮さん:
>ところが、VBやJavaのポインタは通常ポインタと呼ばれないので、
>結局「ポインタ」と名のついた言語要素が扱われる場合、それは
>現状ほとんどの場合Cのそれだ、ということになります。
>
>で、Cのポインタは他の言語のポインタと違って足し算引き算等ができる
>という特徴を持っておりますので、「ポインタ」といえばそういう
>ものなのだ、という了解が広まるのも無理ないことでしょう。
はい、それは理解してます。
>もちろん、C言語以前からある古典的な定義での「ポインタ」の用法が
>間違いというわけではないですが、Cの普及とともに、「ポインタ」という
>言葉がもう一つ違う意味を持つようになったと考えるのがよいと思ってます。
これも了解しています。
ただ、*C/C++プログラマにとってみても* 連結リストの次の要素を指す
ものはやっぱりポインタなんですよ。C のポインタは、変数のポインタが
取れたりポインタ演算が出来たりという妙な特徴を持っていますが、
それはそれとして、「ポインタがない」と言われてしまうと、じゃあ
連結リストはどう書けばいいの? という話になってしまう。
連結リストに限らず、new で返ってくるものって *C/C++プログラマ的発想
では* やっぱりポインタなので、「ポインタがない」と言われると、
「????」となってしまうと思います。
Javaでしばらく悪戦苦闘した末、「なんだ結局ポインタじゃねえか!」と
叫んだ人って、結構いっぱいいると思う... 少なくとも、私の周りには
ゴロゴロしています。
>「C風の意味での『ポインタ』は間違っている!!」と主張し、言葉の意味を
>整理する努力をするのは一つの見識だと思いますが、私は労力の割に
>実入りが少なそうだと思うのでやりません。そんなことでフレーミングとか
>発生したらそちらの方がよほど被害が大きいし・・
Javaのアレを「参照」と呼びたい人は呼べばいいと思います。
でも、「ポインタがない」と言われると、Pascalプログラマどころか
Cプログラマでも充分混乱します(実例多数)。
まあ、逆に「ポインタがある」と叫ぶと、Javaのアレでポインタ演算できるん
かしらん? と思う人が出てくる可能性はひょっとしてもしかすると否定でき
ない可能性もあるのかも知れないと認めることにやぶさかではないですが、
Javaで「*p++」なんて書いた奴は私は見たことないですし、仮にいたとしても
コンパイラではじかれるから問題ないんじゃないでしょうか?
>・・・という風に割り切ったなら、「ポインタ」問題って
>わざわざ取り上げるほどのことじゃあないんじゃないでしょうか。
騒ぐのが目的... ってのは冗談ですが(でもないか)
まあ、誰もが「{Java|Ruby}にはポインタはない。あれは参照だ」という
ことでちゃんと理解できていれば、Pascalな人には気の毒ですがそれは
それで良いのかもしれません。
# そういやXMLにもポインタはあったっけか。
でも、私には、「Javaにはポインタがない」という言説はやっぱり
混乱を招いているだけに見えます。
JavaHouseの高木さんのように、「Pascalのポインタは抽象化されていたのに
C が変なもんを持ちこんで汚してくれた」というのもまあわかりますが、
Pascalなんぞナメた程度で、ほぼ生粋のCプログラマである私にとっても、
「Javaにはポインタがない」と言われると「はあ?」としか思えないです。
Javaの参照と、C のポインタとの違いはもちろんわかるけど、でも9割がた
ポインタにしか見えないし、ましてJavaはヒープ使いまくり言語なので、
「ポインタがない」どころか「ポインタしかない」わけですし。
以上、「Javaにはポインタがない」を素直に信じてしまった人にJavaを
教えることになって、結構苦労したことが複数回ある私の実感です。
http://java-house.etl.go.jp/ml/archive/j-h-b/039368.html#body
この辺にぼそぼそ書きましたが、「Javaにはポインタがない」と言われて
素直に納得してる人って、なんか「参照」もあんまりちゃんと理解してい
ない人が多いように思うんですが...
# もちろん小薮さんやまつもとゆきひろさんがそうだというわけではあり
# ません。
------------------------------------------------------------
前橋 和弥 maebashi@xxxxxxxxx
http://member.nifty.ne.jp/maebashi/
------------------------------------------------------------