أنواع البيانات الأساسية (Data Types): الأرقام، الحروف، والقيم المنطقية
مرحباً بكم في درس جديد حول أساسيات البرمجة! ماذا سنتعلم اليوم؟ سنتعلم كيف نمثل البيانات المختلفة في برامجنا باستخدام أنواع البيانات الأساسية: الأرقام (الصحيحة والعائمة)، الحروف، والقيم المنطقية، مع أمثلة عملية بلغة Rust.
1. الأرقام (Numbers): التعامل مع القيم العددية
تُعد الأرقام أساسية في أي تطبيق، وتنقسم عادةً إلى أرقام صحيحة (integers) وأرقام عشرية أو عائمة (floating-point numbers). في Rust، هناك أنواع مختلفة لتحديد حجم وسلوك هذه الأرقام.
ملاحظة تقنية: في Rust، يتم استنتاج النوع الافتراضي للأرقام الصحيحة كـ
i32(عدد صحيح ذو إشارة بحجم 32 بت) وللأرقام العشرية كـf64(عدد عشري بحجم 64 بت).
لنبدأ بإنشاء بعض المتغيرات الرقمية:
fn main() {
// الأرقام الصحيحة (Integers)
let عدد_صحيح_موجب: i32 = 42; // تعريف عدد صحيح موجب صريح من نوع i32
let عدد_صحيح_سالب = -100; // Rust تستنتج i32 افتراضياً
let عدد_كبير_بدون_إشارة: u64 = 1_000_000_000_000; // عدد صحيح كبير بدون إشارة من نوع u64
// الأرقام العشرية (Floating-Point Numbers)
let سعر: f64 = 99.99; // تعريف رقم عشري صريح من نوع f64
let درجة_حرارة = 25.5; // Rust تستنتج f64 افتراضياً
}
في هذا الجزء، قمنا بتعريف متغيرات لأنواع مختلفة من الأرقام، مع تحديد بعض الأنواع بشكل صريح.
2. الحروف (Characters): تمثيل حرف واحد
يُستخدم نوع البيانات char لتمثيل حرف Unicode واحد. تذكر أن الحروف محاطة بعلامتي اقتباس مفردة (' ') وليست مزدوجة (" ") التي تُستخدم للسلاسل النصية.
fn main() {
// ... (أكواد الأرقام من الخطوة السابقة) ...
// الحروف (Characters)
let حرف_أول = 'A'; // تعريف حرف واحد 'A'
let رمز_تعبيري = '😂'; // Rust تدعم Unicode بشكل كامل للحروف
let رقم_كحرف = '7'; // يمكن تمثيل الأرقام كحروف أيضاً
}
هنا، قمنا بإنشاء متغيرات لتخزين حروف مفردة، بما في ذلك الأحرف الخاصة ورموز Unicode.
3. القيم المنطقية (Booleans): الحقيقة والخطأ
القيم المنطقية، أو bool، هي أبسط أنواع البيانات، حيث يمكن أن تحمل قيمتين فقط: true (صحيح) أو false (خطأ). تُستخدم هذه القيم بشكل أساسي في اتخاذ القرارات والتحكم في تدفق البرنامج.
fn main() {
// ... (أكواد الأرقام والحروف من الخطوات السابقة) ...
// القيم المنطقية (Booleans)
let هل_الطقس_مشمس = true; // تعريف قيمة منطقية صحيحة
let هل_البرنامج_يعمل = false; // تعريف قيمة منطقية خاطئة
let هل_العمر_أكبر_من_18 = 20 > 18; // نتيجة تعبير مقارنة هي قيمة منطقية
}
لقد رأينا كيف يمكننا تمثيل الحالات الثنائية (صحيح/خطأ) باستخدام النوع المنطقي bool.
4. طباعة القيم لعرض النتيجة
بعد تعريف هذه المتغيرات، من المهم أن نتمكن من عرض قيمها على الشاشة للتأكد من أنها تحتوي على البيانات المتوقعة. سنستخدم الماكرو println! لهذا الغرض.
fn main() {
// الأرقام الصحيحة (Integers)
let عدد_صحيح_موجب: i32 = 42;
let عدد_صحيح_سالب = -100;
let عدد_كبير_بدون_إشارة: u64 = 1_000_000_000_000;
// الأرقام العشرية (Floating-Point Numbers)
let سعر: f64 = 99.99;
let درجة_حرارة = 25.5;
// الحروف (Characters)
let حرف_أول = 'A';
let رمز_تعبيري = '😂';
let رقم_كحرف = '7';
// القيم المنطقية (Booleans)
let هل_الطقس_مشمس = true;
let هل_البرنامج_يعمل = false;
let هل_العمر_أكبر_من_18 = 20 > 18;
// طباعة القيم
println!("العدد الصحيح الموجب: {}", عدد_صحيح_موجب); // طباعة قيمة العدد الصحيح الموجب
println!("العدد الصحيح السالب: {}", عدد_صحيح_سالب); // طباعة قيمة العدد الصحيح السالب
println!("العدد الكبير بدون إشارة: {}", عدد_كبير_بدون_إشارة); // طباعة قيمة العدد الكبير
println!("السعر: {}", سعر); // طباعة قيمة السعر العشري
println!("درجة الحرارة: {}", درجة_حرارة); // طباعة قيمة درجة الحرارة
println!("الحرف الأول: {}", حرف_أول); // طباعة قيمة الحرف الأول
println!("الرمز التعبيري: {}", رمز_تعبيري); // طباعة قيمة الرمز التعبيري
println!("الرقم كحرف: {}", رقم_كحرف); // طباعة قيمة الرقم كحرف
println!("هل الطقس مشمس؟ {}", هل_الطقس_مشمس); // طباعة قيمة هل الطقس مشمس
println!("هل البرنامج يعمل؟ {}", هل_البرنامج_يعمل); // طباعة قيمة هل البرنامج يعمل
println!("هل العمر أكبر من 18؟ {}", هل_العمر_أكبر_من_18); // طباعة نتيجة التعبير المنطقي
}
باستخدام println!، نتمكن من رؤية تمثيل هذه البيانات في مخرجات البرنامج.
الكود النهائي الكامل (Complete Final Code)
إليكم السكربت كاملاً، جاهز للنسخ والتشغيل:
fn main() {
// 1. الأرقام (Numbers)
// الأرقام الصحيحة (Integers)
let عدد_صحيح_موجب: i32 = 42; // تعريف عدد صحيح موجب صريح من نوع i32
let عدد_صحيح_سالب = -100; // Rust تستنتج i32 افتراضياً
let عدد_كبير_بدون_إشارة: u64 = 1_000_000_000_000; // عدد صحيح كبير بدون إشارة من نوع u64
// الأرقام العشرية (Floating-Point Numbers)
let سعر: f64 = 99.99; // تعريف رقم عشري صريح من نوع f64
let درجة_حرارة = 25.5; // Rust تستنتج f64 افتراضياً
// 2. الحروف (Characters)
let حرف_أول = 'A'; // تعريف حرف واحد 'A'
let رمز_تعبيري = '😂'; // Rust تدعم Unicode بشكل كامل للحروف
let رقم_كحرف = '7'; // يمكن تمثيل الأرقام كحروف أيضاً
// 3. القيم المنطقية (Booleans)
let هل_الطقس_مشمس = true; // تعريف قيمة منطقية صحيحة
let هل_البرنامج_يعمل = false; // تعريف قيمة منطقية خاطئة
let هل_العمر_أكبر_من_18 = 20 > 18; // نتيجة تعبير مقارنة هي قيمة منطقية
// 4. طباعة القيم (Printing Values)
println!("--- أنواع البيانات الأساسية ---");
println!("العدد الصحيح الموجب: {}", عدد_صحيح_موجب);
println!("العدد الصحيح السالب: {}", عدد_صحيح_سالب);
println!("العدد الكبير بدون إشارة: {}", عدد_كبير_بدون_إشارة);
println!("السعر: {}", سعر);
println!("درجة الحرارة: {}", درجة_حرارة);
println!("\nالحرف الأول: {}", حرف_أول);
println!("الرمز التعبيري: {}", رمز_تعبيري);
println!("الرقم كحرف: {}", رقم_كحرف);
println!("\nهل الطقس مشمس؟ {}", هل_الطقس_مشمس);
println!("هل البرنامج يعمل؟ {}", هل_البرنامج_يعمل);
println!("هل العمر أكبر من 18؟ {}", هل_العمر_أكبر_من_18);
println!("----------------------------");
}
النتيجة المتوقعة (Expected Output)
عند تشغيل الكود أعلاه، ستحصل على المخرجات التالية في نافذة الطرفية (console):
--- أنواع البيانات الأساسية ---
العدد الصحيح الموجب: 42
العدد الصحيح السالب: -100
العدد الكبير بدون إشارة: 1000000000000
السعر: 99.99
درجة الحرارة: 25.5
الحرف الأول: A
الرمز التعبيري: 😂
الرقم كحرف: 7
هل الطقس مشمس؟ true
هل البرنامج يعمل؟ false
هل العمر أكبر من 18؟ true
----------------------------
تهانينا! لقد أتممت درس أنواع البيانات الأساسية بنجاح. أنت الآن مستعد للانتقال إلى مفاهيم أكثر تقدماً في Rust.