Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ภาคผนวก D: เครื่องมือพัฒนาที่เป็นประโยชน์ (Useful Development Tools)

ในภาคผนวกนี้ เราจะพูดถึงเครื่องมือการพัฒนาที่เป็นประโยชน์ซึ่งโครงการ Rust มีเตรียมไว้ให้ เราจะมาทำความรู้จักกับการจัดรูปแบบโค้ดโดยอัตโนมัติ, วิธีจัดการแก้ไขตามคำเตือนอย่างรวดเร็ว, เครื่องมือตรวจสอบรูปแบบโค้ด (linter) และการเชื่อมต่อทำงานร่วมกับ IDE ต่างๆ

การจัดรูปแบบโค้ดโดยอัตโนมัติด้วย rustfmt

เครื่องมือ rustfmt ทำหน้าที่จัดรูปแบบโครงสร้างโค้ดของคุณใหม่ตามรูปแบบการเขียนโค้ดมาตรฐานของชุมชน โครงการที่ร่วมกันพัฒนาหลายโครงการเลือกใช้งาน rustfmt เพื่อขจัดข้อโต้แย้งเกี่ยวกับการเลือกใช้รูปแบบโค้ดเมื่อเขียนภาษา Rust: โดยกำหนดให้ทุกคนจัดรูปแบบโค้ดของตนด้วยเครื่องมือตัวนี้

การติดตั้ง Rust จะรวม rustfmt มาให้เป็นค่าเริ่มต้น ดังนั้นคุณจึงควรมีโปรแกรม rustfmt และ cargo-fmt ติดตั้งอยู่บนระบบของคุณแล้ว คำสั่งทั้งสองนี้เปรียบได้กับ rustc และ cargo โดยที่ rustfmt ช่วยให้ควบคุมรายละเอียดได้เจาะลึกขึ้น ขณะที่ cargo-fmt จะเข้าใจข้อกำหนดเฉพาะของโครงการที่ใช้งาน Cargo หากต้องการจัดรูปแบบโครงการ Cargo ใดๆ ให้ป้อนคำสั่งดังต่อไปนี้:

$ cargo fmt

การรันคำสั่งนี้จะจัดรูปแบบโค้ด Rust ทั้งหมดในเครตปัจจุบันใหม่ ซึ่งจะมีผลต่อการเปลี่ยนรูปแบบการเขียนโค้ดเท่านั้น โดยไม่มีการแก้ไขการทำงาน (semantics) ของโค้ดแต่อย่างใด ศึกษาข้อมูลเพิ่มเติมเกี่ยวกับ rustfmt ได้ที่ เอกสารประกอบการใช้งาน

แก้ไขโค้ดของคุณด้วย rustfix

เครื่องมือ rustfix รวมอยู่ในการติดตั้ง Rust และสามารถแก้ไขคำเตือนของคอมไพเลอร์ได้โดยอัตโนมัติ ในกรณีที่มีแนวทางแก้ไขปัญหาที่ชัดเจนและมักเป็นสิ่งที่คุณต้องการแก้ไขอยู่แล้ว คุณอาจเคยเห็นคำเตือนของคอมไพเลอร์มาก่อนแล้ว ตัวอย่างเช่น พิจารณาโค้ดต่อไปนี้:

ชื่อไฟล์: src/main.rs

fn main() {
    let mut x = 42;
    println!("{x}");
}

ในจุดนี้ เรากำลังนิยามตัวแปร x เป็นแบบที่สามารถแก้ไขค่าได้ (mut) แต่เราไม่เคยทำการเปลี่ยนแปลงค่าของมันเลย Rust จึงแจ้งเตือนเราเกี่ยวกับเรื่องนี้:

