teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

16

xx

2019/04/23 22:56

投稿

退会済みユーザー
answer CHANGED
@@ -1,37 +1,3 @@
1
- ~~そもそも「参照渡し」という仕組みがプログラミング言全般に渡る仕組みとて標準化されてますっけ?~~
1
+ 英語文献をたどる際にわかりやす、**英語に合わせて「共有渡し」**がいいと思います
2
- ⇒評価戦略というもののなかでされているらしい。
3
2
 
4
- **基本: 名称無**
5
- **特に呼び名が必要な環境: 参照の値渡し**
6
-
7
- ### 名称無し
8
-
9
- > 評価戦略についてそれぞれ名前をつけてカテゴライズすること自体が間違っているということ。なぜ、そういったカテゴライズすること自体が間違っているのかを説明ください。
10
-
11
- 「参照渡し」という仕組みがプログラミング言語全般に渡る仕組みとして(うまく)標準化されていない状況で、その文脈におけるキーワードを使って単語化するのはよくありません。現状、特定の言語の実装に引っ張られることもあるでしょうし、単語化したとしても呼ばれる環境に依存したのものだとみなすべきです。
12
-
13
- また、「参照渡し」という表現自体も曖昧で誤解を招くため、それに対する表現である「値渡し」も適切な表現か怪しいです。
14
-
15
- ### 特に呼び名が必要な環境: 参照の値渡し
16
-
17
- > 対訳となる英語なし。Java等における実装を示す名称と思われますが、Rubyの即値のように実装上は値渡しになる場合は、どう解釈すべきかも併せて説明ください。
18
-
19
- 「参照渡し」を意識しての会話になると思いますが、初めに「参照渡しの仕組みで言う『参照の値渡し』」とすれば、あとは「参照の値渡し」と呼べばいいと思います。意識する必要がなければ呼ばなくていいと思います。
20
-
21
- ### 本題: そもそも「参照渡し」という表現について
22
-
23
- そもそも「参照渡し」の参照ってなんでしょう?呼び出し元の変数に(相当するものに)対する参照ですよね…?それが「参照渡し」という機能の目的であるはずです。
24
-
25
- 戦略評価の「評価」を加えると、「変数参照化渡し」と呼びかえれます。
26
-
27
- 「参照渡し」の「参照」が扱える言語や、「参照渡し」の「参照」ではない「参照」を持たない言語では「変数」という表現は不要ですが、C#のように「参照渡し」の「参照」を扱えず、またそれと異なる「参照(参照型)」を持つような言語では「参照渡し」という命名を見直すべきでしょう。また、「参照型」相当のものを持つ言語も多いため、言語全般の話題で語る際には「参照渡し」という呼び名は避けるべきかと(多くの場合評価戦略そのものが気にされるのではないため誤解を招く)。現に、評価戦略の存在を知っていれば難しくはない話にもかかわらず、それは知られず新語に衝突したり誤解されています。
28
-
29
- そしてまた、少なくとも「by」にあたる「化」はあったほうが良いでしょう。
30
-
31
- ### 今ある呼び名について
32
-
33
- そもそも、次のような解釈のほうがしっくりきません?そもそも、言葉足らずで曖昧な表現が先行しているのが、言葉選びを困らせる原因かもしれませんよ。
34
-
35
- - 「call by reference」 :参照という値を渡す(なんの参照か修飾しようぜ…)
36
- - 「call by value」   :参照ではない値を渡す
37
- - 「call by sharing」  :呼び出し先で変数を共有できるようにわたす(何を共有するか修飾しようぜ…)
3
+ ※評価戦略読んでがっつりかえまた、そしてまだ考えが全然まとまってません。コメントくれた方ごめんなさい。

15

xx

2019/04/23 22:56

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,5 @@
1
1
  ~~そもそもの「参照渡し」という仕組みがプログラミング言語全般に渡る仕組みとして標準化されてますっけ?~~
2
+ ⇒評価戦略というもののなかでされているらしい。
2
3
 
3
4
  **基本: 名称無し**
4
5
  **特に呼び名が必要な環境: 参照の値渡し**
@@ -21,16 +22,16 @@
21
22
 
22
23
  そもそも「参照渡し」の参照ってなんでしょう?呼び出し元の変数に(相当するものに)対する参照ですよね…?それが「参照渡し」という機能の目的であるはずです。
23
24
 
24
- そうすると、「変数参照渡し」と呼びかえれます。
25
+ 戦略評価の「評価」を加えると、「変数参照渡し」と呼びかえれます。
25
26
 
