[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] Re: [jfriends] Re: ポインタと参照
前橋です。
遠藤さん:
>>・Javaには、C/C++における「ポインタ」が存在するが、それを
>> 「参照」と呼んでいる。
>
>これには異論があります。特に JNI プログラミングでは、
>Java の参照をポインターと呼んでしまうとはまるような気がします。
JNIプログラミングってやったことはないですし、全然知らないの
ですが、Javaのポインタが、native method からは、構造体とか、
いずれにせよ何かにtypedefされた別の型に見える、ということで
しょうか?
>>(1)Javaは、プリミティブのポインタをとることができない。
>これがとても重要だと思います。
現実問題として、C でも、プリミティブのポインタをとる時って、
参照渡しの代わりにポインタを渡す時ぐらいだと思うのですよ。
そして、それは有用ですし。
配列を回す時にプリミティブのポインタを++する、というコードは、
K&Rでは見ますが、最近あんまり見ない気がします。ちなみに私は
書きません。(おとなしく添字を使う)
>Java には、「クラスを離れたメソッドは無い」のですが、
>同様に、「関数ポインターは無い」です。
>「関数ポインターが無い」にもかかわらず、interface があれば簡潔に
>エレガントなコードが書けます。
Cの場合、printf()の printf は、宣言からすれば「関数のポインタ」
にはならんだろう、という話は置いときまして。
実験>
main()
{
(***************printf)("hello world!\n");
}
継承/interfaceがあれば、関数のポインタは確かに(あまり)使わな
いでしょうね。
>>(4)Javaには、Cにおける「ポインタと配列の間の微妙な関係」はない。
>
>この代償として、配列は妙なコードを書かなくてはなりませんです。
そうですか? Javaで、配列がらみで妙なコードを書かなければなら
ないとすれば、それは配列がヒープにしか取れないことに起因して
いて、それ以外の所では、Cよりずっと綺麗なような。
>これもあるけど、難しい原因は「ポインターという概念」ではないかと。
そうですね。ポインタの概念を理解するのが難しい、というのは否
定しませんけど... その難しさはJavaでも解消されていないのでは。
>「ポインターはアドレスではない」というのを理解するのに
>私はすごく時間がかかりました。
これなんですよ。むしろ、連結リストやツリーみたいなデータ構造
を先に勉強した方が良さそうです。
>あと、用語の問題として、「ポインター型の変数」のこともポインターと呼ぶし、
>「ポインター型の値」のこともポインターと呼ぶので初心者は混乱します。
これはあるかもしれませんねえ。
人に Cを教えることもある身なので、気を付けることにします。
>以前紹介しましたが、C++ と Object Pascal と Java で swap() 関数問題を扱った
>Webページがありました。たいへん面白かったです。(Object Pascal って素敵^^;)
すみません。私はその頃はまだMLに入会していなかったのではと思
うので、できましたらURLを教えていただけないでしょうか?
面白そうです。
>>C に慣れた私としては、C++の参照型は、どうも好かんです。コー
>>ディングをだーっと読んでって、いつ変数の値がぶち壊される可能
>>性があるのかをつかみにくいと思います。
>
>C++ の参照型は、関数引数としてクラスをとる時に威力を発揮します。
># C++ に挫折した者の発言ですので不正確な情報かも知れません。
C++の参照型は、= 演算子のオーバーロードの時に威力を発揮します。
でも、私は、演算子のオーバーロード自体なくても良いと思ってい
るので、やっぱりなくても良い気がします。
あとは、参照を返す関数ですか。やっぱり混乱を招くだけのような。
# C++と格闘中の者の発言ですので、不正確な情報かも知れません。
関数のオーバーロードさえ、いまひとつ好きになれんです。まあ、
これは欲しいと思うことも多いんですけど...
>(それよりプリミティブを格納できるCollectionが欲しい。
>でも Int クラスを書いちゃったからいいや...)
template(というかgenericity)があれば作れますってば。
まあ、Javaの場合、将来的にgenericが実装される日が来たとして
も、パラメータとして渡せる型は、クラスだけになるんじゃないか
という気がしますけど。
------------------------------------------------------------
前橋 和弥 maebashi@xxxxxxxxxx
中部ソフトエンジニアリング(株)
〒450 名古屋市中村区名駅4-10-25(名駅IMAIビル 5F)
Tel:(052)583-4511(代) 内線 252 Fax:(052)583-4566
------------------------------------------------------------