2

C++ では、関数を呼び出す前に宣言する必要がありました。これは関数シグネチャで回避できますが、ほとんどの場合、これは新しいプログラミング言語 (C#、Python、ETC) では不要になりました。

しかし、他の人やコードを読んだり、クラス内で関数を構造化しなければならないときに、C++ に存在する一貫性が欠けていることに気付きます。

コードの構造について読みやすさと理解を維持しながら、関数を宣言/順序付けするためにどのようなパターンが存在しますか?

編集 1


これが大まかな例です。

class A
{
  private FunkB()
  {
    ...
  }

  private FunkC()
  {
    ...
  }

  public FunkA()
  {
    FunkB();
    FunkC();
  }

  public FunkD()
  {
    FunkC();
    ...
  }
}

class A
{
  public FunkA()
  {
    FunkB();
    FunkC();
  }

  private FunkB()
  {
    ...
  }

  private FunkC()
  {
    ...
  }

  public FunkD()
  {
    FunkC();
    ...
  }
}

編集 2


これは、エディターに関係なくコードを記述するためのガイドラインになります。新しいエディタには優れた「定義に移動」機能があり、ブックマークもこれに役立ちます。ただし、エディターに依存しないパターンに興味があります。

4

3 に答える 3

1

メソッドのコードを単独で読むときは、メソッドの意図を理解する必要があります。メソッド内の抽象化のレベルが良好で、呼び出された他のすべてのメソッドの名前がそのコンテキストで意味をなす場合、コードを理解するためにそれらを知る必要はありません。それらをブラックボックスのように扱います。

小さなものでより読みやすくするのに役立ついくつかの原則:

単一レベルの抽象化の原則

単一責任の原則(pdf)

構成された方法

そして忘れないでください、常に良い名前を使用してください!そのため、あなたの例はこの議論には適していません。

于 2010-01-23T21:34:25.140 に答える
0

IDE では、メソッドの順序はあまり重要ではないようです。ソース全体を読むのではなく、次のように進めます。メソッドを読み取り、興味深い関数呼び出しを見つけ、その関数の宣言を開くように IDE に依頼します (別のソースにある可能性があります)。または、興味深い関数を見つけたり、それがどこで使用されているかを調べたり、IDE に参照を一覧表示するように依頼したりします。

IDE は通常、クラス内のメソッドの要約リストを表示し、さまざまな方法でソートおよびフィルター処理するため、ここでもエンド ツー エンドの読み取りは必要ありません。

私が欲しいのは、「このクラスは何のためにあるのか」という理解です。それを支援する 2 つのことがあります: インターフェイスへのプログラミング - および優れたクラス ドキュメント。

そのため、クラスの責任を明確に文書化することをお勧めします。多くの場合、特定のインターフェイスの観点から表現されます。ソース内のメソッドの順序は、私にとってそれほど重要ではありません。

于 2009-11-18T16:47:19.127 に答える
0

前述のように、適切な IDE を使用すると、ファイル内の関数の順序はそれほど問題になりません。これは特に、オブジェクト指向言語の場合に当てはまります。オブジェクト指向言語では、順次読み取りよりも他のナビゲーション方法の方が便利です。例: クラス階層。クラスの概要; 階層を呼び出します。関数定義を本当に見逃している場合は、代わりにその目的に合った言語が言語にある可能性があります。たとえば、C++ の純粋仮想クラス (そう呼ばれている場合) や Java のインターフェイスなどです。

ただし、ソース ファイル内のテキストを再編成するときは常に、関数のまとまりに基づいて関数を並べ替える傾向があります[1]。後は機能が生まれた順に。あなたの例のように、他の小さなヘルパー関数が生まれた関数がある場合は、それらが抽出された場所の下に配置します。重要なことを最初に読んで、それを知る必要があるまで細かい部分を無視し、より大きな方法を最初に見る方が一般的にこれを達成する方が直感的だと思います. これは、2番目の例に似ているように見えます。

要約すると、Big の次に Small、またはPublic の次に private helpers になります

[1] これは、1 つのクラス/ファイル内にグループ化が多すぎる場合のコードの匂いであり、それらをより小さな個別のユニットに分割する必要があることを示唆しています。

于 2010-01-24T16:39:08.983 に答える