الدوال من الدرجة الأعلى والكاريّنة
تمرير الدوال وإرجاعها وتطبيقها جزئيًا
الدوال من الدرجة الأعلى والكاريّنة درس مجاني في Dart Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Dart Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Dart Academy 4 دروس في المجموع.
الدوال قيم
في Dart، الدالة مجرد قيمة يمكنك تخزينها في متغير. وتفتح هذه الفكرة البسيطة عالم الأنماط الوظيفية بأكمله. 🎯
int square(int x) => x * x;
var op = square;
print(op(4)); // 16ما معنى دالة من رتبة أعلى؟
الدالة من رتبة أعلى هي دالة تأخذ دالة باعتبارها وسيطًا أو تعيد دالة. لقد استخدمت هذا النوع من قبل مع أساليب القوائم.
تمرير دالة
عندما تمرر السلوك باعتباره وسيطًا، يحدد المستدعي ما سيحدث. هنا تنفذ apply أي دالة تستلمها.
int apply(int v, int Function(int) f) => f(v);
print(apply(5, (x) => x + 1)); // 6صيغة نوع الدالة
يُقرأ النوع int Function(int) هكذا: دالة تأخذ int وتعيد int. تجعل الأنواع نيتك واضحة تمامًا.
void run(String Function(String) format) {
print(format('hi'));
}إعادة دالة
يمكن للدالة من رتبة أعلى أيضًا إعادة دالة. وتتذكر الدالة المعادة القيم المحيطة بها عند إنشائها.
Function makeAdder(int n) {
return (int x) => x + n;
}استخدام الدالة المعادة
استدعِ الدالة المنشئة مرة واحدة لبناء دالة متخصصة، ثم أعد استخدامها. كل نتيجة هي أداة صغيرة مهيأة بطريقتها الخاصة.
var add10 = makeAdder(10);
print(add10(5)); // 15
print(add10(1)); // 11تعرّف إلى Currying
يحوّل Currying الدالة متعددة الوسائط إلى سلسلة من الدوال أحادية الوسيط. وتقدم قيمة واحدة في كل مرة.
int Function(int) add(int a) => (int b) => a + b;
print(add(3)(4)); // 7التطبيق الجزئي
ثبّت الوسيط الأول الآن، وأجل الباقي إلى وقت لاحق. هذا هو التطبيق الجزئي، وهو ينشئ مساعدات قابلة لإعادة الاستخدام ومحمّلة مسبقًا.
var add3 = add(3);
print(add3(10)); // 13
print(add3(20)); // 23لماذا نستخدم Currying؟
يتيح لك Currying إنشاء دوال متخصصة من دوال عامة دون إعادة كتابة المنطق. ويبرع عند تركيب خطوط معالجة صغيرة.
نوع الدوال باعتبارها معاملات
يمكنك تسمية أنواع الدوال المعقدة باستخدام typedef للحفاظ على سهولة قراءة التواقيع في مختلف أجزاء الشيفرة.
typedef IntOp = int Function(int);
int apply(int v, IntOp f) => f(v);اختصار Tear-Off
بدلًا من تغليف أسلوب في lambda، مرر اسمه مباشرةً. يحافظ هذا الأسلوب tear-off على نظافة الاستدعاءات وترتيبها.
['1', '2', '3'].map(int.parse).forEach(print);تحقق سريع
لنختبر مدى استيعابك للدوال من الرتبة الأعلى.
مراجعة
الدوال قيم، لذا يمكنك تمريرها وإعادتها. يحوّل كل من Currying والتطبيق الجزئي الدوال العامة إلى أدوات متخصصة. أحسنت العمل! 🚀
الأسئلة الشائعة
هل درس «الدوال من الدرجة الأعلى والكاريّنة» مجاني؟
نعم — نص درس «الدوال من الدرجة الأعلى والكاريّنة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Dart Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Dart Academy 4 دروس في المجموع.
ماذا ستتعلم في «الدوال من الدرجة الأعلى والكاريّنة»؟
تمرير الدوال وإرجاعها وتطبيقها جزئيًا تتمرن على Dart Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Dart Academy؟
لا تُشترط خبرة سابقة. Dart Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «الدوال من الدرجة الأعلى والكاريّنة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Dart Academy هذا؟
نعم. كل درس في Dart Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الدوال من الدرجة الأعلى والكاريّنة
- fold وreduce وexpand
- القيم القابلة للتكرار والمولّدات الكسولة باستخدام sync*
- تركيب مسارات الدوال النقية