Trong Golang, tham số trả về được đặt tên thường được gọi là tham số được đặt tên. Golang cho phép đặt tên cho tham số trả về hoặc kết quả của các hàm trong chữ ký hoặc định nghĩa hàm. Hoặc bạn có thể nói đó là việc đặt tên rõ ràng cho các biến trả về trong định nghĩa hàm. Về cơ bản, nó loại bỏ yêu cầu đề cập đến tên biến với câu lệnh return. Bằng cách sử dụng tham số trả về được đặt tên hoặc tham số được đặt tên, người ta chỉ có thể sử dụng từ khóa return ở cuối hàm để trả về kết quả cho người gọi. Khái niệm này thường được sử dụng khi một hàm phải trả về nhiều giá trị. Vì vậy, để thuận tiện cho người dùng và tăng khả năng đọc mã, Golang cung cấp tiện ích này.
Khai báo tham số trả về được đặt tên
Để khai báo kết quả được đặt tên hoặc tham số trả về, chỉ cần sử dụng phần kiểu trả về của chữ ký hàm. Dưới đây là cú pháp chung để khai báo một hàm trong Golang. Cú pháp để khai báo một hàm không có tham số trả về được đặt tên:
func function_name(Parameter-list)(Return_type){
// function body.....
}
Ở đây, Return_Type là tùy chọn và nó chứa các kiểu giá trị mà hàm trả về. Nếu bạn đang sử dụng Return_Type trong hàm của mình, thì cần phải sử dụng câu lệnh return trong hàm của bạn.
Cú pháp để khai báo một hàm có đối số return được đặt tên:
func function_name(Parameter-list)(result_parameter1 data-_type, result_parameter2 data_type, ….){
// function body…..
return
}
Ở đây, (result_parameter1 data-_type, result_parameter2 data_type, ….) là danh sách đối số trả về được đặt tên cùng với kiểu của chúng. Bạn có thể khai báo n số lượng tham số trả về được đặt tên.
Ví dụ: Ví dụ: Trong chương trình bên dưới, dòng mã func calculator(a, b int) (mul int, div int) chứa các đối số trả về được đặt tên. Câu lệnh return ở cuối hàm không chứa bất kỳ tham số nào. Trình biên dịch Go sẽ tự động trả về các tham số.
// Chương trình Go mình họa
// cách dùng đối số trả về được đặt tên
package main
import "fmt"
// Phương thức chính
func main() {
// tại đây gọi hàm này
// hàm trả về hai giá trị
m, d := calculator(105, 7)
fmt.Println("105 x 7 = ", m)
fmt.Println("105 / 7 = ", d)
}
// hàm có các đối số được đặt tên
func calculator(a, b int) (mul int, div int) {
// tại đây phép gán đơn giản sẽ
// khởi tạo giá trị cho nó
mul = a * b
div = a / b
// tại đây bạn sẽ có từ khóa return
// không có bất kỳ tham số kết quả nào
return
}
Kết quả:
105 x 7 = 735
105 / 7 = 15
Lưu ý quan trọng:
- Nếu kiểu của tất cả các đối số trả về được đặt tên chung hoặc giống nhau thì bạn có thể chỉ định kiểu dữ liệu chung. So sánh mã bên dưới với ví dụ mà bạn đã đọc ở trên để hiểu rõ hơn.
// hàm có đối số đã được đặt tên
func calculator(a, b int) (mul, div int) {
- Ở đây, các biến mul và div đều có kiểu int. Vì vậy, bạn cũng có thể khai báo các đối số được đặt tên với kiểu dữ liệu chung như các biến hàm (tức là a và b)
- Sử dụng tham số trả về được đặt tên sẽ tăng cường khả năng đọc mã vì người ta có thể biết về các tham số trả về chỉ bằng cách đọc chữ ký hàm.
- Sau khi sử dụng tham số trả về được đặt tên, câu lệnh return thường được gọi là trả về Naked hoặc Bare.
- Theo mặc định, Golang định nghĩa tất cả các biến được đặt tên với giá trị bằng không và hàm sẽ có thể sử dụng chúng. Trong trường hợp hàm không sửa đổi các giá trị thì giá trị bằng không sẽ tự động trả về.
- Nếu bạn sử dụng toán tử khai báo ngắn (: =) để khởi tạo các tham số trả về được đặt tên, nó sẽ đưa ra lỗi vì đã được trình biên dịch Go khởi tạo. Vì vậy, bạn có thể sử dụng phép gán đơn giản (=) để gán các giá trị cho các tham số trả về được đặt tên.
// hàm có đối số được đặt tên
func calculator(a, b int) (mul int, div int) {
// tại đây, nó sẽ báo lỗi
// dưới dạng tham số đã được xác định
// trong chữ ký hàm
mul := a * b
div := a / b
// tại đây bạn có từ khóa return
// không có bất kỳ tham số kết quả nào
return
}
- Đối số trả về có tên hoặc câu lệnh trả về tối thiểu chỉ tốt cho chữ ký hàm ngắn. Đối với các hàm dài hơn, hãy trả về rõ ràng các tham số kết quả (không sử dụng tham số trả về có tên) để duy trì khả năng đọc của mã.
- Trong trường hợp đối số trả về có tên, câu lệnh trả về tối thiểu hoặc đơn giản là bắt buộc.