Proc và Lambda trong Ruby: Sự Khác Biệt và Cách Sử Dụng

Trong ngôn ngữ lập trình Ruby, Proc và Lambda đóng vai trò quan trọng, mang lại sự linh hoạt cho việc xử lý hàm và thực hiện các tác vụ khác nhau. Trong bài viết này, chúng ta sẽ khám phá sự khác biệt giữa Proc và Lambda, cách chúng được tích hợp có thể làm cho mã nguồn của bạn trở nên mạnh mẽ, linh hoạt, và dễ đọc hơn. Cùng đi sâu vào thế giới của Proc và Lambda để hiểu rõ hơn và nâng cao kĩ năng lập trình của bạn!

1. Proc

1.1 Khái niệm

  • Proc là một class trong Ruby
  • Đối tượng Proc là sự đóng gói của một khối mã, có thể được lưu trữ trong một biến, được truyền vào một method hoặc Proc khác và được gọi khi cần dùng

1.2 Khai báo và sử dụng Proc

  • Proc có 2 cách khai báo và nhiều cách gọi
Ruby
# Lambda-like syntax
sample_proc = Proc.new {|x| puts x}
# Or short syntax
sample_proc = proc {|x| puts x}

# Call proc (Output: 10)
sample_proc.call(10) 
# Or
sample_proc[10]
# Or
sample_proc.10
# Or
sample_proc.yield(10)

2. Lambda

2.1 Khái niệm

  • Lambda là một đối tượng đặc biệt của Proc, mang lại cú pháp đơn giản hơn cho việc định nghĩa hàm

2.2 Khai báo và sử dụng Lambda

  • Lambda có 2 cách khai báo. Cách gọi Lambda cũng giống như gọi Proc
Ruby
sample_lambda = lambda {|x| puts x}
# Or
sample_lambda = ->(x) {puts x}

3. Sự khác biệt

Ngoài syntax khai báo thì Proc và Lambda còn có những điểm khác biệt sau

3.1 Parameters

This image has an empty alt attribute; its file name is Screen-Shot-2023-11-15-at-9.42.33-AM-1024x393.png
  • Proc không cần truyền đúng số lượng arguments vẫn hoạt động tốt
  • Lambda bắt buộc truyền đúng số lượng arguments nếu không sẽ raise errors
  • Proc có khả năng giải cấu trúc mảng để tương ứng với arguments
  • Lambda thì không

3.2 Return

  • Khi gặp lệnh return trong method
    • Proc lập tức thoát hàm và không xử lý gì thêm
    • Lambda vẫn xử lý như một method thông thường
  • Khi return hiện diện trực tiếp trong block
    • Proc sẽ báo lỗi khi gọi
    • Lambda vẫn hoạt động tốt
Đây là lý do vì sao trong Rails, bạn sẽ hiếm khi thấy ai dùng Proc để viết scope, vì Proc kém linh hoạt hơn Lambda ở cú pháp return này

4. Một vài method khác

4.1 lambda?

Để kiểm tra một đối tượng Proc có phải là lambda hay không

4.2 source_location

Trả về tên file và số dòng chứa đối tượng Proc này

This image has an empty alt attribute; its file name is Screen-Shot-2023-11-15-at-11.13.57-AM.png

4.3 Others

Còn rất nhiều method hữu ích dành cho proclambda, bạn có thể tham khảo trực tiếp trên docs của Ruby

https://ruby-doc.org/3.1.2/Proc.html

5. Lời kết

  • Chúng ta đã khám phá xong sự khác biệt giữa ProcLambda trong Ruby
  • Dù cả hai đều là đối tượng của Proc nhưng Lambda mang lại sự linh hoạt hơn với cú pháp khai báo, xử lý tham số nghiêm túc, và kiểm soát lệnh return
  • ProcLambda đều có vai trò quan trọng trong việc làm cho mã nguồn Ruby trở nên mạnh mẽ và dễ đọc hơn, tùy thuộc vào ngữ cảnh sử dụng
0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like
Read More

Nâng bao nhiêu pool connect database là phù hợp

Trong bài viết này chúng ta sẽ tìm hiểu về sự quan trọng của việc tối ưu hóa kết nối database và tìm cách đảm bảo rằng bạn đang sử dụng số lượng pool kết nối đúng đắn, tiết kiệm tài nguyên và đảm bảo hiệu suất hệ thống.