未定義
日本語 | 未定義 |
英語 | undefined |
ふりがな | みていぎ |
フリガナ | ミテイギ |
定義されていないこと。
ある処理を行う実装を「定義」という。たとえばメソッドの実装は「定義」である。
この「定義」が作られていない、もしくは存在しないことを「未定義」と言う。
また、「結果が決まっていない」という意味でも使用される。
定義がある、ということは「入力」に対する「出力」が決められている、ということである。
ということは逆に、未定義とは「どういう結果になるか分からない」ということを意味する。
この場合、一応その処理を実行できるが、結果が決まっていないということであり、それこそハードディスクが完全に消去されても文句を言うことはできない。
そのため、結果が未定義の処理を実行してはいけない。
Javaでは、言語仕様上の未定義はほとんど存在しない。
Javaの元となったC言語では、言語が作られた時代が古いこと、様々なOSの仕様に依存することもあり、言語仕様が正確には決められておらず、未定義の機能が多かったが、Javaではそういうことはほとんどない。
そのため、Javaにおける「未定義」とは、ほとんどの場合、前者の「定義が存在しない」という意味である。
ある処理を行う実装を「定義」という。たとえばメソッドの実装は「定義」である。
この「定義」が作られていない、もしくは存在しないことを「未定義」と言う。
また、「結果が決まっていない」という意味でも使用される。
定義がある、ということは「入力」に対する「出力」が決められている、ということである。
ということは逆に、未定義とは「どういう結果になるか分からない」ということを意味する。
この場合、一応その処理を実行できるが、結果が決まっていないということであり、それこそハードディスクが完全に消去されても文句を言うことはできない。
そのため、結果が未定義の処理を実行してはいけない。
Javaでは、言語仕様上の未定義はほとんど存在しない。
Javaの元となったC言語では、言語が作られた時代が古いこと、様々なOSの仕様に依存することもあり、言語仕様が正確には決められておらず、未定義の機能が多かったが、Javaではそういうことはほとんどない。
そのため、Javaにおける「未定義」とは、ほとんどの場合、前者の「定義が存在しない」という意味である。
参考サイト
// Sample.java
import java.util.ArrayList;
public class Sample
{
public static void main( String[] args )
{
// コンパイルエラーで「未定義」が出る場合。
Integer integerL = new Integer( 100 );
// int i = integerL + 100;
// コンパイルエラー:
// 演算子 + は引き数の型 Integer, int で未定義です。
// つまり、Integerクラスを使用する+演算子の処理
// (演算子のオーバーロードメソッド?)は、
// 定義(実装)が存在しない、という意味です。
// 「未定義」とは、「どうなるかわからない」という
// 意味でもあります。
// たとえば、ArrayListクラスのaddAll()メソッドは、
// 自分自身が引数に渡された場合の結果は「未定義」と
// APIリファレンスに書かれています。
ArrayList arylst = new ArrayList();
arylst.add( integerL );
arylst.add( integerL );
arylst.add( integerL );
arylst.addAll( arylst );
for( int iF1 = 0; iF1 < arylst.size(); ++iF1 )
{
System.out.println( arylst.get( iF1 ) );
}
// 100
// 100
// 100
// 100
// 100
// 100
// 一応うまく動きましたが、それは「偶然」うまくいった
// だけなので、基本的に「未定義」のことはしてはいけません。
}
}
import java.util.ArrayList;
public class Sample
{
public static void main( String[] args )
{
// コンパイルエラーで「未定義」が出る場合。
Integer integerL = new Integer( 100 );
// int i = integerL + 100;
// コンパイルエラー:
// 演算子 + は引き数の型 Integer, int で未定義です。
// つまり、Integerクラスを使用する+演算子の処理
// (演算子のオーバーロードメソッド?)は、
// 定義(実装)が存在しない、という意味です。
// 「未定義」とは、「どうなるかわからない」という
// 意味でもあります。
// たとえば、ArrayListクラスのaddAll()メソッドは、
// 自分自身が引数に渡された場合の結果は「未定義」と
// APIリファレンスに書かれています。
ArrayList arylst = new ArrayList();
arylst.add( integerL );
arylst.add( integerL );
arylst.add( integerL );
arylst.addAll( arylst );
for( int iF1 = 0; iF1 < arylst.size(); ++iF1 )
{
System.out.println( arylst.get( iF1 ) );
}
// 100
// 100
// 100
// 100
// 100
// 100
// 一応うまく動きましたが、それは「偶然」うまくいった
// だけなので、基本的に「未定義」のことはしてはいけません。
}
}
// Sample.java import java.util.ArrayList; public class Sample { public static void main( String[] args ) { // コンパイルエラーで「未定義」が出る場合。 Integer integerL = new Integer( 100 ); // int i = integerL + 100; // コンパイルエラー: // 演算子 + は引き数の型 Integer, int で未定義です。 // つまり、Integerクラスを使用する+演算子の処理 // (演算子のオーバーロードメソッド?)は、 // 定義(実装)が存在しない、という意味です。 // 「未定義」とは、「どうなるかわからない」という // 意味でもあります。 // たとえば、ArrayListクラスのaddAll()メソッドは、 // 自分自身が引数に渡された場合の結果は「未定義」と // APIリファレンスに書かれています。 ArrayList arylst = new ArrayList(); arylst.add( integerL ); arylst.add( integerL ); arylst.add( integerL ); arylst.addAll( arylst ); for( int iF1 = 0; iF1 < arylst.size(); ++iF1 ) { System.out.println( arylst.get( iF1 ) ); } // 100 // 100 // 100 // 100 // 100 // 100 // 一応うまく動きましたが、それは「偶然」うまくいった // だけなので、基本的に「未定義」のことはしてはいけません。 } }