انتقل إلى المحتوى الرئيسي

الدوال والمتغيرات

مقدمة

الفلسفة الأساسية في تصميم لغة البرمجة Wave تكمن في الحفاظ على التوازن بين الأداء المنخفض المستوى والتجريد العالي المستوى، مما يوفر بيئة تطوير برمجيات فعّالة ومرنة. يقدم هذا القسم العناصر الأساسية المكونة لبرنامج Wave، وهي الدوال والمتغيرات.

الدالة هي الوحدة الأساسية التي تشكل منطق وعمل البرنامج، بينما يستخدم المتغير لتخزين وإدارة البيانات المطلوبة في هذه العملية. عند فهم كيفية تعريف الدوال والمتغيرات واستخدامها بشكل دقيق، يمكنك استثمار بنية وتصميم لغة Wave بشكل أعمق.


الدوال

في Wave، الدوال هي كتل من الشيفرة يمكن إعادة استخدامه وتنفيذه بشكل مستقل. يمكنك تجميع عملية أو حساب معينة ضمن وحدة واحدة والتعبير عنها، ويمكن استدعاؤها كلما دعت الحاجة لذلك في كامل البرنامج.

استخدام الدوال يقلل من تكرار الشيفرة البرمجية ويمكنك من الفصل المنطقي في البرنامج مما يرفع من قابلية القراءة وقابلية الصيانة. كما تُستخدم لتحقيق أغراض متنوعة مثل معالجة العمليات الحسابية، وإدارة المدخلات والمخرجات، وفصل منطق الشيفرة.

يتم تعريف الدوال في Wave باستخدام الكلمة المحجوزة fun ويتكون من اسم الدالة وقائمة الوسائط، بالإضافة إلى جسم الدالة المحاط بأقواس {}.

تعريف الدوال

في Wave، الشكل الأساسي لتعريف الدالة يبنى بالشكل التالي.

fun main() {
// اكتب الكود الخاص بك هنا
}

الدالة main هي نقطة الدخول الرئيسية لتشغيل البرنامج، كل برنامج في Wave يجب أن يحتوي على دالة main واحدة على الأقل. يبدأ البرنامج تشغيله من هذه الدالة.

يمكن للدالة أن تحتوي على وسائط إذا دعت الحاجة، ويمكن أن تقوم بإرجاع نتيجة عملياتها أو قيمة إلى النقطة التي تم استدعاؤها منها. في حال وجود قيمة راجعة، يجب تحديد نوع هذه القيمة في قسم تعريف الدالة.

مثال: دالة بسيطة

المثال التالي يوضح دالة بسيطة تقوم باستقبال عددين صحيحين وتعيد ناتج جمعهما.

fun add(a :i32, b :i32) -> i32 {
return a + b;
}

fun main() {
var result = add(5, 7); // إضافة استدعاء وظيفة
println(result); // الإخراج: 12
}

في هذا المثال، تستقبل دالة add وسائط من العددين الصحيحين a و b وتحسب جمعهما ثم ترجع النتيجة. في الدالة main، يتم استدعاء دالة add ويتم تخزين القيمة المرجعة في متغير ومن ثم طباعتها.

على هذا النحو، تقوم الدوال بتغليف عمل معين، وتتيح إعادة استخدامه في أجزاء مختلفة من البرنامج.

المتغيرات

تستخدم المتغيرات في تخزين ومعالجة البيانات في البرنامج. تم تصميم لغة Wave لتوضيح الفرق بين المتغيرات القابلة للتغيير وغير القابلة للتغيير عند الإعلان عنها، مما يتيح إظهار نية التغيير في البيانات على مستوى الشفرة.

من خلال ذلك، يصبح التغير في حالة البرنامج أكثر وضوحًا، مما يقلل من الأخطاء الناتجة عن تغييرات غير مقصودة في القيم.

متغير قابل للتغيير

في لغة Wave، المتغيرات قابلة للتغيير (mutable) كحالة افتراضية. أي، يمكن تغيير قيمتها أثناء تنفيذ البرنامج بعد الإعلان عنها مرة واحدة.

يتم الإعلان عن المتغيرات القابلة للتغيير باستخدام الكلمة المفتاحية var.

var x :i32 = 10;
x = 20;

في الشفرة أعلاه، يبدأ المتغير x بقيمة أولية 10 ويمكن تغييرها لاحقًا إلى 20. بهذه الطريقة، يتم استخدام المتغيرات القابلة للتغيير للبيانات التي تحتاج إلى تغيير حالتها.

متغير ثابت

إذا تم الإعلان عن المتغير كغير قابل للتغيير (immutable)، فلا يمكن تغيير قيمته بعد تعيين القيمة الأولية. يتم الإعلان عن المتغير الثابت باستخدام الكلمة المفتاحية let.

let y :i32 = 5;
// y = 10; // خطأ: لا يمكن للمتغيرات غير القابلة للتغيير تغيير قيمتها.

تساهم المتغيرات الثابتة في ضمان عدم تغيير القيمة، مما يساعد في زيادة استقرار البرنامج وقابليته للتنبؤ. ينصح باستخدام المتغيرات الثابتة للبيانات التي لا تحتاج إلى تغيير القيم، مثل البيانات الثابتة.

في Wave، يمكن استخدام let مع mut للسماح بالتغيير بشكل صريح.

let mut y :i32 = 5;
y = 10;

في هذه الحالة، يتم الإعلان عن المتغير بـ let، ولكن يسمح بتغيير القيمة باستخدام الكلمة المفتاحية mut.

مثال على إعلان المتغير

فيما يلي مثال على إعلان متغيرات قابلة للتغيير وغير قابلة للتغيير من أنواع مختلفة.

var x :i32 = 10;
let y :f64 = 3.14159;
var name :str = "Wave";
let is_active :bool = true;

في هذا المثال، x وname هما متغيرات قابلة للتغيير، بينما y و is_active هما متغيرات ثابتة. في Wave، من خلال تمييز var وlet بوضوح، يتم إظهار ما إذا كان يمكن تغيير البيانات على مستوى الشفرة.

عند استخدام المتغيرات القابلة للتغيير وغير القابلة للتغيير بشكل مناسب، يمكنك كتابة برنامج يحافظ على تناسق البيانات وأكثر متانة وقابلية للتنبؤ.