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

[jfriends] Re: ポインターと参照




>あんまり続けるとフレーミングの如き様相を呈して来そうで怖い...(^^;

私はぜんぜんフレイム(flame)だと思ってません。

flame
[名] 炎; 光輝; 情熱; 恋人; 激しい文言のemail(のやりとり).
(三省堂「表音小英和」より)

>これは、GCのあるなしの問題であって、ポインタのあるなしとは関
>係ないでしょう。

確かにそうかも知れません。

Java での参照をポインターと呼びたくないのは、
C/C++ のポインターが特殊なポインターだからかも知れません。
ストラウストラップは、「Cは配列をサポートしていない」と書いていましたが、
配列要素のアクセスをポインター演算で実現したCの仕組みはシンプルで強力でした。

>オブジェクトをスタックに取る場合やオブジェクトの配列を作る場
>合、オブジェクトの生成については、むしろJavaの方がプログラマ
>が意識しなければならない度合が高いです。

確かに Java の配列はかなり特殊な配列ですね。(特にプリミティブの配列)
十分説明しないと初心者にはわかりにくいと思います。

でも重要なのは、
C/C++ の場合はプログラマーが常にメモリーを明確にイメージし、
自分が書いたポインター変数の面倒をずっと見続ける覚悟が無いとプログラミングが
できないのに対し、Java ではこのような覚悟は(普段は)必要ないということです。
(Java そのものの成り立ちまで深く入り込んだトラブルの場合を除きます)

結局私はプログラマーのメンタルな面しか語っていないような気がしてきました。

>消滅は、確かにGCが勝手にやってくれますが。

これは私にとっては重要でした。C++ を書いた時は、
デストラクターの実装もどうしたら良いのかぜんぜん分からず、
デストラクターをどういうタイミングで呼べば良いのかぜんぜん分からなかったです。
# 要するに設計が良く分かっていないです。

>>やはり「Java にはポインターは無い」とした方が分かりやすいと思うんですけど。
>そうすると、
>「Javaにはポインタがないそうですが、連結リストやツリーはどう
>  やって作れば良いのですか?」
>という質問が飛び交うわけでして。

これの答えはわりと簡単で、
Collection へ誘導するとか展開のし方がいろいろ考えられます。

何度も繰り返しますが、Java では interface の方が概念として重要です。
これは、
「なぜクラスを離れたメソッドは無いのか」
「なぜ関数ポインターのようなものが無いのか」
「なぜswap()関数は書けないのか」
という疑問への答えになると思います。
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.freepage.total.co.jp/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル      FAX 03-5362-9008