البرمجة الغير متزامنة asynchronous programming

خلاصة تعاملي مع asynchronous programming في Flutter ( البرمجة الغير متزامنة ) .

طبعا ال Dart معروفة بانها Single Thread يعني لما تكتب فيها كود وهالكود بده وقت طويل ليتنفذ ( متل قراءة وكتابة الملفات او تحميل بيانات من الإنترنت ) هالشي رح بيسبب انه البرنامج تبعك يعلق Freeze لحتى ينتهى تنفيذ الكود ويكمل تنفيذ الاكواد الثانية ان وجدت.

وهالشي طبعا مو كويس وخاصة بتطبيقات الجوال لهيك فيه الية لتعامل مع asynchronous functions ب dart يعني Flutter بتخليك تعمل أكتر من مهمة بنفس الوقت من دون ما يعلق البرنامج تبعك.

بعض ال keyworda الي رح استخدمها بهادا الشرح
async
await
Future

لازم بأي function بدك تستخدم فيها asynchronous operations تكتب async قبل بداية ال block تبع function يعني

async{
Your code here
{

وهادا هو الغرض الوحيد لكلمة async

منجي ل Future و await

اي function بتستخدم asynchronous programming لازم ترجع نوع Future والي هو كمان بالعادة بيتحدد معه نوع البيانات الي رح ترجع يعني
Future<int>
يعني انه النتيجة الي رح بترجع هي مستقبلية ( بدها وقت لترجع مو فورا ) وكمان نوعها integer.

ولو كانت ال function لأي سبب ما بترجع اي قيمة ( ممكن تكون تعدل بقيم متغيرات موجودة ) فبيكون شكل الناتج
Future<void>

لو كان عندي function بهالشكل

Future<int> getData()async{
int result = fetchFromInternet();
print(result);
}

لما يجي ينطبع الناتج حيكون فاضي، ليش !!!!

لان انا عم افترض ان fetchFromInternet() هي asynchronous function يعني لما وقت تنفيذيها ما رح يعلق البرنامج رح يكمل ويطبع وبعد هيك رح ينحط الناتج بالمتغير result بشكل غير متزامن فكيف فيني حل هادا الموضوع بإني حط كلمة await قبل fetchFromInternet() حيصير البرنامج يستنى انه الناتج يرجع من الدالة وبعد هيك يكمل الاوامر الثانية والي هي الطباعة.

Future<int> getData()async{
int result = await fetchFromInternet();
print(result);
}

—————–

طبعا بيجوز يكون هادا الكلام مو واضح لكن يعتبر تمهيد للناس الي اول مرة بيتعاملوا مع البرمجة الغير متزامنة asynchronous programming الشرح الكامل الي اعتمدت عليه لفهم الآلية كلها موجود على هادا الرابط :

https://www.dartlang.org/tutorials/language/futures

ملاحظة صغيرة:
في البداية لو رح تحاول تعمل debugging ( تتبع الكود سطر بسطر وقت تشغيل البرنامج ) على asynchronous functions رح بتتعذب شوي 😆 وهادا الي صار معي مبارح لكن مع الوقت رح بتصير تعرف كيف تختبر هيك نوع من functions ، قي نقطة صارت معي مبارح بهالموضوع وضليت عليها ساعتين 😂 لحتى عرفت سببها ان شاء الله بالمستقبل رح احكي عنها.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *