assert
日本語 | 断言 |
英語 | assertion |
ふりがな | あさーと |
フリガナ | アサート |
アサーションを行うための予約語。
予約語の1つ。
「assert 評価式;」の形式で、「評価式」がfalseの場合にAssertionErrorクラスが例外として投げられる。
また「assert 評価式 : 値;」の形式で、「評価式」がfalseの場合にAssertionErrorクラスが例外として投げられ、そのAssertionErrorクラスに「値」が渡される。
予約語の1つ。
「assert 評価式;」の形式で、「評価式」がfalseの場合にAssertionErrorクラスが例外として投げられる。
また「assert 評価式 : 値;」の形式で、「評価式」がfalseの場合にAssertionErrorクラスが例外として投げられ、そのAssertionErrorクラスに「値」が渡される。
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// 注:
// アサーションはJ2SEのバージョンが1.4以降である必要があります。
// また、実行時にVM引数に-eaを追加しなければアサーションは機能しません。
// Eclipseの場合、メニューの「実行」-「デバッグ」の
// 「起動構成の作成、管理、及び実行」ダイアログの「引き数」ページの
// 「VM 引き数」に-eaを追記してください。
// とりあえずassertを使ってみます。
try
{
// assertを使います。
// assertは、ifと違い、falseだと機能します。
assert false;
}
catch( AssertionError e )
{
// 投げられたAssertionErrorを拾いました。
e.printStackTrace();
// java.lang.AssertionError
// at Sample.main(Sample.java:17)
// AssertionErrorクラスは、Errorクラスのサブクラスです。
// Errorクラスは「拾ってはいけない例外」なので、
// 実際には拾わず、assertにfalseを渡さない、そういう
// プログラムを組む必要があります。
}
// もうひとつのassertの使用例。
try
{
// assertを使います。
// 今度は、「:」を使い、その右側に値を渡します。
assert false : 100;
}
catch( AssertionError e )
{
// 投げられたAssertionErrorを拾いました。
e.printStackTrace();
// java.lang.AssertionError: 100
// at Sample.main(Sample.java:38)
// assertに渡した「100」という値が、スタックトレースに
// 「100」として出力されています。
// このように、assertに「:」を付けると、その
// 右側の値がAssertionErrorクラスに渡されます。
// 通常は、assertの原因が判るような文字列を渡します。
// そうすればassertの原因が判りますし、コメントの代わり
// にもなります。
}
// 一番標準的なassertの使用方法。
// output()メソッドは「引数にnullを渡してはいけない」という
// 仕様になっています。
// そのため、本来であれば、下記のstringは、nullチェックを
// 行い、nullでない場合にのみoutput()メソッドに渡すべきです。
// assertは、そういう「関数の呼び出し元に、関数のルール(契約)
// を守らせる」ために存在します。
String string = null;
output( string );
// java.lang.AssertionError: 引数stringがnullです。
// at Sample.output(Sample.java:67)
// at Sample.main(Sample.java:58)
// Exception in thread "main"
// assertが「契約を守らせるためにある」ため、assertから
// 投げられるAssertionErrorクラスを拾ってはいけません。
// プログラムは、必ず「assertが発生しないよう」に作る
// 必要があります。
}
/**
* assertの一番基本的な使い方。
* @param string 出力する文字列。nullは不可。
*/
private static void output( String string )
{
assert string != null : "引数stringがnullです。";
// このように「本来はあってはいけない値」をチェックする
// ために使用します。
// 出力します。
// このメソッドの実装です。
System.out.println( string );
}
}
public class Sample
{
public static void main( String[] args )
{
// 注:
// アサーションはJ2SEのバージョンが1.4以降である必要があります。
// また、実行時にVM引数に-eaを追加しなければアサーションは機能しません。
// Eclipseの場合、メニューの「実行」-「デバッグ」の
// 「起動構成の作成、管理、及び実行」ダイアログの「引き数」ページの
// 「VM 引き数」に-eaを追記してください。
// とりあえずassertを使ってみます。
try
{
// assertを使います。
// assertは、ifと違い、falseだと機能します。
assert false;
}
catch( AssertionError e )
{
// 投げられたAssertionErrorを拾いました。
e.printStackTrace();
// java.lang.AssertionError
// at Sample.main(Sample.java:17)
// AssertionErrorクラスは、Errorクラスのサブクラスです。
// Errorクラスは「拾ってはいけない例外」なので、
// 実際には拾わず、assertにfalseを渡さない、そういう
// プログラムを組む必要があります。
}
// もうひとつのassertの使用例。
try
{
// assertを使います。
// 今度は、「:」を使い、その右側に値を渡します。
assert false : 100;
}
catch( AssertionError e )
{
// 投げられたAssertionErrorを拾いました。
e.printStackTrace();
// java.lang.AssertionError: 100
// at Sample.main(Sample.java:38)
// assertに渡した「100」という値が、スタックトレースに
// 「100」として出力されています。
// このように、assertに「:」を付けると、その
// 右側の値がAssertionErrorクラスに渡されます。
// 通常は、assertの原因が判るような文字列を渡します。
// そうすればassertの原因が判りますし、コメントの代わり
// にもなります。
}
// 一番標準的なassertの使用方法。
// output()メソッドは「引数にnullを渡してはいけない」という
// 仕様になっています。
// そのため、本来であれば、下記のstringは、nullチェックを
// 行い、nullでない場合にのみoutput()メソッドに渡すべきです。
// assertは、そういう「関数の呼び出し元に、関数のルール(契約)
// を守らせる」ために存在します。
String string = null;
output( string );
// java.lang.AssertionError: 引数stringがnullです。
// at Sample.output(Sample.java:67)
// at Sample.main(Sample.java:58)
// Exception in thread "main"
// assertが「契約を守らせるためにある」ため、assertから
// 投げられるAssertionErrorクラスを拾ってはいけません。
// プログラムは、必ず「assertが発生しないよう」に作る
// 必要があります。
}
/**
* assertの一番基本的な使い方。
* @param string 出力する文字列。nullは不可。
*/
private static void output( String string )
{
assert string != null : "引数stringがnullです。";
// このように「本来はあってはいけない値」をチェックする
// ために使用します。
// 出力します。
// このメソッドの実装です。
System.out.println( string );
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // 注: // アサーションはJ2SEのバージョンが1.4以降である必要があります。 // また、実行時にVM引数に-eaを追加しなければアサーションは機能しません。 // Eclipseの場合、メニューの「実行」-「デバッグ」の // 「起動構成の作成、管理、及び実行」ダイアログの「引き数」ページの // 「VM 引き数」に-eaを追記してください。 // とりあえずassertを使ってみます。 try { // assertを使います。 // assertは、ifと違い、falseだと機能します。 assert false; } catch( AssertionError e ) { // 投げられたAssertionErrorを拾いました。 e.printStackTrace(); // java.lang.AssertionError // at Sample.main(Sample.java:17) // AssertionErrorクラスは、Errorクラスのサブクラスです。 // Errorクラスは「拾ってはいけない例外」なので、 // 実際には拾わず、assertにfalseを渡さない、そういう // プログラムを組む必要があります。 } // もうひとつのassertの使用例。 try { // assertを使います。 // 今度は、「:」を使い、その右側に値を渡します。 assert false : 100; } catch( AssertionError e ) { // 投げられたAssertionErrorを拾いました。 e.printStackTrace(); // java.lang.AssertionError: 100 // at Sample.main(Sample.java:38) // assertに渡した「100」という値が、スタックトレースに // 「100」として出力されています。 // このように、assertに「:」を付けると、その // 右側の値がAssertionErrorクラスに渡されます。 // 通常は、assertの原因が判るような文字列を渡します。 // そうすればassertの原因が判りますし、コメントの代わり // にもなります。 } // 一番標準的なassertの使用方法。 // output()メソッドは「引数にnullを渡してはいけない」という // 仕様になっています。 // そのため、本来であれば、下記のstringは、nullチェックを // 行い、nullでない場合にのみoutput()メソッドに渡すべきです。 // assertは、そういう「関数の呼び出し元に、関数のルール(契約) // を守らせる」ために存在します。 String string = null; output( string ); // java.lang.AssertionError: 引数stringがnullです。 // at Sample.output(Sample.java:67) // at Sample.main(Sample.java:58) // Exception in thread "main" // assertが「契約を守らせるためにある」ため、assertから // 投げられるAssertionErrorクラスを拾ってはいけません。 // プログラムは、必ず「assertが発生しないよう」に作る // 必要があります。 } /** * assertの一番基本的な使い方。 * @param string 出力する文字列。nullは不可。 */ private static void output( String string ) { assert string != null : "引数stringがnullです。"; // このように「本来はあってはいけない値」をチェックする // ために使用します。 // 出力します。 // このメソッドの実装です。 System.out.println( string ); } }