outとreturnのどちらが効率がいいのでしょうか?
C#での話です。
以下の2つのコードはメモリ使用に関して、どちらの方が効率(合理的)がいいのでしょうか?
該当のソースコード
C#
1// その1 2List<string> funcA(List<string> strList) 3{ 4 // strListに関する処理。追加したり、削除したり。例えば以下の通り。 5 for(int i = 0; i < strList.Count; i++) 6 { 7 if (strList[i] == "abc") 8 strList[i].RemoveAt(i); 9 } 10 return strList; 11}
C#
1void funcB(ref List<string> strList) 2{ 3 // strListに関する処理。追加したり、削除したり。例えば以下の通り。 4 for(int i = 0; i < strList.Count; i++) 5 { 6 if (strList[i] == "abc") 7 strList[i].RemoveAt(i); 8 } 9 10 return; 11}
メモリに詳しくはないのですが、その1はList<>を新しく作っているような感じで、その2はList<>をそのまま返しているような気がします。
自分としては、「感じで」「気のせいで」というぐらいの知識なので、どうにも自信がありません。
(その2はrefは必要ないかもしれませんが、つまり引数で返すということを示したつもりです。)
よろしくお願いします。
効率はほぼ同じですが、微妙な効率化よりもバグの入りにくいコードが推奨されます。その点で、中身のまずさは別にしても、List を引数にして書き換える副作用を持つこの二つのコードはどちらも良くありません。
> その1はList<>を新しく作っているような感じで、その2はList<>をそのまま返しているような気がします。
ここから認識が間違っていると見えます.
回答ではありません。
Zuishinさんの意見と同じです。
fanaさんが指摘しているように理解は不十分に思います。
もっと混乱するかもしれませんが、下記を理解できれば良いと思います。
https://ufcpp.net/study/csharp/sp_ref.html
その1で戻り値をviodに変更しても、読み出し元では、変化があることに注意。
質問者さん、最初の投稿以来無言ですが、多々回答がされていますのでそれらに対するフィードバックを返してください。役に立った/立たなかったぐらいの返事はすぐ返せるはず。役に立たなかったならどこが質問者さんの期待と違うのかも書いていただけるとありがたい。とにかく無言は NG です。マナー的にも。