Self trong Ruby(p1)
Bài đăng này đã không được cập nhật trong 3 năm
Chào các bạn, hôm nay mình xin phép chia sẻ một số kiến thức của bản thân mình về self
trong ruby. Đầu tiên để hiểu self
là gì chúng ta sẽ cùng tìm hiểu về Sender
và Receiver
trong Ruby nhé.
1. Receiver
Receiver
là 1 đối tượng nhậnMessage
để thực thi method. Trong các ngôn ngữ lập trình hướng đối tượng, mọi thứ đều được thực hiện bởi việc gửiMessage
đến 1 đối tượng. Nghe có vẻ hơi trừu tượng và khó hiểu đúng không, mình có 1 ví dụ nho nhỏ giúp các bạn dễ hiểu và dễ hình dung hơn vềReceiver
sau đây.- Như các bạn có thể thấy ở trên,
Receiver
của chúng ta là số 3. Methodtimes
đã được gửi đếnReceiver
là số 3 thông qua dấu chấm, đó cũng chính là cách gửiMessage
thông dụng nhất trong ruby. Và chúng ta có kết quả như này. - Tiếp theo chúng ta sẽ cùng tìm hiểu
Sender
là gì nhé.
2. Sender
- Hiểu đơn giản
Receiver
là đối tượng nhậnMessage
thìSender
chính là đối tượng gửiMessage
đó đến choReceiver
. Theo như bản thân mình thìSender
chính là môi trường mà đoạn code được chạy, hơi khó hiểu đúng không hãy cùng xem thử ví dụ nhé. Như trong ví dụ ở trên mình đã chỉ raReceiver
vàMessage
nhưng lại không hề cóSender
, thực raSender
vẫn tồn tại, chỉ là nó bị ẩn đi mà thôi vì trong OOP phải luôn có 1Sender
gửi 1Message
đếnReceiver
. VậySender
trong trường hợp này là gì, hãy cùng xem nhé. - Đầu tiên chúng ta hãy cùng sửa lại đoạn code trên như này, và đây là cái chúng ta có.
Self
chính làSender
trong trường hợp này, và nó trỏ đếnmain
, vậymain
chính làSender
. Có lẽ 1 số bạn thắc mắcmain
từ đâu ra, mình có khai báomain
đâu mà lại có nó, thực ramain
do tự chính bản thân Ruby sinh ra, nó chính là 1 instance của classObject
và là defaultSender
ởTop Level
.Chúng ta có thể kiểm tra cái này như sau- Vậy nếu chúng ta gọi thẳng đến main thay vì gọi self thì sẽ như thế nào
- Lỗi rồi, tại sao lại vậy nhỉ?
Ruby
đã tạo ra defaultSender
tên làmain
nhưng thực sự thì không hề có 1 biến nào tên làmain
cả, nghe hơi vô lí đúng không nhưng đời là thế mà ) Chúng ta chỉ có thể truy cập đếnmain
thông qua từ khóaself
mà thôi. - Vậy là chúng ta đã biết
Sender
có thể bị ẩn đi và không thấy rõ ràng được, nhưng có cách để bạn có thể tìm ra đượcSender
, hãy luôn hỏi 2 câu hỏi sau:Message
hay chính làmethod
đó có nguồn gốc từ đâu ra- Đối tượng nào sở hữu
scope
khi chương trình đang chạy hay chính là môi trường mà đoạn code được chạy ở đâu
- Khi trả lời được 2 câu hỏi trên bạn sẽ xác định được
Sender
là gì.
3. Tổng kết
- Mình đã giới thiệu với các bạn 1 chút kiến thức cơ bản về
Receiver
vàSender
trong Ruby, phần tiếp theo chúng ta sẽ cùng thảo luận tiếp về self, Cảm ơn mọi người đã đọc. - Bài viết có tham khảo từ cuốn sách Ruby Basic của tác giả Bala Paranj
All rights reserved