値渡しと参照渡し
値渡し
参照渡し
どう使い分けるべきか?bsahd.icon
必要に応じて使い分けるので、参照わたしが必要な場合を羅列したらどう使うのかわかりそう基素.icon
前提として「値渡し」と「参照渡し」って言葉で何を言おうとしてるのかはっきりさせた方がいいと思うnishio.icon
/nishio/参照の値渡し
yuta0801.iconさんがJSの文脈で詳しく調べてた覚えtakker.icon
JavaScriptに参照渡し/値渡しなど存在しない #ポエム - Qiita
(private)/yuta0801/「javascriptに参照渡し/値渡しなど存在しない」
Claude 3.5 Sonnet.icon
値渡しが必要なケース:
- データの独立性を保証したい時
- イミュータブルな操作を行いたい時
- セキュリティ上の理由でデータの直接アクセスを防ぎたい時
- 並行処理や並列処理で安全にデータを扱いたい時
- 関数型プログラミングのパラダイムに従いたい時
- デバッグやトレースを容易にしたい時
- プリミティブ型のデータを扱う時
参照渡しが必要なケース:
- 大きなデータ構造を効率的に扱いたい時
- 関数内で元のデータを直接修正したい時
- 複数の値を返す必要がある時
- コールバック関数を実装する時
これはよくあるMijinko_SD.icon
コールバック関数を通して関数(もしくはイベント)呼び出し元の変数を書き換えたい場面は往々にしてあるMijinko_SD.icon
- イテレータやジェネレータを実装する時
- オブジェクト指向プログラミングでのオブジェクト操作を行う時
- 再帰関数での深い階層のデータ操作を行う時
- インプレースでの配列やコレクションの操作を行う時
- 複数のオブジェクト間で状態を共有する時
- データベース接続やファイルハンドルを管理する時
- ビューやプロキシパターンを実装する時
- マルチスレッド環境での共有リソースにアクセスする時
- メモリマッピングファイルを操作する時
- グラフィックスプログラミングで画像データを操作する時
- 動的メモリ割り当てを最小限に抑えたい時​​​​​​​​​​​​​​​​
Mijinko_SD.icon
細かいことはClaude 3.5 Sonnet.icon氏が列挙してるけど
JavaScriptやPythonでは基本的に意識して使い分けるようなことは無くて、値がミュータブルかイミュータブルかで使い分けるぐらいしかなさそう
ミュータブルだけど代入先と代入元で独立させたい時はディープコピーする
そこで参照渡しの概念があるC++とかの話になってくるけれど
値を独立させる必要がない場合やメモリ消費量を抑えたい場合は参照渡し
それ以外は値渡しな気がする
数値とか文字列とかは値を複製してもメモリ消費量はそこまで増えないので、(参照渡しをしたことによる不意のバグをさける為にも)値渡しでいいと思う