Biến chưa khai báo

Bách khoa toàn thư mở Wikipedia

Một biến chưa khai báo (tiếng Anh: undefined variable) trong mã nguồn của một chương trình máy tính là một biến được sử dụng trong mã nguồn nhưng chưa được chương trình khai báo trước đó.[1]

Một số ngôn ngữ lập trình sẽ tự động tạo khai báo cho biến khi lần đầu tiên gặp nó trong quá trình biên dịch. Ngược lại, ở một số ngôn ngữ khác, sử dụng biến chưa khai báo được coi là một lỗi nghiêm trọng, có thể khiến quá trình biên dịch bị dừng và trả về cảnh báo lỗi.

Một số ngôn ngữ lập trình ban đầu có tự động khai báo ngầm, nhưng về sau này chúng đã cung cấp tùy chọn để tắt tính năng này (ví dụ như "use warnings" trong Perl hoặc "Option Explicit" trong Visual Basic).

Ví dụ[sửa | sửa mã nguồn]

Dưới đây là một số ví dụ về cách các ngôn ngữ lập trình khác nhau phản hồi lại biến chưa được khai báo.

CLISP[sửa | sửa mã nguồn]

(setf y x)

trả về:

*** - EVAL: variable X has no value

C[sửa | sửa mã nguồn]

int main() {
  int y = x;
  return 0;
}

trả về:

foo.c: In function `main':
foo.c:2: error: `x' undeclared (first use in this function)
foo.c:2: error: (Each undeclared identifier is reported only once
foo.c:2: error: for each function it appears in.)

JavaScript[sửa | sửa mã nguồn]

ReferenceError chỉ xảy ra trong hai trường hợp: hoặc đoạn mã đã được chạy lại sau khi biến đã được khai báo bằng let hoặc const (không phải bằng var), hoặc đoạn mã đã được chạy trong strict mode (chế độ nghiêm ngặt). Trong các trường hợp khác, biến đó sẽ có giá trị đặc biệt là undefined.

"use strict";
let y = x;
let y = x;
let x; // gây ra lỗi ở dòng 1

trả về:

 ReferenceError: x is not defined
 Source File: file:///c:/temp/foo.js

Lua[sửa | sửa mã nguồn]

y = x

(không có lỗi, tiếp tục chạy)

print(y)

trả về:

nil

ML (Standard ML of New Jersey)[sửa | sửa mã nguồn]

val y = x;

trả về:

stdIn:1.9 Error: unbound variable or constructor: x

MUMPS[sửa | sửa mã nguồn]

Set Y=X

trả về:

<UNDEF>

OCaml[sửa | sửa mã nguồn]

let y = x;;

trả về:

Unbound value x

Perl[sửa | sửa mã nguồn]

my $y = ($x // 0) + 1; # toán tử hoặc

trả về:

(no error)

PHP 5[sửa | sửa mã nguồn]

$y = $x;
(no error)
$y="";
$x="";
error_reporting(E_ALL);
$y = $x;

trả về

PHP Notice:  Undefined variable: x in foo.php on line 3

Python 2.4[sửa | sửa mã nguồn]

>>> x = y  # trả về nội dung dưới đây:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'y' is not defined

REXX[sửa | sửa mã nguồn]

signal on novalue
y = x

trả về:

+++ Error 30 in line 2: Label not found

Ruby[sửa | sửa mã nguồn]

irb(main):001:0> y = x
NameError: undefined local variable or method `x' for main:Object
	from (irb):1

Tcl[sửa | sửa mã nguồn]

% set y $x
can't read "x": no such variable

VBScript[sửa | sửa mã nguồn]

Dim y
y = x
(không có lỗi)
Option Explicit

Dim y
y = x

trả về

(3, 1) Microsoft VBScript runtime error: Variable is undefined: 'x'

Tham khảo[sửa | sửa mã nguồn]

  1. ^ “undefined variable”. YourDictionary, n.d. Web. Bản gốc lưu trữ 15 tháng 4 năm 2013. Truy cập 24 tháng 7 năm 2013.