12/08/2018, 16:48

Self trong Ruby(p1)

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é. Receiver là 1 đối tượng nhận Message để thực thi method. Trong các ngôn ngữ lập trình hướng đối tượng, ...

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é.

  • Receiver là 1 đối tượng nhận Message để 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ửi Message đế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. Method times đã được gửi đến Receiver là số 3 thông qua dấu chấm, đó cũng chính là cách gửi Message 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é.
  • Hiểu đơn giản Receiver là đối tượng nhận Message thì Sender chính là đối tượng gửi Message đó đến cho Receiver. 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ỉ ra Receiver và Message nhưng lại không hề có Sender, thực ra Sender vẫn tồn tại, chỉ là nó bị ẩn đi mà thôi vì trong OOP phải luôn có 1 Sender gửi 1 Message đến Receiver. Vậy Sender 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ỏ đến main, vậy main chính là Sender. Có lẽ 1 số bạn thắc mắc main từ đâu ra, mình có khai báo main đâu mà lại có nó, thực ra main do tự chính bản thân Ruby sinh ra, nó chính là 1 instance của class Object và là default Sender ở 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 default Sender 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à             </div>
            
            <div class=
0