[Golang][Bài 4] Khai báo hàm – Function declaration (lập trình Golang cơ bản)

Nội dung

Bài trước mình đã tìm hiểu về Câu lệnh điều khiển, điều kiện & vòng lặp trong Golang và cách thức triển khai như thế nào trong lập trình Golang rồi.

Để tiếp tục với series học lập trình Golang, trong bài viết này mình sẽ giới thiệu về khai báo hàm hay còn có thể gọi lại function declaration.

Hàm là gì? Khai báo hàm trong lập trình Golang
Hàm là gì? Khai báo hàm trong lập trình Golang

Vậy hàm là gì trong lập trình Golang?

Đây là kiến thức nền tảng trong lập trình bất kỳ ngôn ngữ khác như C, C++, CSharp, PHP,… Trong Golang, hàm (function) cũng là một khối mã, tương tự như trong các ngôn ngữ lập trình khác, nhưng có cú pháp khác biệt. Hàm trong Golang có thể nhận đầu vào (tham số) và trả về một giá trị.

Go
func funcName(params ParamTypeValue, ...) returnType{
    // code của hàm
    return returnType
}

Trong đó:

  1. func là từ khóa để bắt đầu khai báo một hàm.
  2. funcName là tên của hàm, được đặt theo quy tắc đặt tên biến.
  3. params, … là các tham số được truyền vào hàm, mỗi tham số được chỉ định với một kiểu dữ liệu cụ thể.
  4. returnTypelà kiểu dữ liệu của giá trị được trả về bởi hàm.
  5. Phần thân của hàm được bao quanh bởi cặp dấu ngoặc nhọn {}.
  6. return được sử dụng để trả về giá trị của hàm.

Khai báo hàm trong Golang

Để khai báo một hàm trong Golang, sử dụng từ khóa "func" và sau đó là tên của hàm, danh sách các tham số (nếu có) và kiểu dữ liệu trả về (nếu có). Sau đó, sử dụng dấu ngoặc nhọn "{}" để bao quanh thân của hàm.

Go
func add(a int, b int) int {
    return a + b
}

Trong Golang, các hàm có thể được phân loại vào các loại khác nhau dựa trên cách chúng được sử dụng và chức năng của chúng. Dưới đây là các loại hàm phổ biến trong Golang:

1. Hàm không có giá trị trả về (void function)

Đây là các hàm không trả về bất kỳ giá trị nào và được sử dụng để thực hiện một tác vụ nào đó.

Go
func printMsg(msg string) {
    fmt.Println(msg)
}

2. Hàm có giá trị trả về

Những hàm này trả về một giá trị nhất định sau khi thực hiện tác vụ được xác định bên trong chúng

Go
func add(a int, b int) int {
    return a + b
}

func sayHello() string {
    return fmt.Sprintf("Hello World")
}

3. Hàm đệ quy

Đây là hàm tự sướng, tức là gọi lại chính nó trong quá trình thực thi chương trình.

Go
func factory(n int) int {
    if n == 0 {
        return 1
    }
    return n * factory(n-1)
}

4. Hàm vô danh

Các hàm này không có tên và được sử dụng để truyền vào các biến hàm (function variable) hoặc truyền vào các tham số của hàm khác.

Go
func main() {
    func(msg string) {
        fmt.Println(msg)
    }("Hello World")
}

5. Hàm phương thức (method)

Các hàm phương thức được gắn kết với các kiểu dữ liệu nhất định và được sử dụng để thực hiện các tác vụ liên quan đến kiểu dữ liệu đó.

Go
type Circle struct {
    radius float64
}

func (c Circle) area() float64 {
    return math.Pi * c.radius * c.radius
}

Khai báo hàm trả về nhiều giá trị (Multiple return values)

Đối với Golang, hàm có thể trả về nhiều giá trị (multiple return values) thay vì chỉ một giá trị như các ngôn ngữ lập trình khác. Điều này cho phép lập trình viên trả về nhiều giá trị từ hàm một cách tiện lợi và hiệu quả hơn!

Với ví dụ dưới đây, mình sẽ demo một hàm tính toán giá trị lớn nhất và nhỏ nhất của một slice:

Go
func minMax(slice []int) (int, int) {
    if len(slice) == 0 {
        return 0, 0
    }
    min := slice[0]
    max := slice[0]
    for _, value := range slice {
        if value < min {
            min = value
        }
        if value > max {
            max = value
        }
    }
    return min, max
}

Trong ví dụ trên, hàm minMax trả về hai giá trị nguyên là giá trị nhỏ nhất và lớn nhất của slice được truyền vào. Để trả về nhiều giá trị, ta sử dụng cú pháp (int, int) đại diện cho hai giá trị trả về của hàm. Trong trường hợp slice truyền vào rỗng, hàm sẽ trả về hai giá trị bằng 0.

Khi gọi hàm có nhiều giá trị trả về, ta cần phải sử dụng các biến để lưu trữ các giá trị này

Go
slice := []int{3, 6, 2, 1, 8, 4}
min, max := minMax(slice)
fmt.Printf("Min: %d, Max: %d", min, max)

Trong đoạn mã trên, chúng ta gọi hàm minMax và lưu trữ giá trị nhỏ nhất và lớn nhất vào các biến minmax để sử dụng sau này.

Lưu ý:

Multiple return values sẽ được vận dụng rất nhiều trong quá trình bạn làm việc với Golang

Kết bài

Trong bài viết này, chúng ta đã tìm hiểu cách khai báo hàm trong Golang và cách sử dụng chúng như thế nào. Cảm ơn các bạn đã dành thời gian nghiêng cứu bài viết này. Mọi thắc mắc và gợi ý gì cho mình vui lòng comment phía dưới bài viết, mình sẽ giải đáp cho các bạn! Ngoài ra các bạn có thể truy cập vào tài liệu của Golang để cập nhật thêm thông tin nhé! Thân ái!

https://go.dev/doc/

Bài viết liên quan

SQL trong Data Analysis: Procedure và Function – 2 công cụ không thể thiếu

Xin chào các bạn đã quay trở lại chuỗi bài SQL trong Data Analysis...

Tự học Data Analyst: Tổng hợp chuỗi bài SQL 101 trong Data Analysis

Trong bài viết này, chúng ta sẽ tổng hợp các bài viết thành một...

SQL trong Data Analysis: Hiểu rõ và ứng dụng đệ quy (Recursive trong PostgreSQL)

Trong thế giới của cơ sở dữ liệu quan hệ, các truy vấn đệ...

[Phân Tích Dữ Liệu Với Python] Tập 1: Làm Quen Với Pandas

Trong thời đại tiến bộ của khoa học dữ liệu, khả năng phân tích...
spot_img