どちらでもいい、個人の好きずきで良い内容かも知れませんが参考に皆様の意見を聞きたいです。
javaで言えばアクセス修飾子privateで一度しか使わないメソッドですが、コードが長くなる際は、このようなメソッドを作ると可読性が良くなるとか、複数回使うときがあるかも知れないのであっても良いと伺った事がありますが、個人的にメソッドが沢山あるのがわかりにくく感じます。c言語とかだとヘッダーファイルのコードが増えるし面倒なのではないでしょうか。また、プログラムの最適化の観点でも余分なメソッドを作る影響はないのでしょうか。こういうメソッドの必要性について皆さんのご意見を頂けたらとおもいます。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答11件
0
ベストアンサー
個人の趣向や感覚、熟練度などによって違ってくるので一概には言えませんが、単純に一部の処理を切り取ってメソッドにしてしまっているために、却って読みにくくなっているコードはありますね。
・・・・・・
何度も使うメソッド、標準関数や標準APIを使う場合に、それらの中身をいちいち確認したりしないですよね?
それと同じように、一度しか使わないメソッドも、適切に分割して作られたものなら読みやすくなるはずです。
分割する際は、メソッド名も重要になります。
・・・・・・
分岐が複雑になっている箇所は、具体的な処理の部分をメソッドに分けることで、見通しが良くなり、処理の流れが分かりやすくなるメリットがあります。
※追記:このif文全体が1画面に収まる30~50行程度であれば、そのままの方が見通しが良いので分割しない方が良いと思います。全部では無く、処理が長くてひとまとまりのところだけをメソッドに切り出して、1画面に収まればOKです。
(Chironianさんにご指摘いただきました。)
lang
1if ( ... ) { 2 while ( ... ) { 3 // メソッド 4 } 5} 6else if ( ... ) { 7 if ( ... ) { 8 // メソッド 9 } 10else { 11 // メソッド 12}
・・・・・・
Javaで言えば、private
にしないで、デフォルトアクセスにして、かつstatic
にできるように分割することで、単体テストがしやすくなります。
言い換えると、単体テストがしやすいようにメソッドを切り出すことが重要です。
private
にしないことについては異論があるかと思いますが、私は単体テストの利便性を取ります。
・・・・・・
メソッド呼び出しによるパフォーマンスへの影響は、皆無ではありませんが、一度だけ呼ばれるものならほとんど無視して良いものだと思います。
まとめると、1度しか使わないメソッドは、必ずしも要るとは言えません。
下手に分割するくらいならしないほうが良いです。
適切に分割されていれば、読みやすくなると思います。
(追記)
書き忘れましたが、
この辺の話は、リファクタリングとも関係してきますね。
投稿2015/11/12 04:05
編集2015/11/13 03:16総合スコア9394
0
自分は「機能の一部をメソッドにする」ということは、ベースソースに「ブラックボックスを置く」ようなものだと思っています。
いくらわかりやすい名前であったとしても、実際にメソッドの中の処理を見るまでは何が行われているのかわかりません。
それを踏まえて、自分がメソッドにしたほうがよいと思う基準は、
- パラメータを変えるなどして繰り返し利用できるロジック
- 長すぎる、またはネストが深すぎる部分
などです。
メンテナンス性・可読性を考慮したもので、morisakisanの判断基準とほぼ同じだと思います。
逆にメソッドにしないほうがよいと思う基準は
- メソッドにせず直接記述したほうが処理内容がわかりやすいもの
- 繰り返し利用しない数行程度のロジック
といったところです。
例えば計算式のようなものはよほど繰り返し利用するものでない限り直接記述されていたほうがわかりやすいです。
ただし頻出する計算式で、後に修正される可能性がある場合などはメンテナンス性を考慮してメソッド化したほうがいい場合もあります。
上記からは少し外れますが、
- 再利用の予定はないが、メソッドとして提供されている類似機能がある場合
も機能単位の統一化という意味でメソッドにする場合があります。
郷に入れば・・・ではないですけれど、まわりのコードになじませるという意味合いが強いですね。
自分なりの判断基準を上げさせていただきましたが、最終的にはあとからそのソースコードを改修する人の立場に立ち、可読性とメンテナンス性からどちらが適切か判断すればいいと思います。
投稿2015/11/12 04:54
編集2015/11/12 04:56総合スコア3013
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
言語によって文化は違いますが、Rubyの場合はむしろ「1つ1つのメソッドの短さ」を重視する傾向にあります。何かしらの「意味のかたまり」があれば、1つのメソッドにくくりだす、ぐらいの勢いです。
投稿2015/11/12 04:15
総合スコア145932
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
コマンドラインでつかえるツールを作る場合を考えます。
パラメータに -v を指定したら バージョンを表示するという機能を持たすことが多いはずです。
バージョンを表示するロジックは、通常は箇所にだけ書くはずです。
みなさんは、その処理をどのようにかきますか?
パラメータ解析部分中にロジック添加して書く、
show_version() のようなメソッドを作ってそれを呼びだすように書く。
show_version() メソッドをつくることを選択することが多いのではないでしょうか?
そうする動機は何でしょう?
他の方の回答にもありますが、
メソッドとして独立させる動機は、呼び出し回数だけではありません。
処理粒度の単位でメソッドを分けるということも大きな動機になります。
個人的にメソッドが沢山あるのがわかりにくく感じます
これも数だけが問題なのではありません。
多機能なプログラムなら、メソッドの数は増えます。
メソッド分割の階層、分類に統一性があると理解がしやすくなるです。
弱にメソッド数がすくなかったとしても、理解しにくくなる例もあります。
驚嘆な例ですが、処理の粒度を無視して、 行数が多くなった処理を 単純に 10行毎に
メソッドに分けるとしたら、理解、テスト、保守がしにくくなるでしょう。
最適化の観点
メソッド呼び出しのオーバーヘッドは1度しか呼ばないなら全く問題にはならないはずです。
処理速度には、オブジェクト生成、ガベージコレクト、 Disk IO, ネットワーク処理といったことが大きな要因になることが多いです。
投稿2015/11/12 15:41
編集2016/01/29 13:56総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
私は下記の条件に従って作っています
- 名前がつけやすいもの
- 作用が明確であるもの
- 同じ値を投げ込めば常に同じ値が帰る事が想定されるもの
1度のみ使う使わないかは条件ではありません。
良い名前を付けて分類出来るならどんどん名付けて仕分けて行くべきだと思ってます。
このロジックの分割をどんどん体験することでプログラミングも上達していくと思いますしね。
逆に言えば良い名前が思いつかないなら関数やメソッドにするべきではないと思います。
投稿2015/11/12 13:14
総合スコア21194
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
何も考えずにただ分ければいいと言った感じで
あまり細かく分けるのも読みづらいと思います。
天下り的ですが、読みやすければ適切に抜き出せている
そうでなければ適切でない抜き出し方をしている事になると思います。
(適切なまとめ方なら名前もわかりやすいはず)
再利用云々はその時が来たら抜き出せばいい話です。
ただ、抽象度を揃えるために抜き出すことはあります。
c言語とかだとヘッダーファイルのコードが増える
javaで言うprivateなメソッドは要するに外部に公開しないということなので、
Cだとstatic関数になり、ヘッダーは特に変わらないと思います。
投稿2015/11/12 04:04
編集2015/11/12 04:35総合スコア13551
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
自分はJavaでEclipseを使った開発が主で、かつ複数人で開発するか
あるいは運用中であるものに関わっていますが、
「絶対に1回しか使わない」と確信が持てるなら分ける必要はないです。
1)複数のクラスで読む可能性がある(ユーティリティ系)処理はクラスごと分ける
2)単独のクラスでしか読まないが、何回も出現する→メソッドを分ける
大まかにこんな感じですかね。
Eclipseが適度にわかりやすくしてくれるので、細かく分けられても追えないわけではありません。
テキストエディタで見ろと言われたら発狂します。
無駄に分けられると隠されてしまうので好みではありませんが…。
ただ、コード規約でどうしても分割せざるを得ないなど、規約を守らないといけないのであれば分けざるを得ないでしょう。
投稿2015/11/12 03:46
総合スコア856
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こんにちは。
私もmorisakisanさんの方針に賛成です。
小さくて、かつ、1度しか使わないメソッドが多用されているとソースを追いかけていて、ブチブチ思考が途切れるので非常に辛いです。ですので、そのようなメソッドはあまり作らない方針です。
モジュール分割は適度な粒度で行うのが適切と思いますよ。
昔、派遣の方がそのような細切れソースを作ってくれて、後でメンテにかなり苦労しました。
その方はかなり頭の良い方でした。だから細切れなソースでもメンテでき、本人は気にならなかったかも知れません。
投稿2015/11/12 03:14
総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/12 04:11
2015/11/12 04:25
2015/11/13 02:31
2015/11/13 02:53
2015/11/13 04:25 編集
2015/11/13 05:12
2015/11/13 06:19