Go - Quy tắc phạm vi: Hiểu về tính khả见 của biến

Xin chào, các bạn học lập trình! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới lập trình Go, cụ thể là tập trung vào các quy tắc phạm vi. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - tôi sẽ hướng dẫn bạn từng bước, cũng như tôi đã làm cho nhiều học sinh trong những năm dạy học của mình. Hãy cùng nhau khám phá nhé!

Go - Scope Rules

Phạm vi là gì?

Trước khi chúng ta đi vào chi tiết, hãy hiểu xem "phạm vi" có nghĩa là gì trong lập trình. Hãy tưởng tượng bạn đang ở trong một ngôi nhà có nhiều phòng. Mỗi phòng đại diện cho một phần khác nhau của chương trình của bạn. Phạm vi của một biến xác định trong哪些 phòng (phần của chương trình) bạn có thể thấy và sử dụng biến đó. Thật thú vị phải không?

Biến cục bộ: Kho báu bí mật của bạn trong phòng

Biến cục bộ là gì?

Biến cục bộ giống như những tài sản cá nhân mà bạn để trong phòng của mình. Chúng chỉ có thể truy cập được trong một hàm cụ thể hoặc khối mã nhất định.

Ví dụ 1: Biến cục bộ trong một hàm

package main

import "fmt"

func main() {
// Biến cục bộ 'message'
message := "Hello, Go!"
fmt.Println(message)
}

Trong ví dụ này, message là một biến cục bộ. Nó giống như một ghi chú bạn đã viết và giữ trong phòng của mình (hàm main). Bạn có thể đọc nó trong phòng, nhưng khi bạn ra ngoài, nó sẽ biến mất!

Ví dụ 2: Phạm vi khối

package main

import "fmt"

func main() {
if true {
// Biến cục bộ 'secretCode'
secretCode := 1234
fmt.Println("Mã bí mật là:", secretCode)
}
// Bỏ comment dòng tiếp theo sẽ gây ra lỗi
// fmt.Println(secretCode)
}

Ở đây, secretCode giống như một日记 ẩn trong một ngăn kéo trong phòng của bạn. Nó chỉ có thể truy cập được trong khối "if" cụ thể đó.

Biến toàn cục: Hệ thống intercom trong nhà

Biến toàn cục là gì?

Biến toàn cục giống như một hệ thống intercom trong ngôi nhà của bạn. Chúng có thể được truy cập từ bất kỳ phòng nào (hàm nào) trong chương trình của bạn.

Ví dụ 3: Biến toàn cục

package main

import "fmt"

// Biến toàn cục
var globalMessage = "Tôi có thể truy cập ở mọi nơi!"

func main() {
fmt.Println(globalMessage)
changeMessage()
fmt.Println(globalMessage)
}

func changeMessage() {
globalMessage = "Tôi đã bị thay đổi!"
}

Trong ví dụ này, globalMessage giống như một thông báo được phát trên hệ thống intercom trong nhà. Mỗi hàm đều có thể nghe và thậm chí thay đổi nó!

Tham số chính thức: Khách với thẻ tên

Tham số chính thức là gì?

Tham số chính thức giống như những khách bạn mời vào phòng, mỗi người đeo một thẻ tên. Họ mang giá trị từ bên ngoài nhưng được coi là biến cục bộ trong hàm.

Ví dụ 4: Tham số hàm

package main

import "fmt"

func greet(name string, age int) {
fmt.Printf("Xin chào, %s! Bạn %d tuổi.\n", name, age)
}

func main() {
greet("Alice", 25)
greet("Bob", 30)
}

Ở đây, nameage giống như những khách (tham số) đến thăm hàm greet của bạn. Họ mang thông tin từ bên ngoài nhưng chỉ được biết trong hàm.

Khởi tạo biến cục bộ và toàn cục: Setup ngôi nhà của bạn

Khởi tạo biến cục bộ

Biến cục bộ trong Go giống như những vật bạn mang vào phòng. Bạn cần phải cấp giá trị cho chúng (khởi tạo chúng) trước khi sử dụng.

func localInit() {
var x int    // Đã khai báo nhưng chưa khởi tạo
x = 10       // Khởi tạo
y := 20      // Khai báo và khởi tạo trong một dòng
fmt.Println(x, y)
}

Khởi tạo biến toàn cục

Biến toàn cục, giống như những vật dụng chung của ngôi nhà, sẽ được khởi tạo với giá trị mặc định là zero nếu bạn không chỉ định khác đi.

package main

import "fmt"

var (
globalInt    int
globalString string
globalBool   bool
)

func main() {
fmt.Println(globalInt, globalString, globalBool)
// Output: 0  false
}

Bảng tóm tắt quy tắc phạm vi

Dưới đây là bảng tiện ích tóm tắt các quy tắc phạm vi mà chúng ta đã học:

Loại biến Phạm vi Khởi tạo Ví dụ
Biến cục bộ Hàm hoặc khối Phải khởi tạo trước khi sử dụng x := 10
Biến toàn cục Toàn bộ gói Tự động khởi tạo với giá trị zero var globalX int
Tham số chính thức Hàm Khởi tạo khi hàm được gọi func (x int)

Kết luận: Ngôi nhà lập trình của bạn

Hiểu về phạm vi trong Go giống như biết bố cục của ngôi nhà lập trình của bạn. Biến cục bộ là tài sản cá nhân của bạn, biến toàn cục là hệ thống intercom trong nhà, và tham số là những khách bạn mời vào. Bằng cách làm chủ những khái niệm này, bạn đã trên đường trở thành một nhà lập trình Go thành thạo!

Nhớ rằng, thực hành là cách tốt nhất để hoàn thiện. Hãy thử viết những chương trình nhỏ để khám phá các khái niệm này. Đừng sợ mắc lỗi - chúng là những bước đi để đến với thành thạo. Chúc các bạn may mắn, những chuyên gia Go tương lai!

Credits: Image by storyset