Self trong ruby (p2)
Bài đăng này đã không được cập nhật trong 7 năm
Self trong ruby (p1): https://viblo.asia/p/self-trong-rubyp1-ORNZqP7GK0n.
Chào các bạn, trong phần trước mình đã giới thiệu về sender và receiver trong ruby, hôm nay chúng ta sẽ cùng tiếp tục tìm hiểu về self và cách giá trị của self thay đổi khi chương trình được thực thi nhé.
- Đầu tiên chúng ta sẽ khai báo 1 class Car với phương thức drive như thế này:

- Chúng ta có thể khởi tạo ra 1 đối tượng của class
Carvà gửi 1messageđến đối tượngcarmà chúng ta vừa tạo 
- Chúng ta sẽ có:

- Khá là đơn giản đúng không, nhưng đó không phải cái mình muốn nói tới ở đây, hãy cùng tìm hiểu sâu hơn chút nữa nhé
1. self trước khi message được gửi đi
- Hãy cùng xem giá trị của
selftrước khi chúng ta gửimessageđến đối tượngcarnhé. Thêm dòng này vào cái đã 
- Dòng trên sẽ in ra:

- Vì chúng ta đang ở top level, mình cũng đã giải thích ở bài trước ruby sẽ tự sinh ra một đối tượng main làm sender ở top level nên trong trường hợp này self sẽ trỏ đến main, khá là dễ hiểu đúng không.
2. self khi message được gửi đi
- Thử đoán xem khi
messageđược gửi đi thìselfcó giá trị là gì nào

- Nếu bạn đoán
selfchính là đối tượngcarmà chúng ta đã tạo thì chúc mừng bạn đã đoán đúng rồi đó, kiến thức về ruby của bạn không tồi đâu
. Đã có trước khi gửi và trong khi gửi, cuối cùng hãy cùng xem sau khi gửi thì selfsẽ có hình thù ra sao nào.
3. self sau khi message được gửi đi
- Hãy cùng thay đổi lại thứ tự dòng lệnh 1 chút

- Chúng ta sẽ có

- Bất ngờ chưa (đùa đấy
), selflại quay trở về giá trịmainnhư ban đầu, nếu bạn có hơi hoang mang thì cũng đừng lo lắng quá, thực ra đây là cơ chế củaruby,selftrongrubysẽ luôn thay đổi giá trị của nó, không bao giờ giữ nguyên 1 giá trị hay nói cách khác giá trị của nó rất linh động để phù hợp với ngữ cảnh.
4. Tổng kết
- Vậy là hôm nay mình đã giới thiệu với các bạn tính linh động của
selftrong ruby, mình hi vọng qua bài viết này các bạn sẽ hiểu thêm được thêm về ngôn ngữrubyđể có 1 cái nhìn đúng đắn hơn vềrubycũng như áp dụng được nó trong công việc, nếu yêu thích bài viết này thì hãy nhấn nút up vote ở góc trái nhé, cảm ơn vì đã dành thời gian đọc bài viết của mình. - Bài viết có sử dụng tư liệu trong cuốn sách Ruby Basic của tác giả Bala Paranj
All rights reserved