「生年月日から年齢の簡単計算式」は、[これはひどい]か


[ネタ]タグがほとんどなく、ホントに実用コードとして感心してるっぽいブクマの数々。トリビア的ネタなら構わないけど、実用コードとして見ると、自分の最初の直感的感覚は[これはひどい]だった。

最近知ったんですが、生年月日から年齢を計算する簡単な計算式というのがあるそうです。

(今日の日付-誕生日)/10000の小数点以下切捨て。

生年月日から年齢を計算する簡単な計算式 | 日経 xTECH(クロステック)


自分がひどいと感じたその一番大きな理由は、ミョウチクリンな整数値で日付を表していること。日付なら日付の各種計算を扱えるデータ型があるべき、かつ、それを使うべき、という感覚だと思う。それと表裏一体の問題として、アルゴリズム(計算の意図)が明示されていないのが気持ち悪い。

後者の点から

y-((m-((d<birthD)? 1:0) <birthM)? 1:0) -birthY

なんかの方が全然マシ。


しかし同時に、そうは言っても、ちょっとハッキーでスマートかも、という風にも見えた。でも普通、年・月・日はどうせ持ってるし、逆にこんなヘンなint値を最初から持ってるとは考えにくいから、やっぱり全然スマートでもハッキーでもない。せめて

((y-birthY)*10000+(m-birthM)*100+(d-birthD))/10000

だよなぁ、と思い直すと(言語によってはさらに整数化が必要)、元ネタはやっぱり[ネタ]であって、実用コードとしては[これはひどい]だと思う。


そして、元エントリを読み直すと最後にある言葉、

アルゴリズムって芸術ですね。

生年月日から年齢を計算する簡単な計算式 | 日経 xTECH(クロステック)

だから、それアルゴリズムは表してないじゃん、って。というか、もともとプログラミングじゃなくてサーバ管理の連載で、箸休めネタだったんだろう。

以上、ネタにマジレスエントリ。