$ cargo build
   Compiling myprogram v0.1.0 (file:///projects/myprogram)
warning: variable does not need to be mutable
 --> src/main.rs:2:9
  |
2 |     let mut x = 0;
  |         ----^
  |         |
  |         help: remove this `mut`
  |
  = note: `#[warn(unused_mut)]` on by default

คำเตือนแนะนำให้เรานำคีย์เวิร์ด mut ออกไป เราสามารถนำคำแนะนำนั้นมาใช้แก้ไขโค้ดได้โดยอัตโนมัติผ่านการใช้เครื่องมือ rustfix ด้วยการรันคำสั่ง cargo fix:

$ cargo fix
    Checking myprogram v0.1.0 (file:///projects/myprogram)
      Fixing src/main.rs (1 fix)
    Finished dev [unoptimized + debuginfo] target(s) in 0.59s

เมื่อเรากลับไปดูที่ไฟล์ src/main.rs อีกครั้ง เราจะพบว่า cargo fix ได้เข้ามาแก้ไขโค้ดให้เรียบร้อยแล้ว:

ชื่อไฟล์: src/main.rs

fn main() {
    let x = 42;
    println!("{x}");
}

ตอนนี้ตัวแปร x ไม่สามารถแก้ไขค่าได้แล้ว (immutable) และคำเตือนก็จะไม่แสดงขึ้นมาอีก

นอกจากนี้ คุณยังสามารถใช้คำสั่ง cargo fix เพื่อเปลี่ยนผ่านโค้ดของคุณไปมาระหว่าง Rust รุ่น (editions) ต่างๆ ได้อีกด้วย โดยข้อมูลของรุ่นต่างๆ จะครอบคลุมอยู่ใน ภาคผนวก E

ตรวจสอบรูปแบบโค้ดเพิ่มเติมด้วย Clippy

เครื่องมือ Clippy คือชุดรวบรวมการวิเคราะห์สไตล์การเขียนโค้ด (lints) เพื่อช่วยวิเคราะห์โปรแกรมของคุณ เพื่อป้องกันและตรวจหาข้อผิดพลาดที่มักเกิดขึ้นได้บ่อย ตลอดจนช่วยปรับปรุงพัฒนาโค้ดภาษา Rust ของคุณ Clippy จะมีมาให้พร้อมกับการติดตั้ง Rust ตามมาตรฐานทั่วไปอยู่แล้ว

หากต้องการรันการตรวจโค้ดของ Clippy ในโครงการ Cargo ใดๆ ให้ป้อนคำสั่งดังต่อไปนี้:

$ cargo clippy

ตัวอย่างเช่น สมมติว่าคุณเขียนโปรแกรมที่ใช้ค่าประมาณของค่าคงที่ทางคณิตศาสตร์ เช่น ค่าพาย (pi) ดังเช่นโปรแกรมนี้:

fn main() {
    let x = 3.1415;
    let r = 8.0;
    println!("the area of the circle is {}", x * r * r);
}

การรัน cargo clippy ในโครงการนี้จะแสดงผลลัพธ์ข้อผิดพลาดนี้ออกมา:

error: approximate value of `f{32, 64}::consts::PI` found
 --> src/main.rs:2:13
  |
2 |     let x = 3.1415;
  |             ^^^^^^
  |
  = note: `#[deny(clippy::approx_constant)]` on by default
  = help: consider using the constant directly
  = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#approx_constant

ข้อผิดพลาดนี้ทำให้คุณทราบว่าภาษา Rust มีค่าคงที่ PI ที่มีความแม่นยำสูงกว่าถูกนิยามไว้อยู่แล้ว และโปรแกรมของคุณจะถูกต้องเหมาะสมมากกว่าหากหันไปเรียกใช้งานค่าคงที่นั้นแทน หลังจากนั้นคุณก็ควรปรับปรุงโค้ดของคุณเพื่อใช้งานค่าคงที่ PI ดังกล่าว

โค้ดต่อไปนี้จะไม่ทำให้เกิดข้อผิดพลาดหรือคำเตือนใดๆ จาก Clippy:

fn main() {
    let x = std::f64::consts::PI;
    let r = 8.0;
    println!("the area of the circle is {}", x * r * r);
}

ศึกษาข้อมูลเพิ่มเติมเกี่ยวกับ Clippy ได้ที่ เอกสารประกอบการใช้งาน

การเชื่อมต่อร่วมกับ IDE โดยใช้ rust-analyzer

เพื่อความสะดวกในการเชื่อมต่อนำไปทำงานร่วมกับ IDE ชุมชน Rust แนะนำให้ใช้ rust-analyzer เครื่องมือนี้คือชุดโปรแกรมยูทิลิตีที่มีคอมไพเลอร์เป็นศูนย์กลางซึ่งสื่อสารกันผ่าน Language Server Protocol (LSP) ซึ่งเป็นข้อกำหนดมาตรฐานสำหรับให้ IDE และภาษานักพัฒนาโปรแกรมสามารถสื่อสารติดต่อระหว่างกันได้ ไคลเอนต์ชนิดต่างๆ สามารถใช้งาน rust-analyzer ร่วมด้วยได้ เช่น ปลั๊กอิน Rust analyzer สำหรับ Visual Studio Code

คุณสามารถเข้าไปเยี่ยมชม โฮมเพจของโครงการ rust-analyzer สำหรับคู่มือคำแนะนำในการติดตั้ง จากนั้นจึงทำการติดตั้งชุดเสริมการทำงานสำหรับ IDE เฉพาะที่คุณกำลังใช้งานอยู่ IDE ของคุณก็จะได้รับความสามารถที่สะดวกสบายเพิ่มขึ้น เช่น การเติมคำอัตโนมัติ (autocompletion), การข้ามไปยังจุดนิยาม (jump to definition) และการแสดงข้อผิดพลาดภายในการพิมพ์โค้ด (inline errors)