以前シャローコピー、ディープコピーとはという質問をしたのですが、「値渡し」や「参照渡し」という用語は引数で渡すときしか使わないというコメントと、代入でもその用語を使うというコメントをいただいたのですが、どちらがより正しいのでしょうか?
また、シャローコピーは、1段だけコピーすることという回答に対して1段だけコピーすること=シャローコピーではないという回答をいただきましたが、どちらが正しいのでしょうか?
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
このあたり、言葉だけじゃなくて、箱と矢印を使った絵が、入門書にはきっと載っていると思いますので、書籍を参照されるのも良いかと思います。
まず、「値渡し」「参照渡し」ですが、言葉をどう使うのかは人の自由ですが、本来的な意味では引数でだけ使います。代入も、引数受け渡しと概念が似ているので、転用する人もいるのでしょう。
英語だと、「call by value」「call by reference」と、「call」が入りますので、代入では使えません。
「1段だけコピーすること=シャローコピーではない」については言葉の意味としてはその通りで、三段階に参照で繋がったオブジェクトの場合、1段だけコピーも、2段だけコピーもシャローコピーです。三段全部コピーして初めてディープコピーです。参照の矢印で繋がった先端まで全部コピーしない限りはオブジェクトの共有が起こります。
投稿2017/10/04 03:06
総合スコア86260
0
以前の質問のベストアンサーに一票ですが、当事者じゃ無い人の意見が求められてるのかなと思い、回答してみます。
前提として、用語の意味は常に文脈に依存して変わりますので、何が一般的で何が特殊かという風にとらえたほうが良いと思います。
「値渡し」や「参照渡し」という用語は引数で渡すときしか使わない
一般論として正しいと思います。
ただし、質問者さんが注目すべきは言葉を「使う」、「使わない」よりも、 「値渡し」や「参照渡し」というのは、仮引数を変数として参照した場合にどう解釈されるかの話であるのに対して、シャローコピー、ディープコピーはメモリ上の配列や構造体などのコピーという処理を行う際にどのような動作になるかという処理内容の話です。
微妙なのは C言語の構造体代入のように、代入と言っておきながらコピーしたりするものがあるので若干混乱しますが、そんな特殊な場合を除くと、明示的にコピーしろと言わない限り、変数の代入や引数渡しで配列や構造体のコピーが行われることはありません。
また、シャローコピーは、1段だけコピーすることという回答に対して1段だけコピーすること=シャローコピーではないという回答をいただきましたが、どちらが正しいのでしょうか?
何か言葉の遊びのようで、なんとも言えませんが、シャローコピーとディープコピーを比較する文脈では「1段だけコピーすること」と言って差し支えないと思います。
投稿2017/10/04 00:22
編集2017/10/04 00:25総合スコア3401
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
「シャローコピー」という言葉に明確な定義があるわけでもないのだろうと思いますが、deigoさんの『シャローコピーは参照の参照渡し』という説明には強い違和感を覚えました。
javascriptのコードで書くと、「シャローコピー」とは以下のようなものであると考えています。
javascript
1arrClone = arr.slice();
一方、『参照の参照渡し』とは、javascriptで書くとこうだと思います。
javascript
1arrClone = arr;
わざわざ「シャローコピー」という言葉を使う必要があるかな、と思いました。
また、
「値渡し」や「参照渡し」という用語は引数で渡すときしか使わない
これについてはそのとおりではあるんですが、「ディープコピー」を関数なしで処理するのは難しいので(スプレッド演算子による値展開もSymbol.iterator()を介してますので)、まあそんな固いことを言わなくても、と思います。
投稿2017/10/04 02:12
総合スコア37377
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/04/10 07:55

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。