C++の整理箱
7529 ワード
プログラミングは常に葛藤と切り離せず、次の葛藤はプログラムの可読性に関係している.
1、もつれ:関数が長すぎるから、分解しようか.問題が来て、分解した関数はあまり場所を探しにくくて、クラスの中に置いて、クラスを汚染して、全局の空間の中に置いて、また全体の環境を汚染しました.そしてこれらの関数は実は元の関数呼び出しで、いつも端に置いておきましょう.クラスを見てみると、最初はいくつかの関数があって、はっきりしていて、書いているうちに多くの私有関数が出てきて、コードを読むと、主次が見つかりません.
2、整理箱:このとき、クラスでも関数でも、整理箱が必要です.これらの多くの関数のために適切な場所を探します.整理箱がどこにあるかは、次の例を見てみましょう.3、一例:
これは比較的一般的な例であり、lexerクラスの重要な関数はinsymbol、nextch、eatの先頭の関数がinsymbolにサービスしている.4、クラス整理ボックス:以上のlexerクラスではeatの先頭の関数が、自分のクラスの構造を不明確にし、コードを読む難しさを増しています.ここでは、クラス整理ボックスを増やし、これらの関数を整理します.整理ボックスを追加すると、lexerの宣言コードは次のように簡潔になります.
今またlexerでcppは実装部分を追加し、コードは以下の通りである.
現在、これらの関数はすべて整理箱に入れられており、すなわち類汚染もなく、グローバル環境に汚染もなく、整理の目的を達成している.5、関数整理箱:上にeatこれらの関数をクラスの整理箱に入れました.下にはinsymbolにサービスしている以上、内部で解決し、整理箱を関数の中に入れます.まず整理ボックスをクラスから削除します.lexerの宣言コードは次のとおりです.
そして整理をinsymbol関数に入れます.
今、補助関数を関数整理ボックスに入れました.同じようにクラスもグローバル環境も汚染されていません.コードを読むときは、まず整理箱を閉めて、細かく調べるときは、あれこれ探す必要はありません.直接開けてください.関数の調整があれば、整理も簡単です.下のコードは、整理箱にいくつかの包装をして、きれいに見えますが、箱が一気に閉まらないだけです.
6、...葛藤があればあるほど、解決方法があるが、多くの場合、いくつかの本に対応するように、葛藤すればするほど、解けない.
1、もつれ:関数が長すぎるから、分解しようか.問題が来て、分解した関数はあまり場所を探しにくくて、クラスの中に置いて、クラスを汚染して、全局の空間の中に置いて、また全体の環境を汚染しました.そしてこれらの関数は実は元の関数呼び出しで、いつも端に置いておきましょう.クラスを見てみると、最初はいくつかの関数があって、はっきりしていて、書いているうちに多くの私有関数が出てきて、コードを読むと、主次が見つかりません.
2、整理箱:このとき、クラスでも関数でも、整理箱が必要です.これらの多くの関数のために適切な場所を探します.整理箱がどこにあるかは、次の例を見てみましょう.3、一例:
class lexer
{
public:
int insymbol();
tchar nextch();
private:
int eatcomment();
int eatnumber();
int eatstring();
int eatoperator();
private:
....
}
これは比較的一般的な例であり、lexerクラスの重要な関数はinsymbol、nextch、eatの先頭の関数がinsymbolにサービスしている.4、クラス整理ボックス:以上のlexerクラスではeatの先頭の関数が、自分のクラスの構造を不明確にし、コードを読む難しさを増しています.ここでは、クラス整理ボックスを増やし、これらの関数を整理します.整理ボックスを追加すると、lexerの宣言コードは次のように簡潔になります.
class lexer
{
public:
int insymbol();
tchar nextch();
private:
struct __; //
private:
....
};
今またlexerでcppは実装部分を追加し、コードは以下の通りである.
#include "lexer.h"
struct lexer::__
{
static int eatcomment(lexer* plexer)
{
...
}
static int eatnumber(lexer* plexer)
{
...
}
static int eatstring(lexer* plexer)
{
...
}
static int eatoperator(lexer* plexer)
{
...
}
};
lexer::insymbol
{
....
__::eatnumber(this); //
....
};
現在、これらの関数はすべて整理箱に入れられており、すなわち類汚染もなく、グローバル環境に汚染もなく、整理の目的を達成している.5、関数整理箱:上にeatこれらの関数をクラスの整理箱に入れました.下にはinsymbolにサービスしている以上、内部で解決し、整理箱を関数の中に入れます.まず整理ボックスをクラスから削除します.lexerの宣言コードは次のとおりです.
class lexer
{
public:
int insymbol();
tchar nextch();
private:
....
};
そして整理をinsymbol関数に入れます.
#include "lexer.h"
lexer::insymbol
{
struct __
{
static int eatcomment(lexer* plexer)
{
...
}
static int eatnumber(lexer* plexer)
{
...
}
static int eatstring(lexer* plexer)
{
...
}
static int eatoperator(lexer* plexer)
{
...
}
};
....
__::eatnumber(this); //
....
};
今、補助関数を関数整理ボックスに入れました.同じようにクラスもグローバル環境も汚染されていません.コードを読むときは、まず整理箱を閉めて、細かく調べるときは、あれこれ探す必要はありません.直接開けてください.関数の調整があれば、整理も簡単です.下のコードは、整理箱にいくつかの包装をして、きれいに見えますが、箱が一気に閉まらないだけです.
#include "lexer.h"
#define BOX_HEAD struct __ {
#define BOX_TAIL };
lexer::insymbol
{
BOX_HEAD
static int eatcomment(lexer* plexer)
{
...
}
static int eatnumber(lexer* plexer)
{
...
}
static int eatstring(lexer* plexer)
{
...
}
static int eatoperator(lexer* plexer)
{
...
}
BOX_TAIL
....
__::eatnumber(this); //
....
};
6、...葛藤があればあるほど、解決方法があるが、多くの場合、いくつかの本に対応するように、葛藤すればするほど、解けない.