ระหว่างนั่งรอขึ้นเครื่องบิน ก็ลองเขียนภาษา Rust กันหน่อย 
ได้ยินครั้งแรกคือ เป็นภาษาที่ใช้พัฒนา FireFox ตัวใหม่
แต่ก็ยังไม่ได้ลองเล่นสักที
วันนี้ว่าง ๆ เลยลองเล่นดูหน่อย มาเริ่มกันเลย

เริ่มที่การติดตั้งเลย

ติดตั้งผ่าน rustup แบบง่าย ๆ
แถมมี Cargo สำหรับจัดการ dependency ต่าง ๆ ให้ครบ
ที่สำคัญยังทำให้เขียนชุดทดสอบและ benchmark ได้ง่ายอีกด้วย
พร้อมแบบนี้เหมือน go เลย
ดังนั้นติดตั้งและใช้งานกันดีกว่า
ที่สำคัญมีหนังสือให้อ่านฟรี ๆ และ ทำตามกันอีกคือ Rust By Example

ไม่ต้องคิดอะไรมากสำหรับมือใหม่อย่างเรา
สร้าง project ด้วย Cargo ไปเลย

เมื่อสร้างมาแล้วไฟล์คุ้น ๆ มันเหมือนกับ Golang dep เลย
ทำให้เข้าใจโครงสร้างได้ไม่ยาก

ส่วน IDE และ Editor ที่ใช้ก็เลือกเอาตามที่สบายใจ
ทั้ง VS Code, IntelliJ, Sublime, Atom, Vim เป็นต้น

ทาง Rust ยังแนะนำให้ลง component ผ่าน rustup อีก2 ตัวคือ

  • Rustfmt สำหรับจัด format ของ code
  • Clippy เป็น Lint tool ช่วยตรวจสอบ code

แบบนี้ก็สบายกันละ มีของใช้ที่จำเป็นครบเลย

หลังจากที่สร้าง project เรียบร้อย ก็มาเริ่มศึกษากัน

แต่การศึกษาภาษา Rust ในแบบผม คือ การทดสอบ
ไปดูเอกสารเรื่อง Automation Testing ได้ 
ดังนั้นมาเริ่มด้วย $cargo test

ก่อนอื่นเลยไปอ่านเอกสารของ Rust ก่อนว่า เขียนชุดการทดสอบอย่างไร ?

ไปพบว่ามีการทดสอบ 3 แบบหลัก ๆ คือ

  • Unit test
  • Integration test
  • Documentation test อารมณ์เดียวกับ Docstring ใน Python เลย

พอจะเริ่มด้วยการเขียน test คำถามแรกเลยโครงสร้าง project ต้องเป็นอย่างไร ?

ไปอ่านเอกสารก็งง ๆ 
ดังนั้นมาเริ่มที่ unit test ก่อนเลย สร้างไฟล์ชื่อว่า hello.rs ขึ้นมา
ในไฟล์นี้มีทั้ง production code และ test code เลย
ปลายทางได้แบบนี้

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

ต่อมาเรื่องของการตั้งชื่อ function ต้องเป็น sneck case นะ
ส่วนตัวแปรที่เป็น local ให้ขึ้นต้นด้วยเครื่องหมาย underscore (_)
มิเช่นนั้นจะทำการเตือนดังนี้
ชีวิตดีมาก ๆ มีเครื่องมือช่วย

ยังไม่พอนะ function say_hi() ที่อยู่ใน module/package hello นั้น
ต้องเป็น public เพื่อให้เรียกจาก main.rs ได้อีกด้วย
ในภาษา Rust ใช้ตัวย่อว่า pub (มันจะย่อไปไหน ?)

สิ่งที่เขียนมานั้นคือ Unit test นะ

ส่วนการ build ก็เพียง $cargo build

จะได้ ไฟล์ binary มาให้เลย ชิวมาก ๆ
โดยที่ไฟล์ binary อยู่ที่ /target/debug/<project name>


วันนี้เราได้เริ่มหัดเรียนรู้ภาษาใหม่ ๆ กันบ้างหรือยัง ?



Tags: