- ベストアンサー
関数をまとめる方法と、その利点
- 関数をまとめる方法として、複数の機能を持つ関数を作成し、引数で機能を制御する方法があります。
- この方法では、関数の中身を確認しながらプログラムを書く必要がありますが、機能ごとにまとまりがあり、可読性を高めることができます。
- 一方で、関数を細かく分ける方法でも同じ結果を得ることができますが、関数の数が増えるため、管理が複雑になる可能性があります。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
どういうケースで関数化すると良いのか迷ってらっしゃることと思います。 基本的には(ざっくり言うと) ・意味のある複数行の処理 ・複数回出現する処理 を関数化します。 個人的にはデザインパターンの本などを一度読まれるとすっきりするのではないかと思います。 リファクタリングの本なども関数化の指標を示してくれますのでお勧めです。 ご質問の件では関数化する意味もメリットもなく、他の人がこのソースを読んだ時に 意図が不明で読む効率を低下させます。 話は変わりますが、ちょっとした処理ならマクロ関数で #define add(x,y) (x+y) とする手もあります。 このケースではオススメしませんけど。
その他の回答 (6)
- TT414
- ベストアンサー率18% (72/384)
>#define add(x,y) (x+y) >とする手もあります。 >このケースではオススメしませんけど。 このケースどころか、人に勧める以前に、発表するだけでも恥ずかしい記述です。 ど素人以外は「#define add(x,y) ((x)+(y))」と記述します。
- akayoroshi
- ベストアンサー率50% (46/91)
質問者の意図を汲んでいないかもしれませんが、やっている内容が同じような関数をまとめておきたいのなら、名前空間を使うのはどうですか。 namespace arithmetic_operations { int add(int a, int b) { return a + b; } int multi(int a, int b) { return a * b; } } #include<iostream> int main(void) { int a = 4; int b = 3; std::cout << arithmetic_operations::add(a, b) << std::endl; std::cout << arithmetic_operations::multi(a, b) << std::endl; }
- kmee
- ベストアンサー率55% (1857/3366)
わたしなら、この形ではやりませんね。 これって、このまま進めたら「main関数に全部書く」のが「一番まとまっている」ってことになります。 add,multi等を場合によって使い分けるなら、関数オブジェクトとかポインタとか。 switchで分岐するにしても nt arithmetic_operations(int a, int b, CalcOperator pattern) { switch(pattern) { case CALC_ADD: retrun add(a , b); case CALC_MULTI: return multi( a, b); (以下略) などと、元の関数はそのままにします。 分岐が少なく、回数も1箇所なら、そのままmainに書くこともあります。
- OKWavex
- ベストアンサー率22% (1222/5383)
どっちもかわりません わざわざまとめるひつようあるか?と思ってしまうていどのものですし・・・
- Tacosan
- ベストアンサー率23% (3656/15482)
関数オブジェクトなり関数へのポインタなりを使えば「中をとった」ようには見えるでしょう. 今ならラムダか?
- wormhole
- ベストアンサー率28% (1626/5665)
add()とmulti() 見た目同じだけど、やっている内容は違いますし arithmetic_operations()だと引数patternのチェックもする必要がありますし、 arithmetic_operations()と書かれたソースを見たところで何をやってるのかわかりませんから。 arithmetic_operations()は、処理の複雑化+難読化した上、それに目をつぶれるだけのメリットがあるわけでもない。 と私は思いますが。