ระหว่างนั่งรอขึ้นเครื่องบิน ก็ลองเขียนภาษา Rust กันหน่อย
ได้ยินครั้งแรกคือ เป็นภาษาที่ใช้พัฒนา FireFox ตัวใหม่
แต่ก็ยังไม่ได้ลองเล่นสักที
วันนี้ว่าง ๆ เลยลองเล่นดูหน่อย มาเริ่มกันเลย
เริ่มที่การติดตั้งเลย
ติดตั้งผ่าน rustup แบบง่าย ๆ
แถมมี Cargo สำหรับจัดการ dependency ต่าง ๆ ให้ครบ
ที่สำคัญยังทำให้เขียนชุดทดสอบและ benchmark ได้ง่ายอีกด้วย
พร้อมแบบนี้เหมือน go เลย
ดังนั้นติดตั้งและใช้งานกันดีกว่า
ที่สำคัญมีหนังสือให้อ่านฟรี ๆ และ ทำตามกันอีกคือ Rust By Example
ไม่ต้องคิดอะไรมากสำหรับมือใหม่อย่างเรา
สร้าง project ด้วย Cargo ไปเลย
[gist id="23368cc4079f4f499bf34dd8c83436a6" file="1.txt"]
เมื่อสร้างมาแล้วไฟล์คุ้น ๆ มันเหมือนกับ Golang dep เลย
ทำให้เข้าใจโครงสร้างได้ไม่ยาก
ส่วน IDE และ Editor ที่ใช้ก็เลือกเอาตามที่สบายใจ
ทั้ง VS Code, IntelliJ, Sublime, Atom, Vim เป็นต้น
ทาง Rust ยังแนะนำให้ลง component ผ่าน rustup อีก2 ตัวคือ
- Rustfmt สำหรับจัด format ของ code
- Clippy เป็น Lint tool ช่วยตรวจสอบ code
แบบนี้ก็สบายกันละ มีของใช้ที่จำเป็นครบเลย
[gist id="23368cc4079f4f499bf34dd8c83436a6" file="3.txt"]
หลังจากที่สร้าง project เรียบร้อย ก็มาเริ่มศึกษากัน
แต่การศึกษาภาษา Rust ในแบบผม คือ การทดสอบ
ไปดูเอกสารเรื่อง Automation Testing ได้
ดังนั้นมาเริ่มด้วย $cargo test
[gist id="23368cc4079f4f499bf34dd8c83436a6" file="2.txt"]
ก่อนอื่นเลยไปอ่านเอกสารของ Rust ก่อนว่า เขียนชุดการทดสอบอย่างไร ?
ไปพบว่ามีการทดสอบ 3 แบบหลัก ๆ คือ
- Unit test
- Integration test
- Documentation test อารมณ์เดียวกับ Docstring ใน Python เลย
พอจะเริ่มด้วยการเขียน test คำถามแรกเลยโครงสร้าง project ต้องเป็นอย่างไร ?
ไปอ่านเอกสารก็งง ๆ
ดังนั้นมาเริ่มที่ unit test ก่อนเลย สร้างไฟล์ชื่อว่า hello.rs ขึ้นมา
ในไฟล์นี้มีทั้ง production code และ test code เลย
ปลายทางได้แบบนี้
[gist id="23368cc4079f4f499bf34dd8c83436a6" file="hello.rs"]
แน่นอนว่าทดสอบผ่าน แต่กว่าจะผ่าน
ก็เพิ่งรู้ว่าสิ่งที่ทำในภาษาอื่น ๆ แบบง่าย กลับมายากในภาษา Rust
นั่นคือการเชื่อมต่อข้อมูลชนิด String
อ่านเอกสารไปมางงมาก ๆ แต่ก็หลุดมาได้แบบงง ๆ
ไว้ต้องศึกษาจริงจังกันต่อไป
ต่อมาเรื่องของการตั้งชื่อ function ต้องเป็น sneck case นะ
ส่วนตัวแปรที่เป็น local ให้ขึ้นต้นด้วยเครื่องหมาย underscore (_)
มิเช่นนั้นจะทำการเตือนดังนี้
ชีวิตดีมาก ๆ มีเครื่องมือช่วย
[gist id="23368cc4079f4f499bf34dd8c83436a6" file="4.txt"]
ยังไม่พอนะ function say_hi() ที่อยู่ใน module/package hello นั้น
ต้องเป็น public เพื่อให้เรียกจาก main.rs ได้อีกด้วย
ในภาษา Rust ใช้ตัวย่อว่า pub (มันจะย่อไปไหน ?)
[gist id="23368cc4079f4f499bf34dd8c83436a6" file="main.rs"]
สิ่งที่เขียนมานั้นคือ Unit test นะ
ส่วนการ build ก็เพียง $cargo build
จะได้ ไฟล์ binary มาให้เลย ชิวมาก ๆ
โดยที่ไฟล์ binary อยู่ที่ /target/debug/<project name>
วันนี้เราได้เริ่มหัดเรียนรู้ภาษาใหม่ ๆ กันบ้างหรือยัง ?