Heredoc là gì?
Heredoc là cách định nghĩa chuỗi đa dòng (multiline string), trong khi giữ nguyên indent & format gốc.
Điều này dùng để nhúng đoạn code, như SQL hoặc HTML.
Ví dụ:
query = <<-SQL SELECT * FROM food WHERE healthy = true SQL
Bạn dùng cú pháp này để định nghĩa heredoc trong Ruby.
Bạn bắt đầu với ký hiệu <<-, sau đó là từ đại diện cho tên heredoc này, rồi nội dung heredoc, rồi đóng heredoc với từ đó trên dòng riêng.
Cách khác là dùng %Q:
query = %Q( Article about heredocs )
Bạn sẽ nhận được newline thừa ở đầu & cuối chuỗi này. Heredoc (hoặc gọi phương thức strip) giải quyết điều đó.
Đây là Ruby heredoc không có trailing newline:
query = <<-HTML.chomp Article about heredocs HTML
Interpolation trong Ruby Heredoc
Nếu bạn thắc mắc có thể dùng string interpolation với heredoc không…
Câu trả lời là có!
Ví dụ:
type = "healthy"
table = "food"
query = <<-SQL
SELECT * FROM #{table} WHERE #{type} = true
SQL
Bạn có thể tắt interpolation bằng cách bao quanh tên heredoc với single quotes.
Như thế này:
doc = <<-'TIME'
Current time is #{Time.now}
TIME
Ruby Squiggly Heredoc (Heredoc xoắn)
Làm thế nào để bỏ indent thừa ở đầu mỗi dòng?
Đó là việc của squiggly heredoc (heredoc xoắn).
Được giới thiệu trong Ruby 2.3, squiggly heredoc loại bỏ indent thừa cho bạn.
Ví dụ:
page = <<-HTML Heredocs are cool & useful HTML # " Heredocs are cool & useful\n" page = <<~HTML Heredocs are cool & useful HTML # "Heredocs are cool & useful\n" page = <<~HTML.strip Heredocs are cool & useful HTML # "Heredocs are cool & useful"
Bây giờ bạn có thể giữ khoảng trắng thừa cho dễ đọc.
Trong khi bỏ chúng trong chuỗi thực tế!
Tóm tắt
Bạn đã học cách dùng heredoc trong Ruby cho việc nhúng chuỗi đa dòng trong code. Điều này có thể hữu ích cho việc viết test cho code hoặc có sẵn các đoạn dữ liệu nhỏ mà không phải đọc file.
Cảm ơn bạn đã đọc!