「参照渡し」と「参照の値渡し」

自分が「参照渡し」と「参照の値渡し」を混同していたことについて指摘をいただいて間もなかったので、タイムリーな会話だなあと思って、まとめさせていただくことにしました。 関連 http://d.hatena.ne.jp/tt4cs/20111026/1319561301#c
5
ぐるぐる系SQL @bleis

"参照渡し(型安全なポインター)になります" C#たん、それは参照渡しではないよ http://t.co/7RDyvvLe

2011-12-07 14:28:37
しいたけ @yuroyoro

え?「intなどを参照渡ししたい場合には、Integerクラスなど、ラッパー クラスを通す必要があります」

2011-12-07 14:31:46
ぐるぐる系SQL @bleis

@shunka_zwei 参照の値渡しですね。参照渡しじゃなくて値渡し。

2011-12-07 15:24:55
ぐるぐる系SQL @bleis

@shunka_zwei そうですよ。ポインタ渡し(ポインタの値渡し)が参照渡しでないように、参照の値渡しは参照渡しではない、と、そういう話です。

2011-12-07 15:30:21
kmizu @kmizu

「参照渡し」という用語の誤用、だけじゃなくて、この場合そもそもIntegerがmutableじゃねえ、という別の問題もあるけど、根深いなあ。 #java

2011-12-07 19:29:27
Ryo Asai @ryoasai74

C++の参照パラメータやPascalのvar変数は明らかに参照渡しですが、JavaだとCのポインタ渡しに近い感覚で一般に参照渡しと呼んでいるのかも。ポインタがないからポインタ渡しでは変なので。

2011-12-07 21:06:00
Ryo Asai @ryoasai74

Javaの世界では参照型のパラメータを渡すことを参照渡しと呼ぶことが多いと思いますが、.NETの人にはByRef、ByValとかあるから参照の値渡しと参照渡しを厳密に区別するのかな。 / “参照渡し” http://t.co/NZcFmxlw

2011-12-07 21:09:51
きしだൠ(K1S) @kis

@ryoasai74 Javaの場合は、参照渡しではなく、参照を値渡ししますね。あれを参照渡しと言わないほうがいい気がします。

2011-12-07 21:12:00
Ryo Asai @ryoasai74

@kis 文献などでは参照渡しと呼んでいるものが多い気もしますが、やはりだめですかね、その用法は。モヒカンな人には絶対怒られそうな気もしますがw。

2011-12-07 21:13:32
Ryo Asai @ryoasai74

Java never call by reference. / “call by reference : Java Glossary” http://t.co/qNVAMyze

2011-12-07 21:16:07
きしだൠ(K1S) @kis

@ryoasai74 他の言語の「参照渡し」と違ってJava独自の用語になってしまうので、用語としての汎用性がなくなってしまいそうです。Java使いの中でも言葉の意味が違うという事態に。

2011-12-07 21:19:30
Ryo Asai @ryoasai74

@kis 自分としては今後使わないようにしたいと思いますが、結構今までJavaの参照渡しという言葉を頻繁に聞いたり読んだりした記憶があったのですが、どこだったかな。たとえばリモートインターフェースはパラメータが値渡しだから引数の副作用に注意せよとか。

2011-12-07 21:23:05
きしだൠ(K1S) @kis

@ryoasai74 初期は「Javaは全部参照渡し」みたいな文脈も多かった気がします。最近はそういう文章をみかけないですね。それは参照渡しであるかどうかが話題に出ないという感じではあるんですけど。

2011-12-07 21:25:08
Ryo Asai @ryoasai74

@kis 実際Java言語では基本型以外は配列を含めて参照型という強いルールがあって、intが参照渡しか値渡しかを気にしないですからね。そして、mutableなオブジェクトであれば実質out変数的に使えるから、このような独自の用法が広まったのかもしれませんね。

2011-12-07 21:30:17
t_yano @t_yano

@ryoasai74 んー一般的に「参照渡し」というと.NETでいうところのByRefみたいなのを示すんじゃないかなー。Pascalにすらある概念なんだし。

2011-12-08 01:13:59
t_yano @t_yano

Pascal用語の「変数渡し」のほうが、意味的には分かりやすいのかもしれないな。変数渡しの実装方法のひとつとして参照渡しがあるだけではあるが。

2011-12-08 01:15:58
Takafumi Ikeda @ikeike443

参照渡しってpascalのvar渡しのことでつまりポインタ渡しのことでしょ、っておもってるけど違うのかな

2011-12-08 01:22:11
Takafumi Ikeda @ikeike443

参照の値渡しと参照渡しって違う概念なの知らなかった

2011-12-08 01:24:17
Takafumi Ikeda @ikeike443

あ、参照渡しとポインタ渡しもちがうのか。うーん、勉強がたりませんな。を

2011-12-08 01:26:06
R. TANAKA kouitirou @tkmusic1976

@ikeike443 pascalのvar渡しが参照渡しです。javaでは同じ事ができません。

2011-12-08 01:27:32
Takafumi Ikeda @ikeike443

言語によって用語の使い方にブレがあるのかな

2011-12-08 01:27:51
Takafumi Ikeda @ikeike443

@tkmusic1976 そうすね。Javaは基本型と参照型に明確に分かれてますよね

2011-12-08 01:28:43
tomo🐧@learning @cocoatomo

@ikeike443 C++ の参照と Java の参照は違いますね. Java しか知らないときに C++ の方を見てびっくりしました. http://t.co/R8yJY2Kw

2011-12-08 01:29:15
R. TANAKA kouitirou @tkmusic1976

@ikeike443 いえ、変数の型と変数の渡し方は分けて考えたほうがよいです。

2011-12-08 01:29:38
Takafumi Ikeda @ikeike443

@tkmusic1976 Javaは分かちがたく結びついてますよね

2011-12-08 01:30:59