防衛コードとアサーション
JavaScript用のアサーションを作ってみる - 檜山正幸のキマイラ飼育記 (はてなBlog)
ふむふむ。
防衛コード…あるある。
アサーション…こんな手があったか。
あぁ、やっぱり檜山さんのエントリはタメになりすぎです><
こういう、言語仕様とかとは別の、「プログラミングのキモ」みたいな所にメスを入れて書かれているものは、貴重な勉強材料です。
話題元についているコメントも大変勉強になります。
「過剰な防衛コード」が現れる時、内部(チームやプログラマー個人)での仕様やコーディングルールの策定、テスト等が疎かになっているケースが多い。
そこを踏まえて「防衛コードを書くな」なワケです。
ただ、しばらく考えているとナンダカ分からなくなって来ました。
話題元の例を見ると、「過剰な防衛コード」と呼ばれているものや、アサーションとして外部に追い出しているコードのほとんどが「型チェック」に費やされているような気がします。
これって、関数の入口や出口で型指定が出来ない言語特有の現象?
他の言語で「過剰な防衛コード」となり得るものってどんなものなのだろう?
こればっかりは、自分がその言語での開発に関わって、「ハッ、これは…!」と気づかないと本当の意味で理解は出来なさそうですね><
若干論点がズレますが…。
- 確かに、JavaScriptのfunctionの引数、戻り値の型が問題になることは多い
- サーバサイドの言語を咬ますのなら
ということで、こんな切り口を考えてみました。
実装は全然出来てません><
コメントで型指定
// foo.js function sum(x/*:Number*/, y/*:Number*/)/*:Number*/ { return x + y; }
記法はASのパクリです。
チェックしたいjsをCGIにパラメータとして渡す
<script src="assertJS.cgi?target=foo.js" type="text/javascript"></script>
こんな感じのレスポンスが帰ってくる
function sum(x, y) { // 実引数の型チェックのコード // 処理処理… // ついでに戻り値の型チェックのコード return x + y; }