Martin Fowlerの「Refactoring」を読んでいます。
見たことのない「型コード」という言葉があります。
タイプコードとは?
型コードが表示されるコンテキストの 1 つは、C のunion
型です。
typedef enum Type { T_INT, T_FLOAT, T_DOUBLE, T_LONG } Type;
typedef struct Datum
{
Type type;
union
{
int i;
float f;
long l;
double d;
} u;
} Datum;
これにより、次のようなコードが生成されます。
Datum v;
switch (v.type)
{
case T_INT:
int_processing(v.u.i);
break;
case T_FLOAT:
float_processing(v.u.f);
break;
case T_DOUBLE:
double_processing(v.u.d);
break;
}
さて、スイッチからの T_LONG の省略は意図的なものでしたか? 最近追加されたもので、このスイッチに必要な更新が適用されていませんか?
そのようなコードを大量に取得し、T_UNSIGNED を追加する必要がある場合は、修正する場所をたくさん見つけなければなりません。C では、「型を表すクラスを作成する」という単純な解決策はありません。それは可能ですが、より多くのオブジェクト指向言語を使用する場合よりも (はるかに) 労力がかかります。
ただし、「型コード」という用語は、例の型のようなものを指しType
ます。
型コードは、何らかの目的のために独自の制限された型を持ちたい場合に使用します。回避策として、「型」のすべての可能な値を表す一連の数値または文字列定数を作成します。