【あさーしょん】

アサーション とは?

公開:
💡 「こうなってるはずだよね?」をコードで書く安心チェック
📌 このページのポイント
アサーション(Assertion)の仕組み assert(expected == actual) PASS 条件が成立 → 処理を続行 FAIL 条件が不成立 → エラー発生 assert(1+1 == 2) → 正常に通過 assert(1+1 == 3) → AssertionError! 条件が真(True)か偽(False)かで分岐する
アサーションのイメージ
ひよこ ひよこ
アサーションって何に使うの?
ペンギン先生 ペンギン先生
プログラムの中で「ここではこの条件が成り立つはず」と宣言するんだよ。たとえば「この変数は絶対に0以上のはず」って書いておくと、もし負の値になったら即エラーになるんだ
ひよこ ひよこ
if文でチェックするのとは違うの?
ペンギン先生 ペンギン先生
if文は「もし〜なら」という分岐だけど、アサーションは「絶対にこうなっているはず」という前提の表明なんだよ。失敗したら「バグがある」という意味だから、普通のエラー処理とは目的が違うんだ
ひよこ ひよこ
テストでもよく使うって聞いたんだけど?
ペンギン先生 ペンギン先生
そうだよ!単体テストでは assert(expected == actual) という形で「期待する値と実際の値が一致するか」をチェックするのが基本パターンなんだ。assertEquals、assertTrue、assertNullなど色々な種類があるよ
ひよこ ひよこ
アサーションが失敗したらどうなるの?
ペンギン先生 ペンギン先生
AssertionErrorという例外が発生して、プログラムが止まるんだよ。テストなら「このテストは失敗」と表示される。本番コードでは、言語によってはアサーションを無効化できる仕組みもあるんだ
ひよこ ひよこ
無効化できるなら、本番では使わないほうがいいの?
ペンギン先生 ペンギン先生
本番では「起きてはならない状態」の検出に使うのがベストプラクティスだよ。Javaでは -ea フラグで有効化、Pythonでは -O フラグで無効化できる。ただし入力チェックの代わりにアサーションを使うのはNGで、あくまで開発者が『ここは絶対にこうなるはず』と確信している箇所に使うものなんだ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「アサーション」って出てきたら「この条件が成り立つはず!と宣言するコードの安全チェック」と思えればだいたいOK!
📖 おまけ:英語の意味
「Assertion」 = 表明・主張
💬 英語の assert は「断言する」という意味。「この時点でこの値は絶対に正しい!」と断言するニュアンスから来ているんだよ
← 用語集にもどる