Tham số và Giá trị Trả về trong Ruby

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 4 tháng 2, 2025

Trong Ruby, khi định nghĩa một hàm (method), chúng ta có thể truyền tham số vào để xử lý dữ liệu đầu vào, đồng thời sử dụng giá trị trả về để nhận kết quả của hàm. Điều này giúp hàm trở nên linh hoạt và có thể tái sử dụng trong nhiều trường hợp khác nhau.

1. Tham số trong Ruby

1.1. Hàm với tham số cơ bản

Ruby cho phép truyền tham số vào một hàm bằng cách đặt chúng trong dấu ngoặc () khi định nghĩa.

Ví dụ:

def xin_chao(ten)
  puts "Xin chào, #{ten}!"
end

xin_chao("Nam")  # Output: Xin chào, Nam!
xin_chao("Linh") # Output: Xin chào, Linh!

Giải thích:

  • Hàm xin_chao nhận một tham số ten và sử dụng giá trị này để in ra lời chào.
  • Khi gọi hàm, ta truyền vào một chuỗi như "Nam" hoặc "Linh".

1.2. Hàm với nhiều tham số

Bạn có thể truyền nhiều tham số bằng cách phân tách chúng bằng dấu phẩy ,.

Ví dụ:

def cong(a, b)
  puts "Tổng của #{a} và #{b} là #{a + b}"
end

cong(3, 5)  # Output: Tổng của 3 và 5 là 8

Giải thích:

  • Hàm cong nhận hai tham số ab, sau đó in ra tổng của chúng.

1.3. Tham số có giá trị mặc định

Trong Ruby, bạn có thể đặt giá trị mặc định cho tham số. Nếu không truyền giá trị, Ruby sẽ sử dụng giá trị mặc định.

Ví dụ:

def gioi_thieu(ten = "Bạn")
  puts "Xin chào, #{ten}!"
end

gioi_thieu        # Output: Xin chào, Bạn!
gioi_thieu("Nam") # Output: Xin chào, Nam!

Giải thích:

  • Nếu không truyền tham số ten, hàm sẽ sử dụng "Bạn" làm giá trị mặc định.

1.4. Số lượng tham số không xác định (Splat Argument)

Nếu bạn muốn một hàm nhận nhiều tham số mà không cần biết trước số lượng, bạn có thể sử dụng *.

Ví dụ:

def tinh_tong(*so)
  puts "Tổng là: #{so.sum}"
end

tinh_tong(1, 2, 3)          # Output: Tổng là: 6
tinh_tong(10, 20, 30, 40)   # Output: Tổng là: 100

Giải thích:

  • *so nhận tất cả các tham số được truyền vào dưới dạng một mảng và dùng .sum để tính tổng.

2. Giá trị Trả về trong Ruby

Mặc định, Ruby trả về giá trị của biểu thức cuối cùng trong hàm mà không cần từ khóa return. Tuy nhiên, bạn vẫn có thể dùng return nếu muốn.

2.1. Hàm có giá trị trả về mặc định

Ví dụ:

def nhan(a, b)
  a * b  # Giá trị cuối cùng sẽ được trả về
end

puts nhan(4, 5)  # Output: 20

Giải thích:

  • Ruby tự động trả về giá trị của biểu thức cuối cùng (a * b).

2.2. Hàm sử dụng từ khóa return

Bạn có thể dùng return để kiểm soát giá trị trả về.

Ví dụ:

def chia(a, b)
  return "Không thể chia cho 0" if b == 0
  a / b
end

puts chia(10, 2)  # Output: 5
puts chia(5, 0)   # Output: Không thể chia cho 0

Giải thích:

  • Nếu b == 0, hàm sẽ trả về chuỗi "Không thể chia cho 0".
  • Nếu không, Ruby sẽ trả về kết quả của a / b.

2.3. Trả về nhiều giá trị

Ruby cho phép một hàm trả về nhiều giá trị bằng cách sử dụng dấu phẩy ,.

Ví dụ:

def phep_toan(a, b)
  tong = a + b
  hieu = a - b
  tich = a * b
  thuong = a / b.to_f
  return tong, hieu, tich, thuong
end

t, h, ti, th = phep_toan(10, 2)
puts "Tổng: #{t}, Hiệu: #{h}, Tích: #{ti}, Thương: #{th}"

Output:

Tổng: 12, Hiệu: 8, Tích: 20, Thương: 5.0

Giải thích:

  • Hàm phep_toan trả về 4 giá trị.
  • Khi gọi hàm, các giá trị trả về được gán lần lượt cho t, h, ti, th.

Tổng kết

Tham số:

  • Tham số cơ bản: Nhận một hoặc nhiều giá trị khi gọi hàm.
  • Tham số mặc định: Nếu không truyền giá trị, Ruby dùng giá trị mặc định.
  • Tham số không xác định (* splat argument): Nhận nhiều giá trị dưới dạng mảng.

Giá trị trả về:

  • Mặc định: Trả về kết quả của biểu thức cuối cùng.
  • Dùng return: Kiểm soát giá trị trả về.
  • Trả về nhiều giá trị: Dùng dấu , để trả về nhiều kết quả.

Ruby cung cấp cách xử lý tham số và giá trị trả về linh hoạt, giúp mã nguồn dễ đọc và dễ mở rộng hơn.

Website Logo

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.

Bình luận

Website Logo

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.

Liên hệ công việc qua email dưới đây.

lhvuctu@gmail.com

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