0Pricing
Zig Academy · บทเรียน

การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง

แยกวิเคราะห์ argv ด้วยตัวจัดสรรหน่วยความจำ

การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดอาร์กิวเมนต์จึงสำคัญ

เครื่องมือ CLI ที่ใช้งานจริงจะตอบสนองต่อสิ่งที่ผู้ใช้พิมพ์หลังชื่อโปรแกรม คำเหล่านั้นคืออาร์กิวเมนต์บรรทัดคำสั่ง และการอ่านคำเหล่านั้นคือขั้นตอนแรก 🛠️

Zig ไม่ซ่อนสิ่งใดให้คุณ

ภาษาอื่นอาจมอบตัวแปร argv แบบมหัศจรรย์ให้คุณ แต่ Zig ยังคงระบุอย่างชัดเจน คุณต้องขออาร์กิวเมนต์ด้วยตนเองจากเนมสเปซ std.process

const std = @import("std");

อาร์กิวเมนต์ต้องใช้ตัวจัดสรร

การถอดรหัสอาร์กิวเมนต์อาจต้องจัดสรรหน่วยความจำ ดังนั้น Zig จึงขอให้คุณระบุตัวจัดสรรตั้งแต่ต้น ไม่มีการจัดสรรใดเกิดขึ้นเบื้องหลังโดยที่คุณไม่ทราบ

var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const a = gpa.allocator();

argsAlloc มอบสไลซ์ให้

เรียก std.process.argsAlloc พร้อมตัวจัดสรรของคุณ ฟังก์ชันนี้คืนสไลซ์ของสตริง โดยมีหนึ่งสตริงต่อหนึ่งอาร์กิวเมนต์ และคุณเป็นเจ้าของทั้งหมด

const args = try std.process.argsAlloc(a);

คืนสิ่งที่คุณจัดสรร

เนื่องจากคุณเป็นเจ้าของสไลซ์นั้น คุณจึงต้องคืนหน่วยความจำด้วย argsFree การใช้ defer ทันทีหลังการเรียกจะทำให้การล้างข้อมูลเกิดขึ้นโดยอัตโนมัติ

defer std.process.argsFree(a, args);

อาร์กิวเมนต์แรกคือโปรแกรม

ตามธรรมเนียมแล้ว args[0] คือพาธไปยังโปรแกรมของคุณเอง ไม่ใช่ข้อมูลป้อนเข้าจากผู้ใช้ ค่าจริงที่คุณสนใจจะเริ่มที่ดัชนี 1

const program = args[0];

นับจำนวนที่ได้รับ

สไลซ์เก็บความยาวของตัวเองไว้ ดังนั้น args.len จะบอกว่ามีอาร์กิวเมนต์เข้ามากี่รายการ คุณควรตรวจสอบค่านี้ก่อนเข้าถึงดัชนีใด ๆ

if (args.len < 2) return error.MissingArgument;

วนซ้ำผ่านข้อมูลป้อนเข้า

วนซ้ำค่าของผู้ใช้โดยตัดส่วนชื่อโปรแกรมออก ลูป for ที่ทำงานกับ args[1..] จะเข้าถึงอาร์กิวเมนต์แต่ละรายการตามลำดับ

for (args[1..]) |arg| {
    std.debug.print("{s}\n", .{arg});
}

อาร์กิวเมนต์แต่ละรายการคือไบต์

อาร์กิวเมนต์ทุกตัวเป็น []const u8 ซึ่งเป็นสไลซ์ของไบต์ จากจุดนี้ การเปรียบเทียบหรือแยกวิเคราะห์อาร์กิวเมนต์ก็เป็นเพียงการจัดการสตริงตามปกติใน Zig

if (std.mem.eql(u8, arg, "--help")) {}

เปลี่ยนข้อความเป็นตัวเลข

อาร์กิวเมนต์จะเข้ามาในรูปข้อความ หากต้องการตัวเลข ให้แยกวิเคราะห์ด้วย std.fmt.parseInt ซึ่งจะแจ้งข้อผิดพลาดอย่างชัดเจนหากข้อความไม่ใช่จำนวนเต็มที่ถูกต้อง

const n = try std.fmt.parseInt(i32, args[1], 10);

ทางเลือกแบบตัววนซ้ำ

ต้องการประมวลผลแบบสตรีมใช่ไหม std.process.argsWithAllocator จะมอบตัววนซ้ำที่คุณเลื่อนไปข้างหน้าด้วย next() เหมาะสำหรับการประมวลผลอาร์กิวเมนต์ทีละรายการ

var it = try std.process.argsWithAllocator(a);
defer it.deinit();

ตรวจสอบอย่างรวดเร็ว

ลองนึกดูว่าสิ่งใดอยู่ด้านหน้าของสไลซ์อาร์กิวเมนต์

สรุป

คุณอ่านอาร์กิวเมนต์ด้วย argsAlloc คืนหน่วยความจำด้วย argsFree ข้าม args[0] และแยกวิเคราะห์ข้อความเป็นค่า ตอนนี้ CLI ของคุณรับฟังผู้ใช้ได้แล้ว 🎯

คำถามที่พบบ่อย

บทเรียน “การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง”

แยกวิเคราะห์ argv ด้วยตัวจัดสรรหน่วยความจำ คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม

ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง
  2. การอ่านไฟล์และ stdin
  3. การเขียนเอาต์พุตและรหัสจบการทำงาน
  4. จัดแพ็กเกจและเผยแพร่ไบนารี
← กลับไปที่ Zig Academy