5

さまざまなAndroidアプリケーション(私が作成したものではない)のソースコードを観察したところ、特定のコードを独自のメソッドに配置するパターンに気付きましたが、実際にはコードの再利用はありません。これらのメソッドは全体で1回しか呼び出されないためです。応用。

これまで私は、コードの一部がアプリケーションコードで2回以上使用される場合、単にコードの冗長性を排除するという理由で、独自の方法に値するという経験則を持っていました。

しかし、それらのコードのチャンクが独自のメソッド(および独自のメソッド呼び出しオーバーヘッド)にきちんと分割されているのを見て、私は何かが欠けているのではないかと思い始めています。

文書化の目的以外に、4行のコード(一度だけ呼び出される!)を独自のメソッドに入れることを正当化できる他の理由は何ですか?

4

7 に答える 7

8

開始する3つの理由:

  • 他のものとは別にテストすることができます。(これは、パブリックAPIのみをテストするというマントラに反する可能性がありますが、それは私にとっては問題ありません。テストするためにプライベートではなくパッケージレベルのメソッドを作成する必要がある場合は面倒ですが、それよりも大量のロジックを一度にテストする必要があります。)
  • 詳細を指定せずに、複雑なメソッド全体が単一の抽象化レベルにある単純なメソッドから、より複雑なメソッドを構築できます。高レベルのメソッドを読み取るということは、それが構成されているビルディングブロックの名前を読み取ることを意味します。その後、必要に応じて、興味のある詳細だけに飛び込むことができます。
  • それぞれが1つのことをうまく行うメソッドを記述し、それらにわかりやすい名前を付けて文書化することができます

もちろん、これはやり過ぎになる可能性がありますが、間違いなく役立つ可能性があります。

于 2012-01-30T15:12:44.700 に答える
7

確かにいくつかの重複がありますが、私が考えることができるいくつかの理由があります:

  • コードを自己文書化するのに役立ちます。
  • (ユニット)テストが簡単になります。
  • これは、数百行の長さのメソッドで終わるのを防ぐのに役立ちます。
  • 将来、そのコードを別の場所で使用することをお勧めします。

もちろん、これはすべて、これらの4行のコードが関連していて、単一の機能を実行しているという仮定に依存しています。経験則として、名前が思いつかない場合は、メソッドではないはずです。

于 2012-01-30T15:17:50.940 に答える
4

ドキュメントと読みやすさは、メソッドが1回だけ実行される場合でも、コードをメソッドに組み込む非常に良い理由です。一部のアプリケーションでは、起動時に完了する論理的な手順がたくさんある場合があります。1つのinitメソッドですべてのコードを混乱させるのか、それとも適切な名前のメソッドを呼び出すinitメソッドを使用するのでしょうか。

于 2012-01-30T15:12:44.173 に答える
3

うまくいけば、よりクリーンなコードが容易になり、テストが簡単になるはずです。

メソッド呼び出しのオーバーヘッドについて言及しましたが、メソッドが1回だけ呼び出される場合は、それは問題ではありません。

于 2012-01-30T15:12:54.843 に答える
2

作成メソッドのリファクタリングに記載されている理由を参照してください。

于 2012-01-30T15:12:14.313 に答える
1

読みやすさは、そのようなコーディング動作の私の大きな理由です。

長いコードリストを見つめて、特定のプロシージャまたはコードのセクションを探している場合、その特定のプロシージャまたはコードのセクションがどこにあるかがすぐにはわからない場合があります。

なぜ私たちは段落や章で本を書くのですか?なぜ曲にスタンザ/バース、コーラス、ブリッジがあるのですか?小さな、非常に具体的なチャンクで大きなアイデアを取り入れることは簡単だからです。

ソフトウェア開発と同じように、効率的でクリーンなコードを推進することで、可能な限り迅速かつエレガントに仕事をこなすことができます。また、それを維持しようとしている人間が読めるようにする必要があります。

少なくとも、それは私の解釈です。

于 2012-01-30T15:18:15.520 に答える
0

一般に、Java VMには、インライン化の対象となるメソッドの最大サイズに制限があります。まれにしか呼び出されないコードを抽出すると、いわばホイールにグリースが塗られる可能性があります。例を挙げていただけますか?

于 2012-01-30T15:22:54.387 に答える