項目41 ドメインの言語を使って型を命名する
よく考えられた型名、プロパティ名、変数名は、意図を明確にしコードと型の抽象度を上げることができる
不適切な命名をされた型は、コードを不明確にし、読み手を誤ったメンタルモデルに導いてしまう
誤ったインターフェース
code:ts
interface Animal {name: string; endangered: boolean;habitat: string;}
const leopard: Animal = {name: 'Snow Leopard',endangered: false,habitat: 'tundra',};
上記の型の問題
nameというプロパティ名が曖昧。学名か?一般的な名前かわからない
booleanのendangered(絶滅滅危惧種)フィールドも曖昧。具体的な利用用途がわからない
曖昧さを軽減した良い型
code:ts
interface Animal {
commonName: string;
genus: string;
species: string;
status: ConservationStatus;
climates: KoppenClimate[];
}
type ConservationStatus = 'EX' | 'EW' | 'CR' | 'EN' | 'VU' | 'NT' | 'LC';
type KoppenClimate = |
'Af' | 'Am' | 'As' | 'Aw' |
'BSh' | 'BSk' | 'BWh' | 'BWk' |
'Cfa' | 'Cfb' | 'Cfc' | 'Csa' | 'Csb' | 'Csc' | 'Cwa' | 'Cwb' | 'Cwc' |
'Dfa' | 'Dfb' | 'Dfc' | 'Dfd' |
'Dsa' | 'Dsb' | 'Dsc' | 'Dwa' | 'Dwb' | 'Dwc' | 'Dwd' |
'EF' | 'ET';
const snowLeopard: Animal = {
commonName: 'Snow Leopard',
genus: 'Panthera',
species: 'Uncia',
status: 'VU', // 危急(絶滅危惧II類)
};
どのドメインにも、その対象を説明するための専門用語がある。独自に考えるより、その用語を使うようにする
型やプロパティや変数の命名をする際のルール
区別に意味をもたせる
同じものに対して異なる名前をつけるのは避ける
Data、Info、Thing、Item、Object、Entityのような曖昧で意味のない名前は避ける
型の形状ではなく、その型が何であるかに基づいて命名する