A7手帳、浅海散子

A7サイズの手帳。何かを書く。

「この時点でxはTrueのはず」はassert文で書こう

競技プログラミングにおいて、求めた解が正しいことは(アルゴリズムとして)証明されているが、コードにはそのことが表されない——ということがしばしばある。そんなときにassert文が役立つことがある、かもしれない。

assert文はpython3のテスト構文の一つで、与えられた式がもし(予期しない形で)Falseとなる場合に例外を発するものである。デバッグモード(__debug__がTrue)のときだけ有効になり、デバッグなしの実行時は無視されるので邪魔にならない[要検証]。

これを書こうと思ったきっかけは、実はコメントの書き方に悩んだことだった。コード内のある分岐で「この時点でxはこの式を満たすはずである」といった内容を簡潔に書けず、どうしようかと考えた結論がassert文だった。コメントであれこれ言うよりもその場で検算するのが一番わかりやすい。

python3に限らず、多くの言語でassertionが実装されている……と言いたくて調べてみた結果、一応RubyC#などでも同様の仕組みを使えるらしいことはわかった。が、ちょっと書くのが面倒になるらしい。python3のassert文は簡単に使えてえらいね。