Examples¶
These sample programs live in the examples/ folder of the repository.
Examples 1 to 4 run today with dad run or in the playground. Each one is
followed by its output. Example 5 needs tables, a server and components, which come in Phases 2 and 3.
1. Hello — functions, default and named arguments¶
// أول برنامج بلغة ضاد
ثابت اسم = "العالم"
اطبع("مرحبا يا {اسم}!")
دالة حي(اسم: نص، تحية: نص = "أهلاً"): نص {
أرجع "{تحية} يا {اسم}"
}
اطبع(حي("سارة"))
اطبع(حي(اسم: "علي"، تحية: «صباح الخير»))
Output:
2. Basics — expressions, ranges, lambdas¶
// المتغيرات، الشروط، الحلقات، والدوال المختصرة
دالة مربع(س: صحيح) = س * س
دالة وصف(درجة: صحيح) = إذا درجة >= ٩٠ { "ممتاز" } وإلا إذا درجة >= ٥٠ { "ناجح" } وإلا { "راسب" }
متغير مجموع = ٠
لكل ع من ١ إلى ١٠ {
مجموع += مربع(ع)
}
اطبع("مجموع المربعات: {مجموع}")
لكل ع من ٠ حتى ١٠ بخطوة ٢ { اطبع(ع) }
ثابت درجات = [٩٥، 72، ٤٠]
لكل د في درجات {
اطبع("{د} => {وصف(د)}")
}
ثابت كبار = درجات.رشح { هو >= ٥٠ }.حول { هو * ٢ }
ثابت متوسط = درجات.اختزل(٠) { أ، ب => أ + ب } ك عشري / ٣٫٠
Output:
3. Shapes — value types, enums, exhaustive matching¶
// أنواع القيم، التعدادات، والمطابقة الشاملة
نوع نقطة(س: عشري، ص: عشري) {
دالة بعد() = جذر(س * س + ص * ص)
}
تعداد شكل {
دائرة(قطر: عشري)
مستطيل(عرض: عشري، طول: عشري)
مثلث(قاعدة: عشري، ارتفاع: عشري)
}
دالة مساحة(ش: شكل): عشري = طابق ش {
دائرة(ق) => ٣٫١٤١٦ * ق * ق / ٤
مستطيل(ع، ط) => ع * ط
مثلث(ق، ر) => ق * ر / ٢
}
ثابت أشكال = [دائرة(٢)، مستطيل(٣، ٤)، مثلث(قاعدة: ٦، ارتفاع: ٢)]
لكل ش في أشكال {
اطبع("المساحة = {مساحة(ش)}")
إذا ش هو دائرة { اطبع("قطرها {ش.قطر}") }
}
ثابت ن = نقطة(س: ٣، ص: ٤)
اطبع(ن.بعد()) // ٥
اطبع(ن == نقطة(٣، ٤)) // صح
ثابت م = ن.نسخة(ص: ٠)
Output:
4. Safety — optionals, errors, contracts, extensions¶
// الأمان من القيم المفقودة، الأخطاء، العقود والامتدادات
نوع مستخدم(اسم: نص، بريد: نص؟ = عدم)
دالة بريد_العرض(م: مستخدم؟): نص {
ثابت بريد = م؟.بريد
إذا بريد != عدم {
أرجع "{بريد} ({بريد.طول} حرفاً)" // تحويل ذكي: بريد هنا نص
}
أرجع م؟.بريد ؟؟ "لا يوجد بريد"
}
دالة اقسم(أ: صحيح، ب: صحيح): صحيح {
إذا ب == ٠ { ارفع مشكلة("قسمة على صفر") }
أرجع أ / ب
}
ثابت ناتج = حاول { اقسم(١٠، ٠) } التقط خ { اطبع(خ.رسالة)؛ ٠ }
عقد قابل_للعرض {
دالة اعرض(): نص
}
امتداد نص {
خاص دالة نظيف() = هذا.قص()
دالة مكرر(مرات: صحيح) = (من ١ إلى مرات).حول { هذا }.ضم("")
}
اطبع("هلا ".مكرر(3))
اطبع(بريد_العرض(مستخدم("هدى"، بريد: "huda@example.com")))
اطبع(بريد_العرض(عدم))
Output:
5. To-do app — data, server and UI in one file¶
// تطبيق مهام كامل: بيانات + خادم + واجهة في ملف واحد
جدول مهمة {
عنوان: نص
منجزة = خطأ
}
خادم دالة المهام() = مهمة.الكل()
خادم دالة أضف(عنوان: نص) = مهمة.أنشئ(عنوان: عنوان)
خادم دالة بدل(م: مهمة) = م.نسخة(منجزة: ليس م.منجزة).احفظ()
// واجهة برمجية عامة للبرامج الأخرى
مسار جلب "/api/مهام" = مهمة.الكل()
مكون قائمة_المهام() {
حالة مهام = المهام()
حالة جديدة = ""
عمود {
عنوان("مهامي ({مهام.رشح { ليس هو.منجزة }.عدد} متبقية)")
صف {
حقل(جديدة، تلميح: "مهمة جديدة…")
زر("أضف") {
أضف(جديدة)
مهام = المهام()
جديدة = ""
}
}
لكل م في مهام {
صف {
مربع_اختيار(م.منجزة) { بدل(م)؛ مهام = المهام() }
فقرة(م.عنوان)
}
}
}
}