Bảng dưới đây mô tả về quy tắc đặt tên và phạm vi sử dụng của biến (variable) và hằng (constant) trong ngôn ngữ lập trình Ruby.
Trong Ruby có những loại biến số:
- Local variable
- Global variable
- Class variable
- Instance variable
Loại biến số được xác định dựa vào cách đặt tên. Tùy thuộc vào từng loại biến mà phạm vi sử dụng và kết quả trả về khi tham chiếu biến chưa được khai báo sẽ khác nhau.
Quy tắc đặt tên biến và hằng
Loại biến và hằng | Quy tắc đặt tên | Phạm vi sử dụng | Kết quả khi tham chiếu biến / hằng chưa được khai báo |
---|---|---|---|
Local variable | Ký tự bắt đầu là chữ cái thường hoặc dấu _, các kỹ tự còn lại là chữ cái hoặc dấu _ | Trong block hoặc method được định nghĩa | Khi biến được khai báo trước nhưng chưa được gán gì thì sẽ trả về nil. Nếu biến chưa được khai báo thì sẽ sinh exception |
Global variable | Ký tự bắt đầu là $, các ký tự còn lại là chữ cái hoặc dấu _ | Có thể được gọi từ bất cứ đâu | nil |
Class variable | Ký tự bắt đầu là @@, các ký tự còn lại là chữ cái hoặc dấu _ | Tất cả instance của class đó | Sinh exception |
Instance variable | Ký tự bắt đầu là @, các ký tự còn lại là chữ cái hoặc dấu _ | Bên trong instance đó | nil |
Constant | Ký tự bắt đầu là chữ cái hoa, các ký tự còn lại là chữ cái hoặc dấu _ | Bên trong class / module đó, bên trong class / module được định nghĩa từ class / module ban đầu, bên trong module kế thừa hoặc include của class / module ban đầu. Bên ngoài cũng có thể tham chiếu được nếu thêm tiền tố là tên class / module | Sinh exception |
Ví dụ về Local variable (biến cục bộ)
1
2
3
4
5
6
7
8
foo = 1
def bar
foo # Bởi vì từ bên trong method không thể gọi local variable bên ngoài, do đó sẽ được xem là đang gọi method foo
end
bar # => Sinh exception NameError, bởi vì local variable foo chưa được khai báo trong method bar
baz # => Sinh exception NameError, bởi vì chưa có khai báo local variable baz
Ví dụ về Global variable (biến toàn cục)
1
2
3
4
5
6
7
8
$foo = 1
def bar
$foo # Gọi global variable $foo ở bên ngoài method
end
bar # => 1, $foo của method bar chính là $foo ở bên ngoài method
baz # => nil, bởi vì global variable chưa được định nghĩa sẽ trả về nil
Ưu điểm của Global variable: Có thể được gọi ở bất cứ đâu, nếu chưa được khai báo thì sẽ trả về nil
Nhược điểm của Global variable: Có thể được thay đổi giá trị ở bất cứ đâu, do đó nếu không có lý do gì đặc biệt thì nên sử dụng Local variable.