マジックナンバー
- 「ソフトウェア設計の言語化スキルを磨くこと」 https://note.mu/qsona/n/nb971c8fc5976
例えば、HTTPのステータスコードについて、 `BAD_REQUEST = 400` みたいな定数を定義して使っているコードは、間違いなく残念なコードです。なぜこんなコードは書かないのか。その理由の一つは、Bad Requestを表すステータスコードの値が400であることが、今後変わることはほぼ絶対にありえない、ということです。(もうひとつは、ステータスコードという概念と値が十分に知られていることです)
うーん,ここは間違いだと思う.
基本的に 「BAD_REQUEST = 400」と書くべきだし,可能なら Type Safe Enumの使用も検討すべき場面だ.使わなくてもそんなに問題ないこともあるけど,「間違いなく残念」と言い切っちゃだめ.たぶん90%くらいは良いコードで,悪いコードは1%もないだろう.
https://b.hatena.ne.jp/entry/s/note.mu/qsona/n/nb971c8fc5976
- id:otherworld 将来的に変わる可能性があるから定数にするのではなく、名前をつけないと意味不明になるからつける。説明なしに42が出てきたら「生命、宇宙、そして万物についての究極の疑問の答え」だと思う新卒がいるかもしれない
- id:devorgachem BAD REQUEST とか番号覚えられないマンなので… なお、テキストがあれば思い出せる。なんというか domain name 書くんじゃなくて IP を書けと言われている気分になる
- id:surume000 部分的に賛成できない。たとえば405(Method Not Allowed)は400ほど有名ではない。じゃあ405だけ定数化して400は定数化しないまま?おれは両方定数化したほうが良いと思う
- id:marshi javaのapacheのhttpclientライブラリには定数定義されてた気がする。ライブラリは別なのかあれも残念コードなのか。定数化するとコードの検索でひっかけやすくなるっていうメリットはあるかな。
- id:chimerast “設計力の高いシニアなエンジニアがスタートアップ最初期に入っても” これ逆(?)で、不確実だからこそ技術的負債の発生を最小限に抑えるために、設計力の高いエンジニアが初めから入るべきだと思ってる。
- id:D_first BAD_REQUEST = 400はダメなのか。打ち間違い防止になると思ったんだけど。
間違い防止のため,可読性のために必用だと思う.全ステータスコードを丸暗記してない人は,こんなコードは絶対に書くべきではない.*1
ほんと,ここの部分で間違った例をもってきてるので,この文章全体がとてつもなく胡散臭くなってる.
typoで
return 401;
と書いても,コードは問題なく通ってしまう.後でバグが出て,ここで 401 Unauthorized でないことだけは分かっても,本来なにを返すのが正しかったのかは,これだけでは全く分からない.それが400だと知ってるのは作った本人だけだ.他人に読めないコードはこうやって作られていく.*2
可読性とかデバッグのことも考慮しないのは,良いコードとは言えないのだ.
変わらない定数は即値で書いて良いなら,円周率だって毎回3.141592って書いても良いんだ.そして場所によってTypoがあって3.15になってたり,精度が違う3.141になってたりすれば,発見しにくいバグになる.
400や1024みたいなキリのいい数字だと,偶然他の数値と重なることだってあるかもしれない.
- 新幹線400系電車 https://ja.wikipedia.org/wiki/%E6%96%B0%E5%B9%B9%E7%B7%9A400%E7%B3%BB%E9%9B%BB%E8%BB%8A
- ボーイング747-400 https://ja.wikipedia.org/wiki/%E3%83%9C%E3%83%BC%E3%82%A4%E3%83%B3%E3%82%B0747-400
- 伊四百型潜水艦 https://ja.wikipedia.org/wiki/%E4%BC%8A%E5%9B%9B%E7%99%BE%E5%9E%8B%E6%BD%9C%E6%B0%B4%E8%89%A6
異なる定数を比較して一致してるので間違って TRUE を返すのは,C言語のenum型で良くあったバグの一つだ.だからこそTypeSafeEnumが登場したんだ.
良い設計を知るには,過去の失敗パターン,バッドノウハウを知ることも重要だ.
- 作者: 藤原博文
- 出版社/メーカー: 技術評論社
- 発売日: 2003/07/12
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 219回
- この商品を含むブログ (60件) を見る
- id:nissax 42が駄目な理由を400が駄目な理由にも適用できて微妙。BAD_REQUESTは400よりも良いよ。被検索性も高い。
それもあった.
かりにBAD REQUESTまわりの挙動がおかしいと分かったとき,関連するコードを探すのにgrepやIDEのコマンド一つで検索できるのと,400どころか1400や4000なんかにもマッチして振り回されるのとでは雲泥の差.
さらにこれが元号が「M,T,S,H」の一文字だったりすると,ほんとにもう.