背景
プログラムを初めてもう少しで1年が経とうとしています。
そんな時に、こちらの記事を元に社内でペアプロをすることになりました。
その中の一つ、「3. 全てのプリミティブ型と文字列型をラップする」ってあんまりわからなかったんです。
だって、numberはnumberやん!!
…と思ってたんですが、今日ペアプロをしてくださった方からの説明で腑に落ちたので自分のために備忘として残そうと思います。
この世にただの「1」がどれだけあるのか?
私もなのですが、型指定をする時にさらっと「number」と書いてしまいます。
確かに、numberなのですが、それってただの「number」 なのか?
たとえば、
1と1円玉は違う。
2はあるけど、2円玉はない。
と、いうこと。
同じ数値なのに、「振る舞い」が違う。
=>同じものではない!!
export class TypeOfCurrency {
constructor(readonly value: 1 | 5 | 10 | 50 | 100 | 500) { }
}
ただnumberとして扱っていたら、硬貨にも関わらず「2」という数を認めてしまいます。
しかし、「金種(TypeOfCurrency)としてこのようなclassを用意すれば、
扱っているものが金種だとわかることに加え、varidationの役割も担ってくれます。
私がこの話を聞いて腑に落ちたのは、
今から扱おうとしている数値に「単位」がある
=>「振る舞い」がある
=>ただのnumberではない。
=>ラップすべき!!
※数値だけでなく、stringも同じ。(名前とか、名カナとか…)
そう考えると、ただのnumberを扱うのは、数学者とかそういった方々くらいなのでしょうね…
「本当にnumberか?stringか?プリミティブか?」を意識して日々ソースを編んでいきたいです。
あとは、getter/setterかな…