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

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



前橋です。

小薮さん:
>でも、たとえば前橋さんもまつもとさんもJavaとCのポインタの共通点も
>相違点もその内容は同じように理解しているはずで、それなのにおかしな
>衝突が起きてしまっています。ポインタのあるなし論議はほとんどが
>これと同じような状態にある気がします。
>
>あんまり建設的なこととはおもえません。

たとえば、別便で小薮さんが書いておられたこんな話↓

Date: Wed, 07 Mar 2001 22:11:31 +0900
Subject: [jfriends-ml 1572] Re: ポインタの定義

>Aを指している仮引数bに呼び出されたメソッド内で
>代入を行ってBを指させることにしましょう。
>その結果aもBを指すことになるならば、これは確かに
>「参照渡し」と呼んでいいと思いますが、
>実際には呼び出されたメソッド内で何をしようと、
>aがAを指していることそのものは変更できません。

をするときに便利なのでは?

少なくとも相手が C プログラマなら、「ポインタを渡してるんだよ」
で一発です。

この辺の話は、JavaHouseなどでも、何度も何度も質問が来るわけですが
(あと、配列のnewとか、配列のコピーとかも)、「Javaにはポインタがない」
という言説がこんな混乱の元になっているのなら、撲滅するのが世のため
人のためであると考えます。
# それとも、このレベルの質問をしてくる人は、そもそもCも知らない
# かなあ...

>「Javaにはポインタがない」という言い方は、JavaとCのポインタの
>相違点の部分について言及し、強調する言い方ですから、これに
>単純なカウンターとして「Javaにはポインタがある」と注釈なしで
>ぶつければ、その相違点の存在、または重要性を否定する主張だと
>とられるのは当然です。まつもとさんもそのようにとっているように
>見えます。
>だとすれば、拒否反応が生じるのは無理ないことかと。

「C言語 ポインタ完全制覇」前書きから引用します。

| ところで,「Cはアセンブラもどきの低級言語だから,ポインタを
| 理解するには,メモリとアドレスの概念を知らなきゃいけないよ」と
| いわれると,なんだか,
|
|  「ポインタ」というのは,Cに特有の,低レベルで邪悪で凶悪な機能である
|
| かのように思えてきます.
| そんなことはありません.確かに,「Cのポインタ」は,低レベルで
| 邪悪で凶悪な側面も持っていますが,一般にポインタといえば,連結
| リストや木構造といった「データ構造」を構築するために必須の概念
| であり,これがなければ,まともなアプリケーションプログラムは
| 構築できません.ですから,ある程度以上本格的なプログラミング言語で
| あれば,まず間違いなくポインタは存在します.Pascalにも,Delphiにも,
| Lispにも,Smalltalkにも,Visual Basicにさえ.Perlは昔,ポインタが
| ないことでだいぶいじめられましたが,バージョン5になって導入され
| ました.もちろん,Javaにだってポインタはあります.残念ながら世間
| には根強い誤解があるようですが.

一応、C のそれとは分けて読めるように書いたつもりですが、まだだめ?

似たようなところは他にも何ヶ所かあるので、いま全部はチェックできませんが...

気に障ったとしたらp.247の注かも (^^;

| 日本生まれのオブジェクト指向スクリプト言語、Rubyでは、作者自身が、
| 著書の中で「Rubyにはポインタという概念がありません」と断言しちゃっ
| ているのですが、もちろんRubyにも、「参照」という名前のポインタが
| あります。
| だいたい、Rubyでは、文字列みたいな基本的な型がimmutableじゃないので、
| こういう言語で、「ポインタがない」と主張するのは、たいへん危険なん
| じゃないかと思うんですが。

でも、これのすぐ横には、

| ま、Javaの参照は、Cのポインタと違って、ポインタ演算やら配列との
| 妙な交換性やらはありませんし、変数へのポインタを取得することもでき
| ませんが、それをもって「Javaにはポインタがない」と主張するのなら、
| Pascalにもポインタはないことになってしまいます。

って書いてあります。

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