26
- **機能実際にどういった仕組みかは、「参照渡し」という機能が関与べきことではないないと、「参照」「参照渡し」が何を指すかものすごれます。**
27
+ 「参照渡し」の「参照」扱える言語や、「参照渡し」の「参照」ではない「参照」を持たない言語では「変数」という表現は不要でが、C#のように「参照渡し」の「参照」を扱えず、またそれ異なる「参照(参照型)」を持つような言語では「参照渡し」という命名を見直べきしょう。また、「参照相当のものを持つ言語も多いため、言語全般の話題で語る際には「参照渡し」という呼び名は避けるべきと(多くの場合評価戦略そのものが気にされるのではないため誤解を招)。現に、評価戦略の存在を知っていば難しくはない話にもかかわらず、それは知られず新語に衝突したり誤解されています。
27
28
 
28
- 「参照」というものがない言語では「変数」という表現は不要ですが、C#のような「参照型」を持つ言語では「参照渡」という命名を見直すべきでしょう。また、「参照型相当のものを持つ言語も多いめ、言語全般の話題で語際には参照渡しという呼び名避けるべきかと。難しくはないけど現に衝突しり誤解されてます
29
+ また、少なくともbyにあたる「」はあっほうが良でしょう
29
30
 
30
31
  ### 今ある呼び名について
31
32
 
32
33
  そもそも、次のような解釈のほうがしっくりきません?そもそも、言葉足らずで曖昧な表現が先行しているのが、言葉選びを困らせる原因かもしれませんよ。
33
34
 
34
- - 「call by reference」 :参照という値を渡す
35
+ - 「call by reference」 :参照という値を渡す(なんの参照か修飾しようぜ…)
35
36
  - 「call by value」   :参照ではない値を渡す
36
- - 「call by sharing」  :呼び出し先で変数を共有できるようにわたす
37
+ - 「call by sharing」  :呼び出し先で変数を共有できるようにわたす(何を共有するか修飾しようぜ…)

14

xx

2019/04/23 21:02

投稿

退会済みユーザー
answer CHANGED
@@ -19,10 +19,12 @@
19
19
 
20
20
  ### 本題: そもそも「参照渡し」という表現について
21
21
 
22
- そもそも「参照渡し」の参照ってなんでしょう?呼び出し元の変数に(相当するものに)対する参照ですよね…?それが「参照渡し」という仕組みの目的であるはずです。
22
+ そもそも「参照渡し」の参照ってなんでしょう?呼び出し元の変数に(相当するものに)対する参照ですよね…?それが「参照渡し」という機能の目的であるはずです。
23
23
 
24
24
  そうすると、「変数参照渡し」と呼びかえれます。
25
25
 
26
+ **機能が実際にどういった仕組みかは、「参照渡し」という機能が関与すべきことではないと思います。でないと、「参照」や「参照渡し」が何を指すかものすごくぶれます。**
27
+
26
28
  「参照」というものがない言語では「変数」という表現は不要ですが、C#のような「参照型」を持つ言語では「参照渡し」という命名を見直すべきでしょう。また、「参照型」相当のものを持つ言語も多いため、言語全般の話題で語る際には「参照渡し」という呼び名は避けるべきかと。難しくはないけど現に衝突したり誤解されています。
27
29
 
28
30
  ### 今ある呼び名について

13

xx

2019/04/23 19:15

投稿

退会済みユーザー
answer CHANGED
@@ -15,7 +15,7 @@
15
15
 
16
16
  > 対訳となる英語なし。Java等における実装を示す名称と思われますが、Rubyの即値のように実装上は値渡しになる場合は、どう解釈すべきかも併せて説明ください。
17
17
 
18
- 「参照渡し」を意識しての会話になると思いますが、初めに「参照の値渡しの仕組みで言う『参照の値渡し』」とすれば、あとは「参照の値渡し」と呼べばいいと思います。意識する必要がなければ呼ばなくていいと思います。
18
+ 「参照渡し」を意識しての会話になると思いますが、初めに「参照渡しの仕組みで言う『参照の値渡し』」とすれば、あとは「参照の値渡し」と呼べばいいと思います。意識する必要がなければ呼ばなくていいと思います。
19
19
 
20
20
  ### 本題: そもそも「参照渡し」という表現について
21
21
 

12

xx

2019/04/23 19:09

投稿

