Loading article…
コンピュータプログラムのソースコードにおける未定義変数とは、コード内でアクセスされているが、そのコードによって宣言されていない変数のことである。[ 1 ]
一部のプログラミング言語では、コンパイル時にそのような変数が初めて出現した際に、暗黙的な宣言が行われます。一方、他の言語では、そのような使用は重大な問題とみなされ、診断メッセージが出力され、コンパイルが失敗します。
一部の言語定義は当初、暗黙の宣言動作を使用していましたが、成熟するにつれてそれを無効にするオプションを提供するようになりました(たとえば、Perlのuse warnings" やVisual Basicの "などOption Explicit)。
以下に、さまざまなプログラミング言語の実装が未定義変数にどのように対応するかを示す例をいくつか示します。各コードスニペットの後には、エラーメッセージ(存在する場合)が続きます。
( setf y x )*** - EVAL: 変数 X に値がありません
int main () { int y = x ; return 0 ; }foo.c: 関数 `main` 内: foo.c:2: エラー: `x` が宣言されていません (この関数での最初の使用) foo.c:2: エラー: (宣言されていない識別子はそれぞれ一度だけ報告されます) foo.c:2: エラー: 出現する各関数について。)
ReferenceError は、同じ実行コードに後でletまたはconst(ただし ではないvar) 宣言がある場合、またはコードが厳格モードで実行された場合にのみ発生します。その他のすべての場合、変数には特別な値 が設定されますundefined。
"use strict" ; let y = x ;let y = x ; let x ; // 1行目でエラーが発生しますReferenceError: x が定義されていません ソースファイル: file:///c:/temp/foo.js
y = x(エラーなし、続行)
print ( y )なし
val y = x ;stdIn:1.9 エラー: 未定義の変数またはコンストラクタ: x
Y=Xと設定する
<UNDEF>
let y = x ;;制限のない値 x
my $y = ( $x // 0 ) + 1 ; # 定義済みOR演算子(エラーなし)
$y = $x ;(エラーなし)
$y = "" ; $x = "" ; error_reporting ( E_ALL ); $y = $x ;PHP Notice: 未定義の変数: x (foo.php の 3 行目)
x = yトレースバック(直近の呼び出し) :ファイル"<pyshell#0>" 、1行目、<module>内x = y NameError :名前'y'が定義されていません>>> x = y Traceback (most recent call last): File "<stdin>" , line 1 , in <module> NameError : name 'y' is not defined値なしのシグナル y = x +++ 2行目でエラー30が発生しました: ラベルが見つかりません
irb(main):001:0> y = x NameError: main:Object の未定義のローカル変数またはメソッド `x' from (irb):1% yを設定$x は"x"を読み取れません:そのような変数 はありませんDim y y = x(エラーなし)
オプション明示Dim y y = x(3, 1) Microsoft VBScript ランタイム エラー: 変数が定義されていません: 'x'