Chuyển đổi kiểu dữ liệu tường minh và không tường minh trong Ruby
TIL
633
Ruby
116
White

Mido viết ngày 27/05/2016

chú thích thuật ngữ

  • explicit: tường minh
  • implicit: không tường minh
  • conversion: chuyển đổi kiểu dữ liệu
  • target class: kiểu class mà mình muốn chuyển đổi về
  • runtime: thời điểm thực thi dòng lệnh
  • string interpolation: chuỗi nội suy

Một số hàm chuyển đổi trong Ruby

Hàm Target Class Loại
#to_a Array tường minh
#to_ary Array không tường minh
#to_i Integer tường minh
#to_int Integer không tường minh
#to_s String tường minh
#to_str String không tường minh

Hàm chuyển đổi tường minh

  • Chuyển đổi một đối tượng có kiểu dữ liệu hoàn toàn khác với target class.
  • Ruby sẽ không tự động gọi các hàm này trong lúc thực thi dòng lệnh. Chỉ có một ngoại lệ với chuỗi nội suy.

Ví dụ:

"123".to_i # bạn nói với Ruby rằng hãy chạy lệnh #to_i

"The time is now: #{Time.now}" # trường hợp ngoại lệ

Hàm chuyển đổi không tường minh

  • Chuyển đổi một đối tượng có kiểu dữ liệu tương đồng với target class.
  • Ruby sẽ tự động gọi các hàm này (ví dụ #to_str, #to_ary) để đảm bảo rằng đối tượng cần chuyển đổi có cùng kiểu với target class.

Ví dụ:

class Foo
 def to_str
  "Foo"
 end
end

class Bar; end

"Hello " + Foo.new
=> "Hello Foo"

"Hello " + Bar.new
=> TypeError: no implicit conversion of Bar into String

Khi nào nên dùng?

  • Nếu không cần quan tâm kiểu dữ liệu trước đó của parameter là gì thì dùng kiểu chuyển đổi tường minh.

Ví dụ:

def display_number(number)
 number = number.to_i
 puts "It is #{number}"
end

display_number(1)
=> It is 1

display_number("2")
=> It is 2
  • Nếu muốn kiểm soát chặt chẽ kiểu dữ liệu trước đó của parameter thì dùng kiểu chuyển đổi không tường minh.

Ví dụ:

def display_number(number)
 number = number.to_int
 puts "It is #{number}"
end

display_number(1)
=> It is 1

display_number("2")
=> NoMethodError: undefined method `to_int' for "2":String

Happy coding!

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

Mido

4 bài viết.
16 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
74 16
“I know what I want and I trust you to do your part.” Sandi Metz Hôm nay mình muốn giới thiệu bí quyết trên của (Link), một tác giả yêu thích của ...
Mido viết hơn 3 năm trước
74 16
White
17 7
Áp dụng code review trong quá trình phát triển dự án sẽ mang lại lợi ích to lớn cho nhóm lập trình cũng như cho từng thành viên trong nhóm. Bài viế...
Mido viết hơn 3 năm trước
17 7
White
11 0
Hiện tại công ty của mình đang sử dụng (Link) và Selenium để chạy các acceptance test. Mỗi khi có scenario nào fail trên CircleCI, thì bên mình sẽ ...
Mido viết gần 3 năm trước
11 0
Bài viết liên quan
White
0 2
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 5 tháng trước
0 2
White
20 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết 2 năm trước
20 1
White
9 0
Có một tuyên ngôn cho chủ nghĩa tối giản trong ngành phần mềm. Link: http://minifesto.org/ Fight for Pareto's law, look for the 20% of effort th...
Cẩm Huỳnh viết 2 tháng trước
9 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
4 bài viết.
16 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á!