Hàm

Bạn đã thấy đâu đó hàm main(), là hàm bắt đầu của mọi ứng dụng D. Hàm có thể trả về giá trị, hoặc không trả về giá trị nào (void), còn đầu vào của hàm có thể có tùy ý tham số.

int add(int lhs, int rhs) {
    return lhs + rhs;
}

auto tự xác định kiểu trả về

Kiểu trả về của hàm có thể được D nội suy từ biểu thức định nghĩa hàm. Các biểu thức return khác nhau trong hàm phải trả về những kiểu giá trị tương thích nhau.

auto add(int lhs, int rhs) { // trả về kiểu `int`
    return lhs + rhs;
}

auto lessOrEqual(int lhs, int rhs) { // trả về kiểu `double`
    if (lhs <= rhs)
        return 0;
    else
        return 1.0;
}

Giá trị đầu vào mặc định

Tham số đầu vào của hàm có thể nhận giá trị mặc định, nhờ cách này lập trình viên đỡ mất công định nghĩa chồng hàm.

void plot(string msg, string color = "đỏ") {
    ...
}
plot("D tuyệt");
plot("D tuyệt", "xanh");

Khi một tham số được chỉ ra giá trị mặc định, tất cả tham số theo sau nó cũng phải được chỉ ra giá trị mặc định.

Hàm cục bộ

Bạn có thể định nghĩa hàm bên trong hàm khác, chỉ để sử dụng bên trong ngữ cảnh của hàm này, còn bên ngoài thì không thể truy cập được. Tất nhiên, từ hàm bên trong có thể nhìn thấy các biến, đối tượng bên ngoài nó.

void fun() {
    int local = 10;
    int fun_secret() {
        local++; // local ở ngoài nhé
    }
    ...

Hàm lồng nhau này được gọi là ủy nhiệm (delegate), và sẽ được mô tả chi tiết hơn ở đây.

Đọc thêm

rdmd playground.d