- pollyanna1991
- 1675
- 0
- 1
- 0
わざわざ同じ機能の破壊型(入力変数に値を上書きして出力しちゃう、hoge2みたいな)関数と非破壊型の関数(hoge1みたいな)の作ってしまっているのが分かりにくい原因になってる気もする。すみませぬのう
2011-08-22 23:42:37何をやっているかは分かるんだけども、実用性というか、どうしてそうするのかというか、その便利さというのが実感できない。これは私が普段からプログラミングをしているわけじゃないから仕方がないっちゃ仕方がない。
2011-08-22 23:45:12@pollyanna1991 メリット:戻り値では1個しか数値を外に送りだせないが、refer使えば何個も送りだせます。グローバル変数だと嫌な理由:とても汎用的な計算に使う関数なので、特定のグローバル変数を使うとコードがこんがらがりやすくハマりやすくなります。
2011-08-22 23:49:40これをグローバル変数にしたくないあたりが実感できないうちは、昔わかばさんが言ってたように「グローバル変数は作るな!」でいいのかもしれない。
2011-08-22 23:51:08「戻り値でベクトル返せないのがそもそもおかしいじゃん」というのはそのとおりで、「クラスか構造体をSpEでサポートしてよ!お願い!」となります(汗)
2011-08-22 23:53:22@pollyanna1991 じゃもうちょっと基本から。hogehogeという関数を、event_sampleという関数内で使う場合を考えます。
2011-08-23 00:00:09@pollyanna1991 hogehogeという関数は int hogehoge(int input_a){ int rtn; rtn = input_a + 1; return(rtn); } とします。
2011-08-23 00:00:56@pollyanna1991 event_sampleと言う関数はたとえば void event_sample(){ int x, result; x=0; result = hogehoge(x); //何かresultを使う処理。省略 } とします。
2011-08-23 00:02:33@pollyanna1991 event_sampleを実行すると、中でhogehogeを実行しようとするわけですが、そのときevent_sample側のローカル変数xの中身が、hogehoge側のローカル変数input_aにコピーされます。
2011-08-23 00:12:03@pollyanna1991 で、hogehoge内で計算が進み、hogehoge内のローカル変数rtnの内容が、戻り値としてevent_sample側に戻ってきて、event_sample側のローカル変数resultに代入されます。普段の動作はこんな感じ。
2011-08-23 00:16:27@yumeno_star return(rtn);は計算結果としてrtnを戻しますよ、ということですか?ちょっと戻り値というものに対する理解が怪しいです。
2011-08-23 00:08:34@pollyanna1991 そですね、rtnは1になります。voidは、型がないってことで、戻り値や引数の指定で使うと「戻り値が無い/引数が無い」って意味になります
2011-08-23 00:19:46@pollyanna1991 この場合は「event_fuinc関数自体は戻り値が無い」ってことです。event_funcを実行する側でa=event_func()とかできないよ、ってこと。
2011-08-23 00:24:12