Self trong Ruby(p1)
Bài đăng này đã không được cập nhật trong 4 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
Receiverlà 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ềReceiversau đây.
- Như các bạn có thể thấy ở trên,
Receivercủa chúng ta là số 3. Methodtimesđã được gửi đếnReceiverlà số 3 thông qua dấu chấm, đó cũng chính là cách gửiMessagethô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
Senderlà gì nhé.
2. Sender
- Hiểu đơn giản
Receiverlà đối tượng nhậnMessagethìSenderchính là đối tượng gửiMessageđó đến choReceiver. Theo như bản thân mình thìSenderchí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ỉ raReceivervàMessagenhưng lại không hề cóSender, thực raSendervẫn tồn tại, chỉ là nó bị ẩn đi mà thôi vì trong OOP phải luôn có 1Sendergửi 1MessageđếnReceiver. VậySendertrong 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ó.

Selfchính làSendertrong trường hợp này, và nó trỏ đếnmain, vậymainchính làSender. Có lẽ 1 số bạn thắc mắcmaintừ đâu ra, mình có khai báomainđâu mà lại có nó, thực ramaindo tự chính bản thân Ruby sinh ra, nó chính là 1 instance của classObjectvà 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 defaultSendertên làmainnhưng thực sự thì không hề có 1 biến nào tên làmaincả, nghe hơi vô lí đúng không nhưng đời là thế mà
) Chúng ta chỉ có thể truy cập đến mainthông qua từ khóaselfmà thôi. - Vậy là chúng ta đã biết
Sendercó 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:Messagehay chính làmethodđó có nguồn gốc từ đâu ra- Đối tượng nào sở hữu
scopekhi 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
Senderlà 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ề
ReceivervàSendertrong 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