Hàm
Giá trị mặc định
Tham số mặc định trong Node.js và Swift so với Option (Rust), overloading (Java) và con trỏ + nil (Go).
- Phiên bản tối thiểu
- Node.js ≥ 12.20Go ≥ 1.0Rust ≥ 1.0Swift ≥ 5.1Java ≥ 25
- Đã chạy thử trên
- Node.js 24.12.0Go 1.27.1Rust 1.98.1Swift 6.2.4Java 25.0.4.1
Code Node.js là ES module: lưu file .mjs hoặc đặt "type": "module" trong package.json.
Node.js cho phép gán giá trị mặc định ngay trong danh sách tham số. Swift là ngôn ngữ duy nhất khác trong danh sách có đúng cú pháp này. Go không có cú pháp này — muốn biết caller có "để trống" tham số hay không, bạn phải dùng con trỏ và kiểm tra nil. Rust cũng không có tham số mặc định — dùng Option để bắt buộc caller truyền rõ ràng "có" hay "không". Java giải quyết bằng overloading: định nghĩa nhiều phiên bản của cùng một hàm.
Giá trị mặc định cho tham số
function greet(name = 'stranger') {
return `hello ${name}`;
}
console.log(greet()); // hello stranger
console.log(greet('bob')); // hello bobpackage main
import "fmt"
// dùng con trỏ và kiểm tra nil để biết tham số có bị bỏ trống hay không
func greet(name *string) string {
n := "stranger"
if name != nil {
n = *name
}
return fmt.Sprintf("hello %s", n)
}
func main() {
fmt.Println(greet(nil)) // hello stranger
name := "bob"
fmt.Println(greet(&name)) // hello bob
}// Không có tham số mặc định: dùng Option để caller phải truyền rõ ràng.
fn greet(name: Option<&str>) -> String {
format!("hello {}", name.unwrap_or("stranger"))
}
fn main() {
println!("{}", greet(None)); // hello stranger
println!("{}", greet(Some("bob"))); // hello bob
}func greet(name: String = "stranger") -> String {
"hello \(name)"
}
print(greet()) // hello stranger
print(greet(name: "bob")) // hello bob// Không có tham số mặc định: overload nhiều phiên bản của cùng một hàm.
static String greet() {
return greet("stranger");
}
static String greet(String name) {
return "hello " + name;
}
void main() {
IO.println(greet()); // hello stranger
IO.println(greet("bob")); // hello bob
}Tham khảo: github.com/miguelmota/golang-for-nodejs-developers#default-values