[Ruby] Objects trong Ruby #1
Ruby
119
RubyOnRails
42
Object
2
White

Gàcode viết ngày 18/04/2019

Giới thiệu

Ruby là một ngôn ngữ hướng đối tượng thuần túy, bởi vậy tất cả các giá trị (values) đều là objects và không có sự phân biệt giữa kiểu nguyên thủy (primitive types) và kiểu objects như trong nhiều ngôn ngữ lập trình khác.

Trong Ruby, tất cả các object kế thừa từ class Object và chia sẻ các methods được định nghĩa bởi class đó. Trong loạt bài này, chúng ta sẽ khám phá các tính năng chung của tất cả các object trong Ruby.

Những thông tin sau đây đều là những kiến thức nền tảng về object, chúng ta cùng tìm hiểu nhé. Let's go!

1. Tham chiếu object (Object References)

Trong Ruby, chúng ta chỉ thao tác với các object thông qua các tham chiếu đến nó. Khi ta gán một giá trị cho biến, chúng ta chỉ đơn thuần lưu trữ một tham chiếu đến object vào biến đó.

Đoạn code sau sẽ làm rõ hơn về điều này:

s = "Ruby" # Tạo một String object, lưu trữ một tham chiếu đến nó trong biến s
t = s # Copy tham chiếu vào biến t. Bây giờ s và t đều có chung tham chiếu đến cùng object.
t[-1] = "" # Chỉnh sửa object thông qua tham chiếu trong biến t
print s # Truy cập object đã chỉnh sửa thông qua s. In ra "Rub"
t = "Java" # Bây giờ t tham chiếu đến một object khác
print s,t # Dòng này in ra "RubJava"

Khi bạn truyền một object tới method trong Ruby, bạn chỉ đang truyền một tham chiếu object đến đó, không phải là chính object đó.

Nói cách khác, các đối số của methods nhận vào giá trị (value) thay vì tham chiếu (reference), nhưng các giá trị được truyền ở đây chính là các tham chiếu object.

Bởi vì các tham chiếu object được truyền vào method, method có thể sử dụng các tham chiếu để sửa đổi các object được tham chiếu.

1.1. Immediate values (các giá trị trực tiếp)

Chúng ta đã biết rằng: tất cả các giá trị trong Ruby là object và tất cả các object được thao tác thông qua reference (tham chiếu). Tuy nhiên, FixnumSymbol object thực sự là các giá trị trực tiếp thay vì các tham chiếu.

Cả 2 class này đều không có methods biến đổi, vì vậy các object FixnumSymbol là bất biến (không thay đổi - immutable). Nghĩa là thực sự không có cách nào để nói rằng: chúng được thao tác qua giá trị thay vì tham chiếu.

Sự tồn tại của các giá trị trực tiếp (immediate values) nên được xem xét một cách chi tiết. Khác biệt duy nhất giữa các giá trị immediate values và reference values đó là: các giá trị immediate không có các singleton methods được định nghĩa trong chúng.

(Singleton methods được giải thích trong §6.1.4 trang 179 - The Ruby Programming Language book).

Kết bài

Những kiến thức về Objects trong Ruby còn rất nhiều, ta sẽ tìm hiểu về chúng trong các bài viết tiếp theo, cảm ơn các bạn đã theo dõi bài viết.

Nếu bạn đọc phát hiện ra sai sót về kiến thức, hay chưa hiểu nội dung nào đó. Các bạn có thể để lại comment phía dưới, tôi sẽ xem xét và giải đáp mọi thắc mắc.

Tài liệu tham khảo

The Ruby Programming Language book (trang 72, 73)

https://gaacode.github.io/blog/2019/ruby-objects-trong-ruby-1/

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Gàcode

7 bài viết.
30 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
2 2
Giới thiệu Scope là một khái niệm cơ bản và quan trọng trong ngôn ngữ Ruby. Một khi hiểu được scope và những khái niệm xung quanh nó, bạn sẽ hiểu c...
Gàcode viết hơn 1 năm trước
2 2
White
1 0
Giới thiệu Trong Rails, chúng ta sử dụng các khai báo cấp class như has_many, belongs_to, chúng được gọi là các macros. Ví dụ: class Movie < Act...
Gàcode viết hơn 1 năm trước
1 0
White
1 1
Giới thiệu AJAX là viết tắt của Asynchronous Javascript and XML. Đây là một kỹ thuật trong Javascript, được dùng để cập nhật lại dữ liệu, giao diệ...
Gàcode viết hơn 1 năm trước
1 1
Bài viết liên quan
White
28 6
Ghi chú: Tiêu đề hoàn toàn mang tính câu view. Bài copy từ blog của tác giả :) Tại sao lại có bài viết này? Một ngày đẹp giời tôi cần kiểm t...
Minh-Trung Nguyễn viết gần 3 năm trước
28 6
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
7 bài viết.
30 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!