退会済みユーザー
answer CHANGED
@@ -17,12 +17,18 @@
17
17
 
18
18
  「参照渡し」を意識しての会話になると思いますが、初めに「参照の値渡しの仕組みで言う『参照の値渡し』」とすれば、あとは「参照の値渡し」と呼べばいいと思います。意識する必要がなければ呼ばなくていいと思います。
19
19
 
20
- ### 蛇足:「参照渡し」という紛らわしい呼び名について
20
+ ### 本題 そもそも「参照渡し」という表現について
21
21
 
22
- C#のような「参照型」を持つ言語では「参照渡し」という命名を見直すべきでしょう。また、「参照型」相当ものを持つ言語も多いため、言語全般の話題で語る際「参照渡し」という呼び名は避けべきかと。難しくないけど現に衝突したり誤解されています。
22
+ そもそも「参照渡し」の参照ってなんでしょう?呼び出し元の変数に(相当するものに)対する参照ですよね…?それが「参照渡し」という仕組みの目的であるはずです。
23
23
 
24
- くなく「変数に相当するものへの参照渡している」といった仕組みでしょうし(参照という言葉が変数に対する参照を指さないのであば、実装依存になるし、標準化の際にはそれを意図していないだろうし)、「参照渡し」改め「変数渡し」とすれば気になることもなくなると思います
24
+ そう「変数参照渡し」と呼びかえれます。
25
25
 
26
- そう考えると、頭に変数つけると…共有渡し」もヤバくて、「変数を共有で渡」と捉え得るそもそも「参照渡し自体がらずで在り方と合わせて語る際にはならなんだとおもいます。
26
+ 参照というのがない言語では「変数」という表現は不要ですが、C#のような「参照型」持つ言語は「参照」という命名を見直すべきでしょうまた、「参照相当のものを持つ語も多い言語全般話題で語る際には「参照渡し」という呼び名は避けるべきかと。難しくはいけど現に衝突したり誤解れています。
27
27
 
28
+ ### 今ある呼び名について
29
+
30
+ そもそも、次のような解釈のほうがしっくりきません?そもそも、言葉足らずで曖昧な表現が先行しているのが、言葉選びを困らせる原因かもしれませんよ。
31
+
32
+ - 「call by reference」 :参照という値を渡す
33
+ - 「call by value」   :参照ではない値を渡す
28
- 「call by sharing」もやばげ、何を共有してるのかわからないね。オブジェクトじゃなくて変数相当るものじゃないの?と。
34
+ - 「call by sharing」  :呼び出し先変数を共有できるわた

11

xx

2019/04/23 19:05

投稿

退会済みユーザー
answer CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  > 評価戦略についてそれぞれ名前をつけてカテゴライズすること自体が間違っているということ。なぜ、そういったカテゴライズすること自体が間違っているのかを説明ください。
9
9
 
10
- 「参照渡し」という仕組みがプログラミング言語全般に渡る仕組みとして(うまく)標準化されていない状況で、その文脈におけるキーワードを使って単語化するのはよくありません。現状、特定の言語の実装に引っ張られることが多いでしょうし、単語化したとしても環境依存のものだとみなすべきです。
10
+ 「参照渡し」という仕組みがプログラミング言語全般に渡る仕組みとして(うまく)標準化されていない状況で、その文脈におけるキーワードを使って単語化するのはよくありません。現状、特定の言語の実装に引っ張られることもあるでしょうし、単語化したとしても呼ばれる環境依存したのものだとみなすべきです。
11
11
 
12
12
  また、「参照渡し」という表現自体も曖昧で誤解を招くため、それに対する表現である「値渡し」も適切な表現か怪しいです。
13
13
 

10

xx

2019/04/23 18:54

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,4 @@
1
- そもそもの「参照渡し」という仕組みがプログラミング言語全般に渡る仕組みとして標準化されてっけ?うまくされてる?というのは置いておいて回答します。
1
+ ~~そもそもの「参照渡し」という仕組みがプログラミング言語全般に渡る仕組みとして標準化されてますっけ?~~
2
2
 
3
3
  **基本: 名称無し**
4
4
  **特に呼び名が必要な環境: 参照の値渡し**

9

xx

2019/04/23 18:53

投稿

