Link

Hàm

Mục lục

  1. Khai báo hàm
  2. Trả về
  3. Sử dụng hàm
  4. Một số thứ đặc biệt
    1. Hàm đệ qui
    2. Hàm rút gọn
    3. Gọi hàm theo ngữ nghĩa (literally)

Khai báo hàm

Cú pháp:

hàm <tên_hàm>([các_tham_s])
    <thân_hàm>
xong

// Hoặc như này
hàm <tên_hàm>([các_tham_s]) {
    <thân_hàm>
}

Để khai báo một hàm, ta sử dụng từ khóa hàm, theo sau là tên của hàm. Tiếp theo là cặp ngoặc tròn chứa các tham số bên trong (có thể có hoặc không). Tiếp tục đến phần thân hàm, và kết thúc là từ khóa xong hoặc thôi.

Có thể viết phần thân hàm bằng cách đặt chúng vào trong cặp dấu ngoặc nhọn {..}.

Một hàm chỉ có thể được khai báo trong phần thân chương trình chính.

Trả về

Để cho hàm trả về kết quả, ta chỉ cần thêm từ khóa trả và theo sau là một biểu thức.

hàm mười()
    tr 5+5
xong

hàm khôngĐúng()
    tr sai
xong

Ta có thể chỉ ghi từ khóa trả mà không cần biểu thức theo sau, nhưng bắt buộc phải đặt trước từ khóa xong hoặc dấu đóng ngoặc nhọn }. Lúc này, hàm sẽ trả về rỗng.

hàm lyRng()
    nếu sai thì
        tr     // ở đây
    thôi     
    tr rng    // ở chỗ này
    tr         // và đây đều giống nhau
xong

Sử dụng hàm

Cú pháp:

// Chỉ gọi hàm
<tênHàm>([tham_s_truyn_vào])

// Lấy kết quả trà về từ hàm
<biến> = <tênHàm>([tham_s_truyn_vào])

Ví dụ:

hàm inMười()
    in 10
xong

inMười()    // 10
hàm mườiHai()
    tr 12
xong

in mườiHai()    // 12
hàm mườiTámCng(x)
    tr 18 + x
xong

in mườiTámCng(2)   // 20

Lưu ý:

  • Nếu truyền vào số lượng tham số khác với khai báo của hàm thì chương trình sẽ báo lỗi!
  • Như đã nói ở phần Biến và kiểu dữ liệu, hàm cũng là một kiểu dữ liệu.

Một số thứ đặc biệt

Hàm đệ qui

Hàm đệ qui sẽ gọi lại chính nó, và cần có ít nhất một điều kiện để hàm thoát. Nếu không sẽ trở thành vòng lặp vô hạn và dẫn đến tràn ngăn xếp (stack overflow).

Chẳng hạn, ta có hàm tìm số thứ N trong dãy fibonacci như sau:

hàm tìmFibo(N)
    nếu N < 2 thì tr N
    tr tìmFibo(N-2) + tìmFibo(N-1)
xong

in tìmFibo(10)  // 55

Ta có thể dùng từ khóa hàm thay cho biến tìmFibo, trình biên dịch sẽ nhận biết là chính nó.

hàm tìmFibo(N)
    nếu N < 2 thì tr N
    tr hàm(N-2) + hàm(N-1)
xong

Hàm rút gọn

Đây là một kiểu khai báo dành cho hàm chỉ thực hiện một lệnh đơn.

Thay vì thân hàm đặt trong cặp {..} hoặc ..xong thì ta chỉ cần thay bằng dấu bằng = và theo sau là một biểu thức làm kết quả trả về.

hàm cng(a, b) = a + b
hàm luTha(a, mũ) = a ^ mũ

in cng(4, 5)       // 9
in luTha(2, 8)    // 256

Gọi hàm theo ngữ nghĩa (literally)

Thay vì sử dụng cặp ngoặc tròn và truyền tham số vào, có thể sử dụng từ khóa để gọi hàm.

Cú pháp như sau:

gọi <tên_hàm> [với <các_tham_số>]
đi <tên_hàm> [với <các_tham_số>]

Có hai từ khóa gọiđi, tiếp theo là tên hàm cần gọi và (nếu có) từ khóa với, theo sau là các tham số.

hàm inRaS50()
    in 50
xong

gi inRaS50
hàm muaĐồ(tin)
    in 'Tôi có ' + tin + ' đồng'
    in 'Tôi mua 2 cái bánh qui'
xong

đi muaĐồ vi 30000
hàm sếpTrLương()
    tr 1800
xong

in (gi sếpTrLương()) + ' đô'