各国の単語から学ぶ名付け

3 min read読了の目安(約3000字

勢いで書いているので、前半部分の検証が若干足りないです

いきなりクイズ

唐突ですが、こいつはなんと言うでしょう?

牛だね?
英語だと?

もうひとつ、この食べ物の名前は?

パスタ?
スパゲッティ?

ちょっとアメリカンな気持ちになると

これは cow になるのかな

意味
cow 乳牛
beef 食用の肉
cattle 畜牛
bull 去勢してない雄牛
ox 去勢した雄牛
calf 仔牛

らしいよ?

ちょっとイタリアンな気持ちになると

フェットチーネでいいのかな?

意味
スパゲッティ 円柱状で長め太め
バーミセリ 円柱状で長め細め
リングイネ 楕円形の切り口
フェットチーネ 平麺で帯状、南部呼び
タリアッテレ 平麺で帯状、北部呼び
マカロニ 円筒状で短め
ペンネ 円筒状で斜めカット
シェル 貝の形
カール 螺旋状

ちなみにパスタはこれらの総称

なのでパスタならいいけど、スパゲッティは ❌

言葉の細かさは興味によって違う

アメリカは酪農・畜産に生活や産業が根ざしていたので単語が細かくなったんだろな

羊なんかも色々な表現がありますね ( sheep, ram, ewe, lamb, mutton )

麺の分類は例えばソースが絡んで欲しいのは外か中か、具材に合わせた太さはどれくらいか、とこだわった結果でしょう

めんどくさい?

じゃあ、この画像で連想する雨の名前はなんでしょう

これは?

これで判断するのは難しいけど、例えば大雨と小雨でしょうか

他に例えば、これはいくつ?

これは?

4台と2匹ですよね?

雨の名前って数百あるらしいですよ?

  • 大雨
  • 豪雨
  • 小雨
  • 時雨
  • 通り雨
  • 長雨
  • にわか雨
  • 夕立

数百とは言わないまでも、これくらいはイメージをなんとなく持ってるし、ニュースとかでも普通に使いますよね

日本は四季の環境差が大きい中で農耕をやってきたので、強さや時期によって雨を分類してきました

ものの数え方だって自然と単位を使い分けてますよね

他にも例えば、色名なんてものすごい細かいし、魚なんて出世しますからね

やっぱり、言葉の細かさは興味によって違う

日本では一人称が性別や位やシーンによってたくさんありますが、英語にはそんなにありません

一般人は台風・ハリケーン・サイクロン・トルネードを意識して使い分けてないですが、気象学者?さんは明確に違うものとしているでしょう

単語は文化や背景に応じて、必要な粒度になると言うことですよね

これ、要求分析とプログラミングでも同じなんだぜ

例えば Phone 📱

以下の場合、明らかに識別する粒度が違う

  • ある社員に貸与しているか否か
  • 携帯ショップで店頭に出せる在庫数

他は... Hand とか 👆
管理するステータスは背景によって違う

  • 整骨院のカルテにおける手
  • ネイルサロンの顧客管理における手

他には例えば Amount と一口で言っても、フロー内でいろんな金額が出てくる 💵

  • 明細の料金 ( 小数? 整数? )
  • 明細の合計の料金 ( 繰り上げロジックはどうなってる? )
  • 税込み金額 / 税抜き金額

Time も同じ、〜〜時間って全部意味が違う 🕑

  • 申し込み時刻 ( 成功したかは問わない )
  • 受け付け時刻 ( 受理 )
  • 利用開始時刻 ( 使える )
  • 初回実績時刻 ( 使った )

要求に合わせて、やりすぎず、やらなすぎず

在庫管理なら製品ごとに認識しなきゃいけないし、例えば Android / iPhone で売り方が違うならサブ分類みたいなのを設けるかもしれない

Hand だってカルテに書き込むのは Shoulder でも顧客管理では Finger と Nail かもしれない

入退場管理システムを作るなら Time はきっちり分類しなきゃいけないけど、Amount を細かく用意しても多分使わない

だから「いつもこうやってる」は通用しない

プリミティブラッパーから Value Object への進化

システムの金額が全部Intじゃあ意味わからんしコンパイルの恩恵も少ない

ここまではイメージしやすい

けど、安易に用意したAmountだけでは実はあんまり恩恵は変わってないんだ

足してから繰り上げるところを繰り上げてから足してしまうかもしれないし、税込み金額に税を乗せてしまうかもしれない

必要な粒度で分類して、できることを絞って、型で関係を表明するまで考えられたら、やっと Value Object のパワーが生まれる

請求システムにおける金額

処理
DetailAmount 内部は Double
SummaryAmount 任意数の DetailAmount からのみ生成できる
内部は Integer
TaxedAmount untaxed() すると UntaxedAmount になる
UntaxedAmount taxed() すると TaxedAmount になる