JavaA2Z

KAB-studio > プログラミング > JavaA2Z > アサーションとは

アサーション

日本語 断言
英語 assertion
ふりがな あさーしょん
フリガナ アサーション

解説

assertを用いてメソッドの「仕様」を決める方法。
assertは、変数をチェックし、その変数に誤りがあればAssertionErrorクラス投げる。このAssertionErrorクラスErrorクラスサブクラスのため厳密には例外ではなく、catchで拾ってはならない。つまり「assertに引っかかるとプログラムが止まる」ことになる。
 
このassertを、引数のチェックや戻り値のチェックに使用する。
メソッドには、引数に渡していい値や、その引数に対応した戻り値等に、明確な仕様が存在する。これらの仕様を、実際にプログラム上でチェックするために使用するのがassertであり、その「チェックすること」が「アサーション」である。
 
アサーションはメソッドの仕様を明確にするため、「契約による設計」を実装するために使用する。
そのため、単純な入力チェックの代わりに使用したり、投げられるAssertionErrorクラスを拾ったりしてはいけない。
あくまで「プログラム上、絶対にあってはならない」事に対してチェックをい、その「あってはならないこと」をチェックするために使用する。この「あってはならないこと」が「契約による設計」の「契約」に該当する。
逆に言うと、アサーションを使用するためにはメソッド引数戻り値の仕様を明確にする必要があるということであり、厳密で安全なプログラムを組むためのものである。

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // 注:
        // アサーションはJ2SEのバージョンが1.4以降である必要があります。
        // また、実行時にVM引数に-eaを追加しなければアサーションは機能しません。
        // Eclipseの場合、メニューの「実行」-「デバッグ」の
        // 「起動構成の作成、管理、及び実行」ダイアログの「引き数」ページの
        // 「VM 引き数」に-eaを追記してください。

        // 一番標準的なアサーションの使用方法。
        // addOne()メソッドは「引数にnullを渡してはいけない」という
        // 仕様になっています。
        // そのため、本来であれば、下記のstringは、nullチェックを
        // 行い、nullでない場合にのみaddOne()メソッドに渡すようにします。
        // assertは、そういう「関数の呼び出し元に、関数のルール(契約による設計)
        // を守らせる」ために存在します。
        String string = "テスト";

        if( string != null )
        {
            String result = addOne( string );
            System.out.println( result );
            // テスト1
        }

        // assertが「契約を守らせるためにある」ため、assertから
        // 投げられるAssertionErrorクラスを拾ってはいけません。
        // プログラムは、必ず「assertが発生しないよう」に作る
        // 必要があります。
    }

    /**
    *   assertの一番基本的な使い方。
    *   @param string 出力する文字列。nullは不可。
    *   @return 引数に"1"を足したものを返します。nullは返しません。
    */
    private static String addOne( String string )
    {
        // assertで、引数をチェックします。
        assert string != null : "引数stringがnullです。";
        // このように「本来はあってはいけない値」をチェックする
        // ために使用します。

        // 引数に"1"をくっつけます。
        String result = string + "1";
        // assertでチェックします。
        assert result != null : "戻り値がnullです。";
        // 自分で実装するのになんでこれが必要なの? と思うかも
        // しれませんが、このようにすることで、自分の実装ミスを
        // 回避することができるからです。つまり、このように
        // プログラムで記述することで、自分のミスを防ぐわけです。

        return result;
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // 注:
        // アサーションはJ2SEのバージョンが1.4以降である必要があります。
        // また、実行時にVM引数に-eaを追加しなければアサーションは機能しません。
        // Eclipseの場合、メニューの「実行」-「デバッグ」の
        // 「起動構成の作成、管理、及び実行」ダイアログの「引き数」ページの
        // 「VM 引き数」に-eaを追記してください。

        // 一番標準的なアサーションの使用方法。
        // addOne()メソッドは「引数にnullを渡してはいけない」という
        // 仕様になっています。
        // そのため、本来であれば、下記のstringは、nullチェックを
        // 行い、nullでない場合にのみaddOne()メソッドに渡すようにします。
        // assertは、そういう「関数の呼び出し元に、関数のルール(契約による設計)
        // を守らせる」ために存在します。
        String string = "テスト";

        if( string != null )
        {
            String result = addOne( string );
            System.out.println( result );
            // テスト1
        }

        // assertが「契約を守らせるためにある」ため、assertから
        // 投げられるAssertionErrorクラスを拾ってはいけません。
        // プログラムは、必ず「assertが発生しないよう」に作る
        // 必要があります。
    }

    /**
    *   assertの一番基本的な使い方。
    *   @param string 出力する文字列。nullは不可。
    *   @return 引数に"1"を足したものを返します。nullは返しません。
    */
    private static String addOne( String string )
    {
        // assertで、引数をチェックします。
        assert string != null : "引数stringがnullです。";
        // このように「本来はあってはいけない値」をチェックする
        // ために使用します。

        // 引数に"1"をくっつけます。
        String result = string + "1";
        // assertでチェックします。
        assert result != null : "戻り値がnullです。";
        // 自分で実装するのになんでこれが必要なの? と思うかも
        // しれませんが、このようにすることで、自分の実装ミスを
        // 回避することができるからです。つまり、このように
        // プログラムで記述することで、自分のミスを防ぐわけです。

        return result;
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/07/21
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。