[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 1590] Re: ポインタの定義



前橋です。

小薮さん:
>まつもとさんも、ちゃんと全部は読んでないのかも
>知れませんね。

おそらく。

>でもやっぱり私が思うのは。
>結局前橋さんの文章も、とどのつまりは「ポインタがある」という
>主張になってしまっていますよね。

ていうか、「Javaにはポインタがない」という言説に問題があると
思って、それを否定しようと思ったら、「Javaにはポインタがある」
と言うしかないんじゃないでしょうか?

>JavaのアレとCのポインタの類似点、相違点を正しく理解する/させる
>ことは重要で、これが最終的なゴールです。一方、Javaのアレを
>ポインタと呼ぶことは、ゴール達成の手段としてはありえますが
>最終目的ではありません。

以前... って1年以上前にも書いたように、私は「Javaのアレを
ポインタと呼べ」なんて主張はしていません。

>目的のためには、「Javaにはポインタがない」という世間の言説は
>邪魔になることがたしかにありそうです。
>よって「Javaにはポインタがない」という表現から生じがちな誤解を
>解く努力は意味があると思います。

Javaって、C/C++よりずっと「ポインタ使いまくり」言語なんですよね。

  Hoge hoge;

  hoge.piyo = 5;

これは、C/C++なら通りますが、Javaでは通りません。

なんだかよくわからないけど、

  Hoge hoge = new Hoge();

と書かなきゃならないのか、と機械的におぼえてしまった不幸なCプロ
グラマは、

  Hoge[] hogeArray = new Hoge[10];

  hogeArray[3].piyo = 5;

でもう一度はまることでしょう。

そして、後者の例では、コンソールに「NullPointerException」って
出てたりするわけです(笑)。

こういうのを、バリバリのCプログラマに向かって「ポインタ」という
言葉を使わずに説明しなきゃいけないとしたら、それは大いなる浪費です。

で、「要するにポインタだ」と言ったら、

  「え? Javaにはポインタはないんじゃないですか?」

と聞き返されることでしょう。さて、この時どう答えるか。

案1)
  「ええと、Javaにはポインタはないけど、代わりに参照という
  仕掛けがあって、参照は、ポインタによく似てるけど、ポインタ
  演算はできないし、変数の参照を取ることもできない」

案2)
  「うるさい。それはデマだ。Javaはポインタの言語だ。
  ま、Javaのポインタは、ポインタ演算はできないし、変数の参照を
  取ることもできないけど。」

このふたつ、意味的には *大差ない* と思うんですが。

そして、どっちかと言うと後者の方がわかりやすいし、聞き手の印象に
残るだろうし、決してウソを言ってるわけでもないわけです。

>でも、上記の努力のための手段として「Javaにはポインタがある」
>という表現を対抗として使うと別の問題が発生してしまうわけです
>から、「Javaにはポインタがある」とは
>            *主張しないほうがよい*
>のではないでしょうか。

「別の問題」とは?

もう一度引用します。

Date: Tue, 06 Mar 2001 01:28:18 +0900
Subject: [jfriends-ml 1557] Re: ポインタの定義(Re: 集約とコンポジション )
>まあ、逆に「ポインタがある」と叫ぶと、Javaのアレでポインタ演算できるん
>かしらん? と思う人が出てくる可能性はひょっとしてもしかすると否定でき
>ない可能性もあるのかも知れないと認めることにやぶさかではないですが、
>Javaで「*p++」なんて書いた奴は私は見たことないですし、仮にいたとしても
>コンパイラではじかれるから問題ないんじゃないでしょうか?

実害はあんまりなさそうだと思いますけど。

もちろん、

・JavaのポインタはCのポインタとはちょっと違う。
・Javaでは、これのことを参照と呼ぶ。

というのは付け加えなければいけないでしょうけど。

>初期の目的さえ達成されれば、Javaのアレには参照という名前が
>すでにあって普及しているので、ポインタという表現を
>普及させる必要はないと思うんですが・・

で、そういう主張は私はしていないのです。

既に書いたように、「Javaにはポインタがない」という言説さえなければ、
「Javaにはポインタがある」なんて言わなくて済むのです。

# そういや、本の方には、「C には多次元配列は存在しない」って
# 書いたなあ...

------------------------------------------------------------
  前橋 和弥              maebashi@xxxxxxxxx
                         http://member.nifty.ne.jp/maebashi/
------------------------------------------------------------