退会済みユーザー
answer CHANGED
@@ -1,38 +1,28 @@
1
- 回答としては次の通りです(あ程度知って言語C++、C#、JSあたりで)
1
+ そもそも「参照渡し」いう仕組みがプログラミング言語全般に渡る仕組みとして標準化されてるっけ?うまくされてる?というの置いておいて回答します。
2
2
 
3
- **言語のユーザー: 名称無し**
3
+ **基本: 名称無し**
4
- **言語の開発者 : 実装おいて抽象的な型(値型や参照型)で、渡し方の処理を分ける必要があるら便宜上「参照の値渡し**
4
+ **呼び名が必要な環境: 参照の値渡し**
5
5
 
6
- ### 言語のユーザー: 名称無し
6
+ ### 名称無し
7
7
 
8
- 「値の在り方」と「値の渡し方」を一緒にして語る必要はありません。ひとまずは分けて考えるべきでそれで十分に思えます。
9
-
10
8
  > 評価戦略についてそれぞれ名前をつけてカテゴライズすること自体が間違っているということ。なぜ、そういったカテゴライズすること自体が間違っているのかを説明ください。
11
9
 
12
- 一緒にて考えるこがなければ、組み合わせらなカテゴライズする必要がなります。
10
+ 「参照渡いう仕組みがプログラミング言語全般渡る仕組みとして(うまく)標準化されていない状況、その文脈におけるキーワードを使って単語化するのはよりません。現状、特定の言語の実装に引っ張られることが多いでしょうし、単語化したとしても環境依存のものだとみなべきです
13
11
 
14
- はなぜ一緒くたにか。
12
+ また、「参照渡し」という表現自体も曖昧誤解を招くため、それ対す表現である「値渡し」も適切な表現怪しいです
15
13
 
16
- 1つ目: **あらかじめ「値の在り方」ついて理解していいから**。理解ないまま、代入や引数などで躓き、「渡し方」と一緒くたにして考えてしまう(「箱にモノを入れる説明」や、それを連想する「代入という言葉」はあまり良くないのかも、割当てのほうが適切かな~?)。
14
+ ### 呼び名が必要環境: 参照の値渡し
17
15
 
18
- 2つ目: 本来は避けるべきだった説明をしなくてはならないから。「参照(C#でいう参照型)」と「参照(参照渡しで言う参照)」で言葉が被ってしまっているせいで、「値の値渡し」、「値の参照渡し」、…と4通りの組み合わせを例示しないと、初学者がそれぞれの「参照」を別物だと明確に切り分けられないから(2つの参照は多分別物、多分実装依存)。2つは別物であることを明確にするためだけに必要に思えます。
19
-
20
- 本当に名付けるべきは「値の在り方」という概念(?)に思えます。「代入」や「引数」の話に任せちゃってるのがまずいのかも。
21
-
22
- ### 言語の開発者: 実装において抽象的な型(値型や参照型)で、渡し方の処理を分ける必要があるなら便宜上「参照の値渡し」**
23
-
24
- 「値渡し/参照渡し」について特定の言語に限らない概念とするとき(あるかないかは別としてデザインパターンのようなものとするとき)、言語や実装に依存する事柄については分けるべきと思い、分けることを提案しました。見出しはその一例です。
25
-
26
- C#でいう値型と参照型それぞれで**渡し方の処理に違いがあるなら**、便宜上「参照の値渡し」でいいと思います。前半は言語に依存する呼び方、後半は「値/参照渡し」パターン共通の呼び方かな~と。「あくまでそのシステム/フレームワーク内での呼び名」という意味合いです。
27
-
28
16
  > 対訳となる英語なし。Java等における実装を示す名称と思われますが、Rubyの即値のように実装上は値渡しになる場合は、どう解釈すべきかも併せて説明ください。
29
17
 
30
- 実装上は値渡しでれば、値渡しと呼べばいい。まず
18
+ 「参照渡し」を意識しての会話になると思いますが、初めに「参照の値渡しの仕組み言う『参照の値渡し』」とすれば、あとは「参照の値渡しと呼べばいいとます。意識する必要がければ呼ばなくていいと思います。
31
19
 
32
20
  ### 蛇足:「参照渡し」という紛らわしい呼び名について
33
21
 
34
22
  C#のような「参照型」を持つ言語では「参照渡し」という命名を見直すべきでしょう。また、「参照型」相当のものを持つ言語も多いため、言語全般の話題で語る際には「参照渡し」という呼び名は避けるべきかと。難しくはないけど現に衝突したり誤解されています。
35
23
 
36
- ~~そもそも、変数をそのまま渡してるに等しいのだから、「参照渡し」改め「変数渡し」でいいじゃん…。~~すくなくとも「変数に相当するものへの参照を渡している」には違ないはず(参照が変数を指さないのであれば、実装依存になるし、標準化の際にはそれを意図していないだろうし)。
24
+ すくなくとも「変数に相当するものへの参照を渡している」といった仕組みでしょうし(参照という言葉が変数に対する参照を指さないのであれば、実装依存になるし、標準化の際にはそれを意図していないだろうし)、「参照渡し」改め「変数渡し」とすれば気になることもなくなると思いますが
37
25
 
38
- そう考えると、頭に変数つけると…「共有渡し」もヤバくて、「変数を共有で渡す」と捉え得る。そもそも「参照渡し」自体が言葉たらずで、値の在り方と合わせて語る際にはなおさらなんだとおもいます。
26
+ そう考えると、頭に変数つけると…「共有渡し」もヤバくて、「変数を共有で渡す」と捉え得る。そもそも「参照渡し」自体が言葉たらずで、値の在り方と合わせて語る際にはなおさらなんだとおもいます。
27
+
28
+ 「call by sharing」もやばげで、何を共有してるのかわからないですよね。オブジェクトじゃなくて変数に相当するものじゃないの?と。

8

xx

2019/04/23 18:52

投稿

退会済みユーザー
answer CHANGED
@@ -21,6 +21,8 @@
21
21
 
22
22
  ### 言語の開発者: 実装において抽象的な型(値型や参照型)で、渡し方の処理を分ける必要があるなら便宜上「参照の値渡し」**
23
23
 
24
+ 「値渡し/参照渡し」について特定の言語に限らない概念とするとき(あるかないかは別としてデザインパターンのようなものとするとき)、言語や実装に依存する事柄については分けるべきと思い、分けることを提案しました。見出しはその一例です。
25
+
24
26
  C#でいう値型と参照型それぞれで**渡し方の処理に違いがあるなら**、便宜上「参照の値渡し」でいいと思います。前半は言語に依存する呼び方、後半は「値/参照渡し」パターン共通の呼び方かな~と。「あくまでそのシステム/フレームワーク内での呼び名」という意味合いです。
25
27
 
26
28
  > 対訳となる英語なし。Java等における実装を示す名称と思われますが、Rubyの即値のように実装上は値渡しになる場合は、どう解釈すべきかも併せて説明ください。

7

xx

2019/04/23 17:47

投稿

退会済みユーザー
answer CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  ではなぜ一緒くたになるのか。
15
15
 
16
- 1つ目: あらかじめ「値の在り方」について理解していないから。理解のないまま、代入や引数などで躓き、「値の渡し方」と一緒くたにして考えてしまう(「箱にモノを入れる説明」や、それを連想する「代入という言葉」はあまり良くないのかも、割当てのほうが適切かな~?)。
16
+ 1つ目: **あらかじめ「値の在り方」について理解していないから**。理解のないまま、代入や引数などで躓き、「値の渡し方」と一緒くたにして考えてしまう(「箱にモノを入れる説明」や、それを連想する「代入という言葉」はあまり良くないのかも、割当てのほうが適切かな~?)。
17
17
 
18
18
  2つ目: 本来は避けるべきだった説明をしなくてはならないから。「参照(C#でいう参照型)」と「参照(参照渡しで言う参照)」で言葉が被ってしまっているせいで、「値の値渡し」、「値の参照渡し」、…と4通りの組み合わせを例示しないと、初学者がそれぞれの「参照」を別物だと明確に切り分けられないから(2つの参照は多分別物、多分実装依存)。2つは別物であることを明確にするためだけに必要に思えます。
19
19
 
@@ -21,7 +21,7 @@
21
21
 
22
22
  ### 言語の開発者: 実装において抽象的な型(値型や参照型)で、渡し方の処理を分ける必要があるなら便宜上「参照の値渡し」**
23
23
 
24
- C#でいう値型と参照型それぞれで渡し方に違いがあるなら、便宜上「参照の値渡し」でいいと思います。前半は言語に依存する呼び方、後半は「値/参照渡し」パターン共通の呼び方かな~と。「あくまでそのシステム/フレームワーク内での呼び名」という意味合いです。
24
+ C#でいう値型と参照型それぞれで**渡し方の処理に違いがあるなら**、便宜上「参照の値渡し」でいいと思います。前半は言語に依存する呼び方、後半は「値/参照渡し」パターン共通の呼び方かな~と。「あくまでそのシステム/フレームワーク内での呼び名」という意味合いです。
25
25
 
26
26
  > 対訳となる英語なし。Java等における実装を示す名称と思われますが、Rubyの即値のように実装上は値渡しになる場合は、どう解釈すべきかも併せて説明ください。
27
27
 

6

修正

2019/04/23 17:33

投稿

退会済みユーザー
answer CHANGED
@@ -1,1 +1,36 @@
1
+ 私の回答としては次の通りです(ある程度知っている言語はC++、C#、JSあたりです)。
2
+
3
+ **言語のユーザー: 名称無し**
4
+ **言語の開発者 : 実装において抽象的な型(値型や参照型)で、渡し方の処理を分ける必要があるなら便宜上「参照の値渡し」**
5
+
6
+ ### 言語のユーザー: 名称無し
7
+
8
+ 「値の在り方」と「値の渡し方」を一緒にして語る必要はありません。ひとまずは分けて考えるべきでそれで十分に思えます。
9
+
10
+ > 評価戦略についてそれぞれ名前をつけてカテゴライズすること自体が間違っているということ。なぜ、そういったカテゴライズすること自体が間違っているのかを説明ください。
11
+
12
+ 一緒にして考えることがなければ、組み合わせにはならないのでカテゴライズする必要がなくなります。
13
+
1
- 修正中す、ごめんさい
14
+ ぜ一緒くたになるのか。
15
+
16
+ 1つ目: あらかじめ「値の在り方」について理解していないから。理解のないまま、代入や引数などで躓き、「値の渡し方」と一緒くたにして考えてしまう(「箱にモノを入れる説明」や、それを連想する「代入という言葉」はあまり良くないのかも、割当てのほうが適切かな~?)。
17
+
18
+ 2つ目: 本来は避けるべきだった説明をしなくてはならないから。「参照(C#でいう参照型)」と「参照(参照渡しで言う参照)」で言葉が被ってしまっているせいで、「値の値渡し」、「値の参照渡し」、…と4通りの組み合わせを例示しないと、初学者がそれぞれの「参照」を別物だと明確に切り分けられないから(2つの参照は多分別物、多分実装依存)。2つは別物であることを明確にするためだけに必要に思えます。
19
+
20
+ 本当に名付けるべきは「値の在り方」という概念(?)に思えます。「代入」や「引数」の話に任せちゃってるのがまずいのかも。
21
+
22
+ ### 言語の開発者: 実装において抽象的な型(値型や参照型)で、渡し方の処理を分ける必要があるなら便宜上「参照の値渡し」**
23
+
24
+ C#でいう値型と参照型それぞれで渡し方に違いがあるなら、便宜上「参照の値渡し」でいいと思います。前半は言語に依存する呼び方、後半は「値/参照渡し」パターン共通の呼び方かな~と。「あくまでそのシステム/フレームワーク内での呼び名」という意味合いです。
25
+
26
+ > 対訳となる英語なし。Java等における実装を示す名称と思われますが、Rubyの即値のように実装上は値渡しになる場合は、どう解釈すべきかも併せて説明ください。
27
+
28
+ 実装上は値渡しであれば、値渡しと呼べばいいかと。まずいかな?
29
+
30
+ ### 蛇足:「参照渡し」という紛らわしい呼び名について
31
+
32
+ C#のような「参照型」を持つ言語では「参照渡し」という命名を見直すべきでしょう。また、「参照型」相当のものを持つ言語も多いため、言語全般の話題で語る際には「参照渡し」という呼び名は避けるべきかと。難しくはないけど現に衝突したり誤解されています。
33
+
34
+ ~~そもそも、変数をそのまま渡してるに等しいのだから、「参照渡し」改め「変数渡し」でいいじゃん…。~~すくなくとも「変数に相当するものへの参照を渡している」ことには違いないはず(参照が変数を指さないのであれば、実装依存になるし、標準化の際にはそれを意図していないだろうし)。
35
+
36
+ そう考えると、頭に変数つけると…「共有渡し」もヤバくて、「変数を共有で渡す」と捉え得る。そもそも「参照渡し」自体が言葉たらずで、値の在り方と合わせて語る際にはなおさらなんだとおもいます。

5

xx

2019/04/23 17:32

投稿

退会済みユーザー
answer CHANGED
@@ -1,24 +1,1 @@
1
- そもそもなぜややこしくなっているかを考えないと意味がありませんし、特定の言語の概念から言語全体への話に昇格させるのであればなおさら本末転倒です(そもそも適切な問題であるかということ)。
2
-
3
- ややこしくなった原因は「参照渡し(call by reference)」という表現にあることは間違いありません。ではそもそも「参照」とは何かを考えてみましょう…?
4
-
5
- アドレスやポインタという言語を特定するような具体的な言葉から脱却し、より抽象的な概念として「参照」という言葉が用いられますが、その場合、「オブジェクトを含めた値に対しての参照」というものを指すと思います。
6
-
7
- 対して、「参照渡し」の「参照」は、言語の実装に左右される変数そのものに対する「参照」を指しており、値やオブジェクトと並列に語れる「参照」ではありません。それを指すとするならば、アドレスやポインタが操作できる(言語もありえる)という意味合いが含まれてしまいますが、まったくそれを許さない概念であり、むしろ区別すべきものだと理解しています。
8
-
9
- 「参照渡し」の表現に「参照」や「reference」という言葉を安易に使ったのは間違いです。ポインタに相当するものがある言語なら問題ないでしょうが、「参照型」の存在するような言語においてはなおさら表現に気を付けるべきだったでしょうし。
10
-
11
- 以上を踏まえ、表現を見直すとするならば次のようなのはどうですか(これも微妙か…ほかに表現が指すものが適切かつ一義であればそれでいい)。
12
-
13
- 「参照渡し」     ⇒「変数渡し」
1
+ 修正中です、ごめんなさい
14
- --<< 文脈の壁 >>---------------------------------------------------
15
- 「値型の値渡し」   ⇒「値操作(値渡し、値代入)」
16
- 「参照型の値渡し」  ⇒「参照操作(参照渡し、参照代入)」
17
- 「ポインタ型の値渡し」⇒「ポインタ操作(参照渡し、ポインタ代入)」
18
- 「自動変換されて値渡しされるケース」  ⇒「暗黙的な型変換を伴う操作?」
19
-
20
- 下半分はわざわざ呼ぶことなんてないでしょうが。値そのものをやり取りするのではなく、参照としてやりとりするという概念に対する呼び名はあってもよいかもですね(既にある気もするが、ないならないでない・・・)
21
-
22
- そもそも、値のやり取りに関してまず注目されるものは「手段」ではなく、「どのような値か」ということです。そのあたりがごっちゃになり、「特別」のほうが「基本」を食っちゃってるのもややこしい原因で、C#で2x2で表現されるのもそのせいです(「何を渡しているか」に注目しているわけじゃないと説明するために、区別のつく表現をしなくちゃならない)。
23
-
24
- ※「参照渡し」の概念はまだ一部の言語における仕様の域を脱しておらず、そのうち脱した際にそのままの呼び名で広まるとややこしいままになるんじゃ?…という前提で書いてます。

4

追記

2019/04/23 16:41

投稿

退会済みユーザー
answer CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  「参照渡し」の表現に「参照」や「reference」という言葉を安易に使ったのは間違いです。ポインタに相当するものがある言語なら問題ないでしょうが、「参照型」の存在するような言語においてはなおさら表現に気を付けるべきだったでしょうし。
10
10
 
11
- 以上を踏まえ、表現を見直すとするならば次のようるでしょう。
11
+ 以上を踏まえ、表現を見直すとするならば次のようなのはどですか(これも微妙か…ほかに表現が指すものが適切かつ一義であればそれでいい)
12
12
 
13
13
  「参照渡し」     ⇒「変数渡し」
14
14
  --<< 文脈の壁 >>---------------------------------------------------

3

追記

2019/04/23 12:59

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,4 @@
1
- そもそもなぜややこしくなっているかを考えないと意味がありませんし、特定の言語の概念から言語全体への話に昇格させるのであればなおさら本末転倒です。
1
+ そもそもなぜややこしくなっているかを考えないと意味がありませんし、特定の言語の概念から言語全体への話に昇格させるのであればなおさら本末転倒です(そもそも適切な問題であるかということ)
2
2
 
3
3
  ややこしくなった原因は「参照渡し(call by reference)」という表現にあることは間違いありません。ではそもそも「参照」とは何かを考えてみましょう…?
4
4
 
@@ -12,11 +12,13 @@
12
12
 
13
13
  「参照渡し」     ⇒「変数渡し」
14
14
  --<< 文脈の壁 >>---------------------------------------------------
15
- 「値型の値渡し」   ⇒「値渡し」
15
+ 「値型の値渡し」   ⇒「値操作(値渡し、値代入)
16
- 「参照型の値渡し」  ⇒「参照渡し」
16
+ 「参照型の値渡し」  ⇒「参照操作(参照渡し、参照代入)
17
- 「ポインタ型の値渡し」⇒「ポインタ渡し」
17
+ 「ポインタ型の値渡し」⇒「ポインタ操作(参照渡し、ポインタ代入)
18
- 「自動変換されて値渡しされるケース」  ⇒「<変換後の型名>渡し
18
+ 「自動変換されて値渡しされるケース」  ⇒「暗黙的な型変換を伴う操作?
19
19
 
20
+ 下半分はわざわざ呼ぶことなんてないでしょうが。値そのものをやり取りするのではなく、参照としてやりとりするという概念に対する呼び名はあってもよいかもですね(既にある気もするが、ないならないでない・・・)
21
+
20
22
  そもそも、値のやり取りに関してまず注目されるものは「手段」ではなく、「どのような値か」ということです。そのあたりがごっちゃになり、「特別」のほうが「基本」を食っちゃってるのもややこしい原因で、C#で2x2で表現されるのもそのせいです(「何を渡しているか」に注目しているわけじゃないと説明するために、区別のつく表現をしなくちゃならない)。
21
23
 
22
24
  ※「参照渡し」の概念はまだ一部の言語における仕様の域を脱しておらず、そのうち脱した際にそのままの呼び名で広まるとややこしいままになるんじゃ?…という前提で書いてます。

2

xx

2019/04/23 12:56

投稿

退会済みユーザー
answer CHANGED
@@ -17,4 +17,6 @@
17
17
  「ポインタ型の値渡し」⇒「ポインタ渡し」
18
18
  「自動変換されて値渡しされるケース」  ⇒「<変換後の型名>渡し」
19
19
 
20
+ そもそも、値のやり取りに関してまず注目されるものは「手段」ではなく、「どのような値か」ということです。そのあたりがごっちゃになり、「特別」のほうが「基本」を食っちゃってるのもややこしい原因で、C#で2x2で表現されるのもそのせいです(「何を渡しているか」に注目しているわけじゃないと説明するために、区別のつく表現をしなくちゃならない)。
21
+
20
- ※「参照渡し」の概念はまだ一部の言語における仕様の域を脱していなという前提で書いてます
22
+ ※「参照渡し」の概念はまだ一部の言語における仕様の域を脱しておらず、そのうち脱した際にそのままの呼び名で広まるとややこしままにるんじゃ?…という前提で書いてます

1

xx

2019/04/23 12:52

投稿

退会済みユーザー
answer CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  アドレスやポインタという言語を特定するような具体的な言葉から脱却し、より抽象的な概念として「参照」という言葉が用いられますが、その場合、「オブジェクトを含めた値に対しての参照」というものを指すと思います。
6
6
 
7
- 対して、「参照渡し」の「参照」は、言語の実装に左右される変数そのものに対する「参照」を指しており、値やオブジェクトと並列に語れる「参照」ではありません。それを指すとするならば、アドレスやポインタが操作できる(言語もありえる)という意味合いが含まれてしまいますが、まったくそれを許さない概念であり、区別すべきものだと理解しています。
7
+ 対して、「参照渡し」の「参照」は、言語の実装に左右される変数そのものに対する「参照」を指しており、値やオブジェクトと並列に語れる「参照」ではありません。それを指すとするならば、アドレスやポインタが操作できる(言語もありえる)という意味合いが含まれてしまいますが、まったくそれを許さない概念であり、むしろ区別すべきものだと理解しています。
8
8
 
9
9
  「参照渡し」の表現に「参照」や「reference」という言葉を安易に使ったのは間違いです。ポインタに相当するものがある言語なら問題ないでしょうが、「参照型」の存在するような言語においてはなおさら表現に気を付けるべきだったでしょうし。
10
10
 
@@ -15,4 +15,6 @@
15
15
  「値型の値渡し」   ⇒「値渡し」
16
16
  「参照型の値渡し」  ⇒「参照渡し」
17
17
  「ポインタ型の値渡し」⇒「ポインタ渡し」
18
- 「自動変換されて値渡しされるケース」  ⇒「<変換後の型名>渡し」
18
+ 「自動変換されて値渡しされるケース」  ⇒「<変換後の型名>渡し」
19
+
20
+ ※「参照渡し」の概念はまだ一部の言語における仕様の域を脱していないという前提で書いてます