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

โปรเจกต์ I/O: การสร้างโปรแกรมบรรทัดคำสั่ง (An I/O Project: Building a Command Line Program)

บทนี้เป็นการทบทวนทักษะต่างๆ มากมายที่คุณได้เรียนรู้มาจนถึงตอนนี้ และเป็นการสำรวจฟีเจอร์ของไลบรารีมาตรฐานเพิ่มเติมนิดหน่อย เราจะสร้างเครื่องมือบรรทัดคำสั่ง (command line tool) ที่ปฏิสัมพันธ์กับการป้อนข้อมูลและการส่งออกข้อมูล (input/output) ของไฟล์และบรรทัดคำสั่ง เพื่อฝึกฝนคอนเซปต์ของ Rust ที่คุณมีติดตัวแล้ว

ความเร็ว ความปลอดภัย การส่งออกเป็นไฟล์ไบนารีเดี่ยว และการรองรับหลายแพลตฟอร์มของ Rust ทำให้มันเป็นภาษาที่เหมาะอย่างยิ่งสำหรับการสร้างเครื่องมือบรรทัดคำสั่ง ดังนั้นสำหรับโปรเจกต์ของเรา เราจะทำเครื่องมือค้นหาบรรทัดคำสั่งคลาสสิกเวอร์ชันของเราเองนั่นคือ grep (globally search a regular expression and print) ในกรณีการใช้งานที่เรียบง่ายที่สุด grep จะค้นหาสตริงที่ระบุในไฟล์ที่ระบุ ในการทำเช่นนั้น grep จะรับพารามิเตอร์เป็นพาธไฟล์และสตริง จากนั้นมันจะอ่านไฟล์ ค้นหาบรรทัดในไฟล์นั้นที่มีสตริงตรงกับอาร์กิวเมนต์ แล้วพิมพ์บรรทัดเหล่านั้นออกมา

ในระหว่างทาง เราจะแสดงวิธีทำให้เครื่องมือบรรทัดคำสั่งของเราใช้ฟีเจอร์เทอร์มินัลที่เครื่องมือบรรทัดคำสั่งอื่นๆ หลายตัวใช้งาน เราจะอ่านค่าของตัวแปรสภาพแวดล้อม (environment variable) เพื่อให้ผู้ใช้สามารถกำหนดค่าพฤติกรรมของเครื่องมือเราได้ นอกจากนี้เราจะพิมพ์ข้อความข้อผิดพลาดไปยังสตรีมคอนโซลข้อผิดพลาดมาตรฐาน (stderr) แทนที่จะเป็นสตรีมผลลัพธ์มาตรฐาน (stdout) เพื่อให้ผู้ใช้สามารถส่งทิศทางผลลัพธ์ที่สำเร็จไปยังไฟล์ในขณะที่ยังมองเห็นข้อความข้อผิดพลาดบนหน้าจอได้

สมาชิกคนหนึ่งในชุมชน Rust ชื่อ Andrew Gallant ได้สร้าง grep เวอร์ชันที่สมบูรณ์และรวดเร็วมากไว้แล้วเรียกว่า ripgrep เมื่อเปรียบเทียบกันแล้ว เวอร์ชันของเราจะค่อนข้างเรียบง่าย แต่บทนี้จะให้ความรู้พื้นฐานที่คุณจำเป็นต้องใช้ในการเข้าใจโปรเจกต์ในโลกจริง เช่น ripgrep

โปรเจกต์ grep ของเราจะรวมแนวคิดต่างๆ ที่คุณได้เรียนรู้มาจนถึงตอนนี้เข้าด้วยกัน:

เราจะแนะนำ closures, iterators และ trait objects สั้นๆ ด้วย ซึ่ง บทที่ 13 และ บทที่ 18 จะอธิบายอย่างละเอียด