Zig là một ngôn ngữ lập trình hiện đại, đa năng, được thiết kế để trở nên vững chắc, tối ưu và dễ bảo trì. Với trọng tâm là sự đơn giản và rõ ràng, Zig cung cấp sự kiểm soát cấp thấp đồng thời tránh dòng chảy điều khiển ẩn và phân bổ. Hướng dẫn này sẽ hướng dẫn bạn qua quy trình cài đặt, tạo chương trình Zig đầu tiên của bạn và chạy thử nghiệm. Đến cuối, bạn sẽ có nền tảng vững chắc để khám phá ngôn ngữ mạnh mẽ này hơn nữa.
Khi chúng ta đang khám phá các công cụ lập trình mạnh mẽ, đáng nói đến là Apidog - lựa chọn tối ưu cho Postman trong việc phát triển và kiểm tra API. Apidog kết hợp tài liệu API, thiết kế, mô phỏng, kiểm tra và gỡ lỗi thành một nền tảng liền mạch.

Với giao diện trực quan, các tính năng hợp tác và tích hợp kiểm soát phiên bản liền mạch, Apidog cải thiện đáng kể hiệu suất công việc cho các nhà phát triển làm việc với API. Bộ tính năng toàn diện của nó bao gồm kiểm tra tự động, quản lý môi trường, xếp chồng yêu cầu và xác nhận phản hồi thông minh, khiến nó trở thành một công cụ thiết yếu cho các nhóm phát triển hiện đại.

