-1

ただ疑問に思っていますが、メソッドを呼び出すためのベストプラクティスは何ですか (この場合は特に Java で)

呼び出す必要がある 6 つの関数があり、かなり論理的に異なる場合:

だから、言って...

private void step1() { .. }
private void step2() { .. }
private void step3() { .. }
private void step4() { .. }

私のメインメソッドでそれらを順番に呼び出す方が良いですか

step1();
step2();
step3();
step4();

それとも、step1 関数の最後に step2 を呼び出した方がよいでしょうか? すなわち

private void step1() { 
    ..
    ..
    step2();
}
4

5 に答える 5

8

考えすぎないでください。

最初のオプションは、より明確で、読みやすく、自明です。

step1();
step2();
step3();
step4();

また

try{
    step1();
    step2();
    step3();
    step4();
} catch (StepException e) {
   // process failed
   ...
}
于 2012-10-05T13:57:15.477 に答える
0

彼らがお互いに依存しているかどうかに依存します。step2がstep1に依存している場合は、次を使用する必要があります

private void step1() { 
   ..
   ..
   step2();
}

これにより、呼び出し元がメソッドに関して持っている必要のある暗黙知が削除されます(特にメソッドがパブリックの場合)

彼らがお互いに依存しない場合、あなたの最初のオプションはより簡単です。

(これは私には少し臭いように見えるので、このシナリオについてもっと知りたいと思います)

于 2012-10-05T14:00:05.583 に答える
0

質問に十分なコンテキスト情報がありません。

私が一般的に言うことは、その部分を呼び出すmainメソッドを使用する方がよいということです。それは一般的なプロセスが構築される方法を反映しているからです。

ただし、例外が発生する可能性があります。とにかく、これらの例外は別の方法で作成できます(例:step1コードはメインコードによって解析されたコードを返し、次にstep2を呼び出します)。このように、スタックは有用でない中間呼び出しで課金されません。そして、セマンティクスはより適切に保持されます。

于 2012-10-05T13:58:08.953 に答える
0

それらが論理的に異なる場合、step1() は step2() を呼び出すべきではありません。

4回電話をかけるだけ。

于 2012-10-05T14:04:34.693 に答える
0

step1とが論理的に異なる場合、step2それはそれらが異なる入力に使用できることを意味します。これで、おそらくステップを減らし、より良い方法で作業を完了するために使用できる経験則があります。

最初に、まったく同じ引数ではなく、メソッドが異なることを行う方法が異なるかどうかを確認し、自分自身またはそれらを使用してコーディングしている他の誰かがstepN、前のものなしで、または少なくともすべてなしで、ほとんど単独で呼び出していることに気付く可能性があることを確認します。そのうちの。その場合は、すべてそのままにして、順番に呼び出しても問題ありません。

そうでない場合は、コードをリファクタリングして、stepN1stepN2が常に次々に呼び出され、stepN自己完結型の論理的に異なるメソッドが得られるようにします。メソッドが単独で存在する必要がなく、まったく同じ引数を使用してメソッドを次々と呼び出す場合は、それを 1 つのメソッドにし、常に 1 つの部分で実行されるコードをマージします。

この手段step2のコード内でバインドすると、2 番目のステップを実行するコンテキスト内でもほとんど使用できなくなります。つまり、ある意味で論理的に異なる機能が失われます。つまり、この場合は 2 つを実際にマージするか、最初の方法。したがって、一般的には最初の方法に固執し、それがあなたのケースに当てはまる場合は、提案された方法でコーディングを改善してください! 例外は、その中でのみ完全に使用できるが、実際にはそれ自体に明確な機能があり、プログラム内で別の目的に使用できる場合です。次に、2 番目の方法を使用できます。step1step1step1step2step2

方法 1 または方法 2 だけでなく、タスクに合わせてブレンドすることもできることに注意してください。そして、パフォーマンスは私が信じている問題ではありません (私が間違っていたら、誰かが私を正してくれますか?)!

于 2012-10-05T14:06:30.320 に答える