アサーション


プログラマ向けの話題です。
アサーション、またはアサートと呼ばれる言葉を聞いたことがあるでしょうか。
日本語では表明と訳されるみたいです。
例えば、C言語ではassert関数があります。

これ、驚くほど便利です。
もしまだ使っていないのなら、ぜひ使いましょう。

私について言えば、アサーションを最初に知ったのはかなり前です。
C言語入門書の最後の辺りに、ちょこっとだけ記述があったと記憶しています。
第一印象は、「何でこんなコード(アサーション文)をいちいち書かなければならないんだ」であったような気がします。

そういうわけで、つい先日まで、面倒くさいと思って無視していました。
もちろん自分で使うこともなかったです。

それどころか、ライブラリの関数を間違えて使ったときなどにアサーションエラーのメッセージボックスを見ては「うぜー!」とすら思っていました。


とんでもない!

イベントアイテムを捨てようとするぐらい、あり得ない。
関数を書くのに、これほど便利な機能はありませんでした。
間違っているときに間違っていると教えてくれるのです。


アサーションに引っかかると言うことは、呼び出しか関数のどちらかが間違っているということ。
非常にシンプル。
デバッガで追えば、どちらのミスか判断するのは簡単です。

もちろん、上記のassert関数を使って、自らの関数に埋め込むこともできます。

これには大きく2つのメリットがあると思います。
1つめは、ミスが分かること。
2つめは、前提条件を表明できること。

プログラムができる人にとっては、下手なコメントやドキュメントよりアサーションによる表明の方が分かりやすいような気がします。

そんなわけで、現在は、関数の頭に必ずアサーションを書くようにしています。
頭に書けば目に入りやすいし、ミスが早く発覚するからです。
関数の本体はその後に書いています。

当然、関数本体にも積極的に書くようになったし、ロジックなどの複雑な関数であれば関数の最後にも効果的かもしれません。

これによって、体感的ですが、デバッガ(人)に発見されるバグが減りました。
なぜなら先にアプリケーション自身が発見するからです。

私自身が、必ずミスをする人間であると、ようやく自覚できたのだと思います。
(先輩方の指導のたまものだと思います)
自覚したならば、次はその前提に立って、どうすべきかという問題になる。

ミスをする人間ならば、ミスをした時、即座にミスしたよと教えてくれるほうがありがたいです。
プログラムコードは修正できるのだから、ミスをしても直せれば良い。

実践的な考え方だと思います。
てんと