عند العمل في تطبيق شبكي حيث تريد تحديد جميع عناوين الآي بي الممكنة لواجهة الشبكة (IPv4 أو IPv6) والقيام بشيء مع عناوين v4 فقط، يمكنك استخدام التطابق pattern matching في Rust للتحقق مما إذا كان العنوان الذي تم العثور عليه هو IPv4 أم لا. الطريقة الأكثر شيوعًا للقيام بذلك هي باستخدام match
statement.
في حالتك، عندما تحصل على Option
، يمكنك استخدام match
للتحقق مما إذا كانت القيمة موجودة (Some) أم لا (None)، وبعد ذلك يمكنك استخدام التطابق مع التحديد (pattern matching) لفحص كل عنوان آي بي في الـ Vector والتأكد مما إذا كان IPv4 أم لا.
إليك كيفية تحقيق ذلك بالتفصيل:
rustuse std::net::{IpAddr, Ipv4Addr};
fn main() {
// Example Option>
let addresses = Some(vec![
IpAddr::V6("fe80::6a5b:35ff:fec7:5eeb".parse().unwrap()),
IpAddr::V4(Ipv4Addr::new(10, 0, 11, 241)),
]);
// Using match to handle Option
match addresses {
Some(vec) => {
// Iterate over the vector
for ip_addr in vec {
// Using match to handle IpAddr enum
match ip_addr {
IpAddr::V4(ipv4) => {
// If it's IPv4, print it
println!("{}", ipv4);
}
IpAddr::V6(_) => {
// If it's IPv6, do nothing
}
}
}
}
None => {
println!("No addresses found.");
}
}
}
في هذا المثال، نقوم بتحديد متغير addresses
ليكون Option
. ثم نستخدم match
لفحص إذا ما كانت هناك قيمة موجودة (Some
) أو لا (None
). إذا كان هناك قيمة موجودة، فإننا نقوم بتكرار عبر الـ Vector ونستخدم match
مرة أخرى للتحقق مما إذا كانت العنوان IPv4 أو IPv6 وفقًا لذلك نقوم بالطباعة أو عدم القيام بأي شيء بناءً على النوع. إذا كانت القيمة فارغة، فسنطبع رسالة تفيد بعدم وجود عناوين.
هذا النمط يسمح لك بتحقيق ما تريده بشكل فعال وسلس في Rust، حيث يتم التعامل بشكل صارم مع نوع البيانات ويسمح لك باتخاذ الإجراءات المناسبة بناءً على ذلك.
المزيد من المعلومات
بالتأكيد، سأواصل إكمال المقال بمزيد من التفاصيل والشروحات:
عندما تقوم بتشغيل التطبيق، سيتم تنفيذ الشيفرة المذكورة أعلاه. أولاً، ستقوم بطباعة “10.0.11.241”، وهو العنوان IPv4 الذي تم العثور عليه في الـ Option
قد يظهر الكود بسيطًا، ولكنه يحتوي على العديد من المفاهيم المهمة في Rust. فلنلقِ نظرة أعمق على بعض هذه المفاهيم:
-
التطابق pattern matching: في Rust، يُستخدم التطابق للتحقق من قيم متغيرات وتنفيذ سلوك مختلف بناءً على هذه القيم. يُعتبر
match
وسيلة قوية ومرنة للتعامل مع مختلف الحالات. -
التعبيرات الإتشاءية (Enums): Enums هي تعبيرات تعتبر مجموعة محدودة من القيم. في هذا المثال، استخدمنا
IpAddr
كـ enum لتمثيل عناوين IPv4 و IPv6. -
الأنماط في التطابق: يمكنك استخدام الأنماط في
match
للتحقق من تطابق نوع معين من البيانات. في هذا المثال، استخدمنا نمطًا للتحقق من ما إذا كان العنوانIpAddr
هو IPv4 أو IPv6. -
تنوع النوع (Type versatility): تبرز Rust بقدرتها على التعامل مع الأنواع بشكل مرن وفعال. يمكنك التعامل بسهولة مع مجموعة متنوعة من البيانات وتطبيق السلوك المناسب لها.
هذه المفاهيم الأساسية في Rust تساعدك في بناء تطبيقات قوية وموثوقة. عندما تتقن استخدامها، ستتمكن من كتابة كود فعال وصيانة سهلة، مما يساعد في تسريع عملية التطوير وتقليل الأخطاء.
في النهاية، يجدر بك أن تتحقق من مستندات Rust الرسمية وتستكشف المزيد من الأمثلة والمفاهيم لتعزيز فهمك ومهاراتك في البرمجة بلغة Rust.