Sự khác biệt giữa (<< & +=) của việc nối chuỗi trong String
Ruby
114
White

My Mai viết ngày 27/05/2015

Nhìn ví dụ dưới đây:

Nối chuỗi với +=

first_name = "Paul"
name = first_name
last_name = "Brian"
name += last_name

Bây giờ mình kiểm tra:

  • name ==> nó trả về kết quả PaulBrian
  • first_name ==> nó trả về kết quả Paul

Nối chuỗi với <<

first_name = "Paul"
name = first_name
last_name = "Brian"
name << last_name

Bây giờ mình kiểm tra:

  • name ==> nó trả về kết quả PaulBrian
  • first_name ==> nó trả về kết quả PaulBrian

Vì sao lại có kết quả như vậy?
Chúng ta sẽ kiểm tra **object_id* của name, first_name:*

first_name = "Paul"
name = first_name
name.object_id --> 70148644941380
first_name.object_id --> 70148644941380

Phép gán name = first_name lúc này name & first_name có cùng 1 object_id và khi thực hiện:

  • << nó sẽ xử lý trực tiếp trên object của nó, vì vậy khi name thay đổi thì first_name cũng thay đổi theo.
  • += nó sẽ tạo ra một object mới, vì vậy khi thay đổi name thì first_name không bị ảnh hưởng.

Đánh giá
Mình sẽ sử dụng benchmark để xem thời gian thực hiện của 2 cách làm này

require 'benchmark`

n = 10000

Benchmark.bm do |benchmark|
  benchmark.report("+=") do
    n.times do
      first_name = "Paul"
      name = first_name
      last_name = "Brian"
      name += last_name
    end
  end

  benchmark.report("<<") do
    n.times do
      first_name = "Paul"
      name = first_name
      last_name = "Brian"
      name << last_name
    end
  end
end

Kết quả:

       user     system      total        real
+=  0.010000   0.000000   0.010000 (  0.007283)
<<  0.000000   0.000000   0.000000 (  0.004042)

Qua đó mình thấy được tốc độ xử lý của << sẽ hiệu quả hơn +=

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

My Mai

33 bài viết.
177 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
21 8
Lotus là gì? (Link) là một Ruby Web Framework mới với chú trọng vào cấu trúc tách rời với thiết kế đơn giản và dễ hiểu. Hiện tại thì Lotus vừa re...
My Mai viết 3 năm trước
21 8
White
19 21
Bạn muốn load 3 image khác nhau (Ý mình ở đây là dùng tag không phải background nhé) cho 3 loại màn hình khác nhau (small, medium, large). Bạn sẽ l...
My Mai viết 3 năm trước
19 21
White
19 9
Tham gia cộng đồng Thoáng đó cũng đã 2 năm từ lúc tớ tham gia cộng đồng Ruby Việt Nam. Giờ ngồi ngẫm lại được gì và mất gì :v Thật thì chẳng mất...
My Mai viết gần 2 năm trước
19 9
Bài viết liên quan
White
8 6
Chưa xem phần 2? Xem (Link) Trong bài viết này tôi giới thiệu cho các bạn về khái niệm function arity, một cách gọi mĩ miều của số lượng argument ...
Lơi Rệ viết gần 3 năm trước
8 6
White
8 1
Tiếp theo (Link) Mình sẽ hướng dẫn cách test căn bản cho API mình tạo. Thật ra mà nói thì mình phải viết test trước khi làm nhưng mà để tránh việc...
My Mai viết 3 năm trước
8 1
White
4 2
__Chú thích__: Đây là bản dịch tiếng Việt của bài viết gốc của tôi. Nếu bạn muốn xem bản tiếng Anh, xin hãy trỏ tới URL (Link) Lời mở (Link) là ...
Lơi Rệ viết hơn 3 năm trước
4 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


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