Collections
Collections ใน JavaScript เทียบกับ Rust
หัวข้อที่มีชื่อว่า “Collections ใน JavaScript เทียบกับ Rust”Array, Object และ Map ของ JavaScript ครอบคลุมความต้องการด้าน collection เกือบทั้งหมด Rust มีตัวเทียบเท่าโดยตรงพร้อมความแตกต่างสำคัญหนึ่งข้อ: collection เป็นแบบ มี type และ element แบบตายตัว — Vec<i32> เก็บได้เฉพาะค่า i32 และ compiler บังคับเรื่องนี้
Vec — array ที่ขยายได้
หัวข้อที่มีชื่อว่า “Vec — array ที่ขยายได้”Vec<T> คือ array ที่ขยายได้และจองบน heap ของ Rust เทียบเท่ากับ array ของ JS (เมื่อทุก element มี type เดียวกัน) สร้างได้ด้วย macro vec! หรือ Vec::new()
Array และ tuple
หัวข้อที่มีชื่อว่า “Array และ tuple”array ขนาดคงที่ [T; N] อยู่บน stack ส่วน tuple (T1, T2, ...) เก็บค่าที่ต่างชนิดกัน — คล้ายกับ tuple type ของ TypeScript
HashMap — ที่เก็บแบบ key/value
หัวข้อที่มีชื่อว่า “HashMap — ที่เก็บแบบ key/value”HashMap<K, V> คือของเทียบเท่า Map ของ JS หรือ Record<string, V> ของ TS โดยใน Rust จะอยู่ใน std::collections
การ iterate
หัวข้อที่มีชื่อว่า “การ iterate”iterator ของ Rust เป็นแบบ lazy และต่อกันได้ — filter, map, collect ใช้งานเหมือน array method ของ JS แต่จะประเมินผลก็ต่อเมื่อถูก consume เท่านั้น
// Arrayconst numbers = [1, 2, 3, 4, 5];const odds = numbers.filter(x => x % 2 !== 0);console.log(odds); // [1, 3, 5]
// Mapconst scores = new Map<string, number>();scores.set("Alice", 95);scores.set("Bob", 87);console.log(scores.get("Alice")); // 95
// Tuple (TypeScript)const pair: [string, number] = ["Alice", 95];use std::collections::HashMap;
fn main() { // Vec let numbers = vec![1, 2, 3, 4, 5]; let odds: Vec<i32> = numbers.iter() .filter(|&&x| x % 2 != 0) .copied() .collect(); println!("{:?}", odds); // [1, 3, 5]
// HashMap let mut scores: HashMap<&str, i32> = HashMap::new(); scores.insert("Alice", 95); scores.insert("Bob", 87); if let Some(s) = scores.get("Alice") { println!("{s}"); // 95 }
// Tuple let pair: (&str, i32) = ("Alice", 95); println!("{} scored {}", pair.0, pair.1);}ลองเล่นดู
หัวข้อที่มีชื่อว่า “ลองเล่นดู”fn main() { let numbers = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; let odds: Vec<i32> = numbers.iter().filter(|&&x| x % 2 != 0).copied().collect(); println!("Odd numbers: {:?}", odds);
let mut scores = std::collections::HashMap::new(); scores.insert("Alice", 95); scores.insert("Bob", 87); if let Some(s) = scores.get("Alice") { println!("Alice scored {s}"); }}Compiling…