+1

Bạn thực sự hiểu về các biến trong Ruby

1. Variable (biến) là gì ?

Biến là nơi lưu trữ dữ liệu. Mỗi biến có một tên riêng, tên biến được đặt theo một số quy luật riêng. Mỗi biến có một kiểu dữ liệu riêng. Ruby có rất nhiều kiểu dữ liệu có sẵn. Kiểu dữ liệu trong Ruby là kiểu dữ liệu động, tức là khi chúng ta khai báo biến và gán giá trị thì Ruby sẽ tự động gán kiểu dữ liệu cho biến dựa trên giá trị đó chứ chúng ta không cần phải khai báo trước kiểu dữ liệu như trong các ngôn ngữ như C++, Java…

Ví dụ :

i = 5
puts i  # result = 5
i = 7.7
puts i # result = 7.7

2. Các loại biến trong Ruby


Trong ruby có 5 loại biến được định nghĩa :
❖ Global variable (biến toàn cục) - ký hiệu $
➔ Có sẵn ở mọi nơi trong tập lệnh Ruby của bạn
❖ Local variable (biến cục bộ) cách tạo biến là chữ cái thường
➔ Nó phụ thuộc vào phạm vi (tạo phạm vi mới với lớp mới, mô-đun mới, phương thức)
❖ Instance variable (biến phiên bản)- ký hiệu @
➔ Chỉ khả dụng trong một đối tượng cụ thể, trên tất cả các phương thức trong một lớp
Không có sẵn trực tiếp từ các định nghĩa lớp.
❖ Class variable (biến lớp) - ký hiệu @@
➔ Có sẵn từ định nghĩa lớp và bất kỳ lớp con nào. Không có sẵn từ bất kỳ đâu bên ngoài.
❖ Constants (hằng số) - Bắt đầu bằng một chữ cái viết hoa chữ cái đầu hoặc viết hoa toàn bộ tên biến . Biến hằng trong ruby có thể thay đổi giá trị.
Như ae thấy trong ruby có nhiều loại biến khác nhau đúng không nên cân nhắc khi sử dụng cho phụ hợp nhé 😃

3 . Cách sử dụng các biến trong Ruby

Global variables


Qua ví dụ trên dễ thấy là : $global là biến không nằm trong class C nhưng khi chúng ta new đối tượng gọi đến phương thức my_method thì biến $global nó sẽ lấy giá trị ban đầu là 0 rồi cộng thêm 1.Lẽ đương nhiên là giá trị biến $global = 1 lúc này . thế dễ hiểu mà đúng không ae

Local variable


Đọc lại phạm vi của biến cục bộ và tự đoán kết như thế nào nhé ? Chắc ae cũng đoán đúng rồi nhỉ .
Nhìn vào đoạn code trên thấy biến chỉ có 1 biến duy nhất đó là color (dễ vl) , vậy liệu nó có cùng giá trị bằng nhau không . Khi ta gọi hàm method thì giá trị nào được in ra "Red" hay 192. color = "Red" biến này trong nằm trong phạm vi hàm method nên nó không in ra rồi và color = "Red" sẽ in ở puts nhé vì phạm vi của nó ở ngoài hàm .

Instance variable

Để hiểu đó hơn biến này thì mình sẽ đề cấp đến class nhé . Ae nào chưa đọc qua class trong Ruby thì cũng không quá lo lắng nhé . Mình chỉ biến phạm vi của nó là oke rồi . Biết sớm cái gì sớm thì càng tốt thôi chứ ...

  • Trong Ruby class được định nghĩa
class NameClass
     ...
end


Hàm initialize là hàm tạo trong ruby nhé.

Biến @student_id , @student_name là biến instance nên nó chỉ có phạm vi trong phương thức của class . Được sử dụng khi khởi tạo đối tượng student

Class variable

Đến đây chắc ae hình dung class trong Ruby như thế nào rồi đúng không . Vậy tiếp tục tìm hiểu thêm loại biến nữa nào @@

Có lẽ mọi người đang thế lạ về hàm này

def self.sides
    @@sides
end

Hàm này có tên là ** class method** . Đơn giản là khi class gọi đến hàm này mà không cần khởi tạo 1 đối tượng thôi . Vì từ khóa *self* đang tham chiếu đến chính class hiện gọi nó. Ae tìm hiểu self trong Ruby nhé thú zị lắm đấy

Constant variable


Dễ thấy có biến hằng số NAME đúng không.

Mình đã đề cập là biến constant có thể thay đối giá trị được , đó điều thú vị trong Ruby.
Vậy trong ruby có cách nào để không thay đổi giá trị biết hằng được không. Reply : được nhé dùng từ khóa freeze dùng trong (array, string là 1 mảng chuỗi nhé ) sẽ không thay đổi biến contanst:

  • Vừa rồi mình đã giới thiệu qua về biến trong Ruby và khi nào sử dụng các loại biến đó. Hi vọng bài mình chia sẽ có thể giúp cho các bạn mới học Ruby hiểu được biến và những điều thú vị trong Ruby . Lần đầu tiên mình viết blog nên có thiếu sót gì cứ comment để mình cải thiện nhé . Hẹn gặp lại ae vài bài share tiếp share của mình 😃

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí