0Pricing
Learn Rust Coding · บทเรียน

พื้นฐาน clap

การแยกวิเคราะห์อาร์กิวเมนต์

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

เหตุใดจึงต้องใช้ clap

clap (ตัวแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่ง) เป็นไลบรารีมาตรฐานโดยพฤตินัยสำหรับสร้าง CLI ใน Rust

  • แยกวิเคราะห์อาร์กิวเมนต์ แฟล็ก และตัวเลือก
  • สร้าง --help และ --version โดยอัตโนมัติ
  • ตรวจสอบอินพุตและรายงานข้อผิดพลาดที่เข้าใจง่าย

หากไม่มีไลบรารีนี้ คุณต้องวนซ้ำด้วยตนเองผ่าน std::env::args() และจัดการกรณีขอบทั้งหมดเอง

อ่าน args ด้วยตนเอง

ก่อนเลือกใช้ clap การได้เห็นแนวทางดิบจะช่วยให้เข้าใจ std::env::args() ให้ตัววนซ้ำที่รายการแรกคือชื่อโปรแกรม

fn main() {
    let args: Vec<String> = std::env::args().collect();
    println!("Program: {}", args[0]);
    println!("Got {} extra arg(s)", args.len() - 1);
}

เพิ่ม clap ลงใน Cargo.toml

หากต้องการใช้ clap ให้ประกาศเป็นสิ่งที่ต้องพึ่งพา ฟีเจอร์ derive จะเปิดใช้ API ที่อาศัยมาโคร

  • cargo add clap --features derive

ขั้นตอนนี้ทำงานในเทอร์มินัลและแก้ไขไฟล์โครงการของคุณ จึงไม่ใช่สิ่งที่เราจะเรียกใช้ที่นี่

[dependencies]
clap = { version = "4", features = ["derive"] }

API แบบตัวสร้าง

clap มีสองรูปแบบ API แบบตัวสร้าง จะสร้าง Command ขณะทำงานด้วยการเรียกเมธอดต่อกัน

use clap::{Command, Arg};

fn main() {
    let cmd = Command::new("greet")
        .arg(Arg::new("name"));
    let matches = cmd.get_matches();
    // access values from matches
}

อาร์กิวเมนต์ตามตำแหน่ง

อาร์กิวเมนต์ตามตำแหน่งระบุด้วยลำดับ ไม่ใช่แฟล็ก ในที่นี้ name จะถูกอ่านโดยตรงจากบรรทัดคำสั่ง

  • greet Alice กำหนด name เป็น Alice
use clap::{Command, Arg};

fn main() {
    let m = Command::new("greet")
        .arg(Arg::new("name").required(true))
        .get_matches();
    let name = m.get_one::<String>("name").unwrap();
    println!("Hello, {}!", name);
}

แฟล็กที่ไม่บังคับ

แฟล็กคือตัวสลับค่าบูลีน ใช้ ArgAction::SetTrue เพื่อให้การมีแฟล็กพลิกค่า bool

  • --loud เปิดแฟล็ก
use clap::{Command, Arg, ArgAction};

fn main() {
    let m = Command::new("greet")
        .arg(Arg::new("loud").long("loud").action(ArgAction::SetTrue))
        .get_matches();
    let loud = m.get_flag("loud");
    println!("loud = {}", loud);
}

ตัวเลือกที่มีค่า

ตัวเลือกรับค่า เช่น --count 3 กำหนดชื่อแบบ short และ long เพื่อให้ใช้งานสะดวก

use clap::{Command, Arg};

fn main() {
    let m = Command::new("greet")
        .arg(Arg::new("count").short('c').long("count"))
        .get_matches();
    if let Some(c) = m.get_one::<String>("count") {
        println!("count = {}", c);
    }
}

ค่าเริ่มต้น

กำหนดค่าทดแทนให้กับอาร์กิวเมนต์ด้วย default_value เพื่อให้ผู้ใช้ละเว้นอาร์กิวเมนต์นั้นได้

  • หากไม่มี --count ค่าจะกลายเป็น 1
use clap::{Command, Arg};

fn main() {
    let m = Command::new("greet")
        .arg(Arg::new("count").long("count").default_value("1"))
        .get_matches();
    let count = m.get_one::<String>("count").unwrap();
    println!("count = {}", count);
}

จำลองผลลัพธ์

แม้จะไม่ได้ติดตั้ง clap เราก็จำลองลักษณะของค่าที่แยกวิเคราะห์แล้วได้ ตัวอย่างนี้ใช้ Rust แบบธรรมดาแทน เพื่อแสดงตรรกะที่ clap จัดการให้เรา

fn main() {
    let name = "Alice";
    let count: u32 = 3;
    for _ in 0..count {
        println!("Hello, {}!", name);
    }
}

ความช่วยเหลือที่สร้างโดยอัตโนมัติ

clap สร้าง --help ให้โดยไม่คิดค่าใช้จ่ายจากข้อมูลเมตาของอาร์กิวเมนต์ เพิ่มสตริง about และ help เพื่อให้มีประโยชน์มากขึ้น

use clap::{Command, Arg};

fn main() {
    Command::new("greet")
        .about("Greets a person")
        .arg(Arg::new("name").help("Who to greet"))
        .get_matches();
}

แฟล็กเวอร์ชัน

กำหนดเวอร์ชันเพียงครั้งเดียว แล้ว clap จะเชื่อมการทำงานของ --version ให้ มาโคร crate_version! จะดึงค่าจาก Cargo.toml

use clap::Command;

fn main() {
    Command::new("greet")
        .version("1.0.0")
        .get_matches();
}

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

ทดสอบความเข้าใจพื้นฐานของ clap

สรุปทบทวน

คุณได้เรียนรู้พื้นฐานของ clap:

  • เพิ่มไลบรารีด้วยฟีเจอร์ derive
  • API แบบตัวสร้างใช้ Command และ Arg
  • อาร์กิวเมนต์ตามตำแหน่งใช้ลำดับ แฟล็กใช้ SetTrue และตัวเลือกรับค่า
  • default_value กำหนดค่าทดแทน
  • --help และ --version ถูกสร้างโดยอัตโนมัติ

ถัดไป คุณจะจัดโครงสร้าง CLI ขนาดใหญ่ขึ้นด้วยคำสั่งย่อย

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

บทเรียน “พื้นฐาน clap” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน clap”

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

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

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

บทเรียน “พื้นฐาน clap” ใช้เวลานานแค่ไหน

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

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

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

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

  1. พื้นฐาน clap
  2. คำสั่งย่อย
  3. API สำหรับ derive
  4. การตรวจสอบและวิธีใช้
← กลับไปที่ Learn Rust Coding