Trước khi bắt đầu lập trình với Zig, hãy cân nhắc thêm Apidog vào bộ công cụ lập trình của bạn để nâng cao năng suất tổng thể khi làm việc với API và dịch vụ web.
Phần 1: Cài đặt Zig
Trước khi bạn có thể bắt đầu lập trình trong Zig, bạn cần cài đặt trình biên dịch và các công cụ. Quy trình cài đặt khác nhau tùy thuộc vào hệ điều hành của bạn.
Cài đặt trên Linux
Bạn có hai tùy chọn chính để cài đặt Zig trên Linux:
Tùy chọn 1: Sử dụng trình quản lý gói của bản phân phối của bạn
Hầu hết các bản phân phối Linux lớn đều đóng gói phiên bản Zig mới nhất. Đây thường là cách tiếp cận dễ nhất:
# Đối với Debian/Ubuntu
sudo apt install zig
# Đối với Fedora
sudo dnf install zig
# Đối với Arch Linux
sudo pacman -S zig
Tùy chọn 2: Cài đặt thủ công
Nếu bản phân phối của bạn không có Zig hoặc bạn cần một phiên bản cụ thể:
Tải xuống một phiên bản đã được xây dựng trước của Zig từ trang web chính thức phù hợp với kiến trúc CPU của bạn
Để kiểm tra kiến trúc của bạn, hãy sử dụng:
uname -m
Giải nén tệp nén bằng tar:
tar xf zig-linux-x86_64-0.13.0.tar.xz
Thêm tệp nhị phân Zig vào PATH của bạn:
echo 'export PATH="$HOME/zig-linux-x86_64-0.13.0:$PATH"' >> ~/.bashrc
Áp dụng các thay đổi:
source ~/.bashrc
Cài đặt trên Windows
Người dùng Windows có một số tùy chọn:
Tùy chọn 1: Sử dụng trình quản lý gói
# Sử dụng Chocolatey
choco install zig
# Sử dụng Winget
winget install zig.zig
# Sử dụng Scoop
scoop install zig
Tùy chọn 2: Cài đặt thủ công
Tải xuống một phiên bản đã được xây dựng trước của Zig cho Windows phù hợp với kiến trúc CPU của bạn (hầu hết các hệ thống Windows sử dụng x86_64/AMD64)
Kiểm tra kiến trúc của bạn bằng:
$Env:PROCESSOR_ARCHITECTURE
Giải nén tệp ZIP
Thêm Zig vào PATH của bạn:
Đối với Người dùng Hiện tại:
[Environment]::SetEnvironmentVariable(
"Path",
[Environment]::GetEnvironmentVariable("Path", "User") + ";C:\\\\path\\\\to\\\\zig-windows-x86_64",
"User"
)
Đối với Hệ thống Toàn cầu:
[Environment]::SetEnvironmentVariable(
"Path",
[Environment]::GetEnvironmentVariable("Path", "Machine") + ";C:\\\\path\\\\to\\\\zig-windows-x86_64",
"Machine"
)
Đóng và mở lại terminal của bạn
Cài đặt trên macOS
Cách đơn giản nhất để cài đặt Zig trên macOS là sử dụng Homebrew:
brew install zig
Xác minh Cài đặt của Bạn
Sau khi cài đặt, xác minh rằng Zig đã được cài đặt đúng cách bằng cách chạy:
zig version
Bạn sẽ thấy đầu ra như:
0.13.0
Phần 2: Xin chào, Thế giới! trong Zig
Giờ đây, Zig đã được cài đặt, hãy cùng tạo chương trình Zig đầu tiên của bạn: ví dụ truyền thống "Xin chào, Thế giới!".
Tạo Tệp Chương Trình
- Tạo một tệp mới có tên
main.zig
- Mở nó bằng trình soạn thảo văn bản mà bạn ưa thích
- Thêm mã sau:
const std = @import("std");
pub fn main() void {
std.debug.print("Xin chào, {s}!\\\\n", .{"Thế giới"});
}
Hãy cùng phân tích mã này:
const std = @import("std");
nhập thư viện chuẩn của Zigpub fn main() void {
khai báo hàm chính đóng vai trò là điểm khởi đầu cho chương trình của bạnstd.debug.print("Xin chào, {s}!\\\\n", .{"Thế giới"});
in "Xin chào, Thế giới!" ra luồng lỗi chuẩn (stderr)- Tham số
{s}
là một chỉ thị định dạng cho chuỗi, và.{"Thế giới"}
là cách Zig truyền tham số đến các chỉ thị định dạng
Chạy Chương Trình
Để xây dựng và chạy chương trình của bạn, hãy sử dụng lệnh sau:
zig run main.zig
Điều này biên dịch mã của bạn và thực thi ngay lập tức. Bạn sẽ thấy đầu ra:
Xin chào, Thế giới!
Lưu Ý Quan Trọng về Mã Hóa Tệp
Zig yêu cầu mã hóa UTF-8 cho các tệp nguồn. Nếu bạn gặp lỗi như bytes không hợp lệ
, tệp của bạn có thể có mã hóa khác. Để khắc phục điều này:
zig fmt main.zig
Điều này sẽ mã hóa lại tệp của bạn thành UTF-8. Sau đó, mở lại tệp trong trình soạn thảo của bạn.
Phần 3: Chạy Kiểm Tra trong Zig
Zig có một khung thử nghiệm tích hợp giúp việc viết và chạy kiểm tra trở nên dễ dàng. Hiểu cách sử dụng kiểm tra là điều cần thiết khi bạn học Zig, đặc biệt là vì nhiều ví dụ trong tài liệu Zig được cung cấp dưới dạng thử nghiệm.
Tạo Một Bài Kiểm Tra Đơn Giản Thành Công
Hãy tạo một tệp kiểm tra cơ bản:
- Tạo một tệp mới có tên
test_pass.zig
- Thêm mã sau:
const std = @import("std");
const expect = std.testing.expect;
test "luôn thành công" {
try expect(true);
}
Mã này nhập mô-đun kiểm tra, sau đó định nghĩa một bài kiểm tra có tên "luôn thành công" mà mong đợi true
là đúng (mà nó luôn như vậy).
Để chạy bài kiểm tra này:
zig test test_pass.zig
Bạn sẽ thấy đầu ra tương tự như:
Tất cả 1 bài kiểm tra đều thành công.
Tạo Một Bài Kiểm Tra Thất Bại
Giờ đây, hãy tạo một bài kiểm tra thất bại để hiểu cách Zig xử lý các lỗi kiểm tra:
- Tạo một tệp có tên
test_fail.zig
- Thêm mã sau:
const std = @import("std");
const expect = std.testing.expect;
test "luôn thất bại" {
try expect(false);
}
Bài kiểm tra này mong đợi false
là đúng, điều này hiển nhiên sẽ thất bại.
Khi bạn chạy:
zig test test_fail.zig
Bạn sẽ thấy thông báo lỗi như:
Bài kiểm tra [1/1] test.luôn thất bại... THẤT BẠI (TestUnexpectedResult)
/usr/lib/zig/std/testing.zig:515:14: 0x2241ef trong expect (kiểm tra)
if (!ok) return error.TestUnexpectedResult;
^
[...]/test_fail:5:5: 0x224305 trong test.luôn thất bại (kiểm tra)
try expect(false);
^
0 đã qua; 0 đã bỏ qua; 1 thất bại.
Hiểu Biện Pháp Xử Lý Lỗi trong Các Bài Kiểm Tra
Từ khóa try
là rất quan trọng trong các bài kiểm tra Zig. Nó cố gắng thực thi một hàm có thể trả về một lỗi. Nếu một lỗi được trả về, nó sẽ truyền đạt lỗi đó cho người gọi.
Hãy thử chạy cùng một bài kiểm tra mà không có từ khóa try
:
test "sẽ không biên dịch đúng" {
expect(false);
}
Bạn sẽ gặp lỗi biên dịch vì bạn không xử lý lỗi tiềm năng mà expect()
có thể trả về.
Phần 4: Các Kiến Thức Cơ Bản về Zig cho Người Mới Bắt Đầu
Biến và Hằng Số
Trong Zig, bạn định nghĩa biến và hằng số như sau:
const std = @import("std");
pub fn main() void {
// Hằng số (không thể thay đổi)
const fixed_value = 42;
// Biến (có thể thay đổi)
var changeable_value = 10;
changeable_value = 20; // Điều này được phép
// Bạn có thể chỉ định kiểu rõ ràng
const explicit_integer: i32 = 1234;
var explicit_float: f64 = 3.14159;
std.debug.print("Cố định: {d}, Có thể thay đổi: {d}\\\\n",
.{fixed_value, changeable_value});
}
Các Kiểu Dữ Liệu Cơ Bản
Zig có một số kiểu dữ liệu tích hợp:
const std = @import("std");
pub fn main() void {
// Số nguyên
const i: i32 = -42; // Số nguyên có dấu 32-bit
const u: u32 = 42; // Số nguyên không dấu 32-bit
// Số thực
const f: f32 = 3.14; // Số thực 32-bit
const d: f64 = 2.71828; // Số thực 64-bit
// Boolean
const b: bool = true;
// Ký tự và chuỗi
const c: u8 = 'A'; // Ký tự (như số nguyên)
const s: []const u8 = "Xin chào, Zig!"; // Chuỗi (một lát cắt của u8)
// Mảng với kích thước cố định được biết trước tại thời điểm biên dịch
const arr = [5]u8{1, 2, 3, 4, 5};
std.debug.print("Số nguyên: {d}, Số thực: {d}\\\\n", .{i, f});
std.debug.print("Chuỗi: {s}\\\\n", .{s});
}
Hàm
Các hàm trong Zig được định nghĩa bằng từ khóa fn
:
const std = @import("std");
// Hàm cơ bản với tham số và giá trị trả về
fn add(a: i32, b: i32) i32 {
return a + b;
}
// Hàm có thể trả về một lỗi
fn divide(a: f32, b: f32) !f32 {
if (b == 0) {
return error.DivisionByZero;
}
return a / b;
}
pub fn main() void {
// Gọi một hàm đơn giản
const sum = add(5, 3);
std.debug.print("5 + 3 = {d}\\\\n", .{sum});
// Gọi một hàm có thể trả về một lỗi
if (divide(10, 2)) |result| {
std.debug.print("10 / 2 = {d}\\\\n", .{result});
} else |err| {
std.debug.print("Lỗi: {}\\\\n", .{err});
}
// Một cách khác để xử lý lỗi
const division_result = divide(10, 0) catch |err| {
std.debug.print("Chia đã thất bại: {}\\\\n", .{err});
0; // Giá trị mặc định trong trường hợp có lỗi
};
std.debug.print("Kết quả (hoặc mặc định): {d}\\\\n", .{division_result});
}
Kết Luận
Hướng dẫn này đã trình bày những điều thiết yếu để bắt đầu với Zig - cài đặt trên các hệ điều hành khác nhau, tạo và chạy chương trình đầu tiên của bạn, và làm việc với khung thử nghiệm của Zig. Chúng tôi cũng đã giới thiệu một số khái niệm cơ bản như biến, kiểu dữ liệu và hàm.
Zig là một ngôn ngữ mạnh mẽ cung cấp sự kiểm soát cấp thấp trong khi nhấn mạnh sự an toàn, rõ ràng và khả năng bảo trì. Cách tiếp cận của nó đối với xử lý lỗi và quản lý bộ nhớ khiến nó trở thành một lựa chọn thú vị thay thế cho các ngôn ngữ như C, C++ và Rust.
Để tiếp tục hành trình Zig của bạn, hãy cân nhắc:
- Khám phá tài liệu chính thức của Zig
- Tham gia cộng đồng Zig trên Discord hoặc diễn đàn Ziggit
- Cài đặt Máy chủ Ngôn ngữ Zig để có tích hợp IDE tốt hơn
- Thử xây dựng các dự án nhỏ để có kinh nghiệm thực hành
Hãy nhớ rằng Zig vẫn đang phát triển, vì vậy một số tính năng có thể thay đổi khi ngôn ngữ này trưởng thành đến phiên bản 1.0. Chúc bạn mã hóa vui vẻ!