โปรเจกต์ I/O: เขียนโปรแกรม Command Line
บทนี้เป็นการทบทวนทักษะหลายอย่างที่คุณได้เรียนมาจนถึงตอนนี้ และสำรวจ ฟีเจอร์ standard library เพิ่มอีกหน่อย เราจะสร้างเครื่องมือ command line ที่ทำงานกับการ input/output ไฟล์และ command line เพื่อฝึกฝนแนวคิด Rust บางอย่างที่คุณมีอยู่ในมือแล้ว
ความเร็ว ความปลอดภัย output ที่เป็น binary เดียว และการสนับสนุน
cross-platform ของ Rust ทำให้มันเป็นภาษาที่เหมาะสมในการสร้างเครื่องมือ
command line ดังนั้นสำหรับโปรเจกต์ของเรา เราจะสร้างเวอร์ชันของเราเอง
ของเครื่องมือค้นหา command line คลาสสิก grep (globally search a
regular expression and print) ใน use case ที่ง่ายที่สุด
grep ค้นหาใน file ที่ระบุสำหรับ string ที่ระบุ เพื่อทำเช่นนั้น grep
รับ file path และ string เป็นอาร์กิวเมนต์ จากนั้นมันอ่านไฟล์ หาบรรทัด
ในไฟล์นั้นที่มี string อาร์กิวเมนต์ และ print บรรทัดเหล่านั้น
ระหว่างทาง เราจะแสดงวิธีทำให้เครื่องมือ command line ของเราใช้ฟีเจอร์
terminal ที่เครื่องมือ command line อื่น ๆ หลายตัวใช้ เราจะอ่านค่าของ
environment variable เพื่อให้ user กำหนดพฤติกรรมของเครื่องมือของเรา
เรายังจะ print ข้อความ error ไปยัง standard error console stream
(stderr) แทน standard output (stdout) เพื่อให้ ตัวอย่างเช่น user
redirect output ที่สำเร็จไปยังไฟล์ในขณะที่ยังเห็นข้อความ error บนหน้าจอ
สมาชิก community Rust คนหนึ่ง Andrew Gallant ได้สร้างเวอร์ชันของ grep
ที่มีฟีเจอร์ครบและเร็วมาก ชื่อ ripgrep ในการเปรียบเทียบ เวอร์ชันของ
เราจะค่อนข้างง่าย แต่บทนี้จะให้ความรู้พื้นฐานที่คุณต้องการเพื่อเข้าใจ
โปรเจกต์ในโลกจริงอย่าง ripgrep
โปรเจกต์ grep ของเราจะรวมแนวคิดหลายอย่างที่คุณได้เรียนมาจนถึงตอนนี้:
- จัดระเบียบโค้ด (บทที่ 7)
- ใช้ vector และ string (บทที่ 8)
- จัดการ error (บทที่ 9)
- ใช้ trait และ lifetime ที่เหมาะสม (บทที่ 10)
- เขียนเทส (บทที่ 11)
เรายังจะแนะนำสั้น ๆ เกี่ยวกับ closure, iterator และ trait object ซึ่ง บทที่ 13 และ บทที่ 18 จะครอบคลุมในรายละเอียด