البرمجة غير المتزامنة هي عنصر أساسي في تطوير البرمجيات. من الصعب تصديق أن مفهوم البرمجة هذا كان موجودًا منذ القرن الحادي والعشرين فقط. كانت لغة البرمجة F # الأولى بين أقرانها في إدخال البرمجة غير المتزامنة في عام 2007.
أضافت لغات أخرى مثل C # و Python و JavaScript و C ++ دعمًا تدريجيًا للبرمجة غير المتزامنة. السؤال الكبير هو ، ما القيمة التي تضيفها البرمجة غير المتزامنة إلى تطبيقاتك؟
تجيب هذه المقالة على هذا السؤال وغيره من الأسئلة ، لذا ستتعرف على كل شيء عن كيفية استخدام البرمجة غير المتزامنة.
ما هي البرمجة المتزامنة؟
تشير البرمجة المتزامنة إلى البرنامج في أبسط أشكاله. يعالج نموذج البرمجة هذا سطور التعليمات البرمجية في برنامج أو نص برمجي بالتتابع. يبدأ دائمًا من السطر الأول من التعليمات البرمجية في البرنامج. ثم ينتظر حتى يكمل كل سطر من التعليمات البرمجية تنفيذه قبل الانتقال إلى التالي.
يتضمن النموذج المتزامن أيضًا رمزًا شرطيًا ، مثل إذا و في حين صياغات. على الرغم من أنه سيتم تنفيذ بعض التعليمات البرمجية فقط في عبارة شرطية ، إلا أن البرنامج سيستمر في العمل بالتتابع.
مثال برنامج متزامن
const SyncCode = () => {
console.log ("هذا هو السطر الأول في البرنامج")
console.log ("هذا هو السطر الثاني في البرنامج")
console.log ("هذا هو السطر الأخير في البرنامج")
}
SyncCode () ،
سيؤدي تشغيل برنامج JavaScript أعلاه إلى إنتاج الإخراج التالي في وحدة التحكم:
هذا هو السطر الأول في البرنامج
هذا هو السطر الثاني في البرنامج
هذا هو السطر الأخير في البرنامج
الناتج أعلاه هو بالضبط ما يجب أن تتوقعه. يبدأ البرنامج من الأعلى وينتظر حتى ينتهي سطر واحد من التعليمات البرمجية قبل الانتقال إلى التالي.
ما هي البرمجة غير المتزامنة؟
البرمجة غير المتزامنة هي عكس البرمجة المتزامنة. يعالج نموذج البرمجة غير المتزامن عدة أسطر من الرموز في وقت واحد. فهو لا ينتظر حتى يكتمل السطر السابق من التعليمات البرمجية في البرنامج تنفيذه قبل الانتقال إلى التالي.
متعلق ب: متزامن مقابل. البرمجة غير المتزامنة: ما مدى اختلافها؟
يمكن أن تقلل البرمجة غير المتزامنة وقت التنفيذ إلى النصف ، مما يؤدي إلى إنشاء أجهزة كمبيوتر أسرع بشكل فعال.
مثال برنامج غير متزامن
const AsyncCode = () => {
console.log ("هذا هو السطر الأول في البرنامج")
setTimeout (() => {
console.log ("هذا هو السطر الثاني في البرنامج")
}, 3000)
console.log ("هذا هو السطر الأخير في البرنامج")
}
AsyncCode () ،
سيؤدي تنفيذ كود JavaScript أعلاه إلى إنتاج المخرجات التالية في وحدة التحكم الخاصة بك:
هذا هو السطر الأول في البرنامج
هذا هو السطر الأخير في البرنامج
هذا هو السطر الثاني في البرنامج
إذا قارنت إخراج وحدة التحكم أعلاه بالبرنامج غير المتزامن الذي أنشأه ، فسترى أن هناك تناقضًا واضحًا. الدعوة إلى سجل الذي يقول "هذا هو السطر الثاني في البرنامج" ويحدث قبل السطر الذي يقول "هذا هو السطر الأخير في البرنامج". ومع ذلك ، فإن إخراج وحدة التحكم لا يعكس هذا.
نظرًا لأن JavaScript متزامن بشكل أساسي ، فإن الكود الموجود في البرنامج أعلاه تم تنفيذه بالتسلسل. لكن JavaScript يدعم البرمجة غير المتزامنة عبر ميزات مثل setTimeout () طريقة.
ال setTimeout () الطريقة هي طريقة جافا سكريبت غير متزامنة تأخذ وسيطين: وظيفة وتأخير. التأخير هو مؤقت (بالمللي ثانية) يؤخر تنفيذ الوظيفة. لذلك ، بينما ينتظر البرنامج أعلاه ثلاث ثوانٍ لتنفيذ الوظيفة في ملف setTimeout () الطريقة ، ينتقل إلى السطر التالي في الكود. ينتج عن هذا تنفيذ استدعاء الوظيفة الثالث قبل الثانية.
تقنيات JavaScript غير المتزامنة
جزء من ال setTimeout () الطريقة المذكورة أعلاه ، تستخدم العديد من تقنيات JavaScript البرمجة غير المتزامنة. تستخدم هذه التقنيات نموذج البرمجة غير المتزامن لتطوير تطبيقات أسرع غير محجوبة. بعض هذه التقنيات تشمل:
- مسج اياكس
- أكسيوس
- NodeJS
متعلق ب: ما هو Node.js؟ إليك كيفية استخدام JavaScript من جانب الخادم
إنشاء برامج غير متزامنة باستخدام JavaScript
هناك عدة طرق للتعامل مع التعليمات البرمجية غير المتزامنة. يجب أن تعتمد الطريقة التي تختارها على نوع التطبيق الذي تريد تطويره. تتضمن هذه الطرق وظائف رد الاتصال والوعود وغير المتزامن / انتظار.
وظائف رد الاتصال
هناك نوعان من الخصائص الهامة لوظيفة رد الاتصال. هم بمثابة معايير لوظائف أخرى ، وهم يعتمدون على الأحداث الخارجية لأداء واجبهم. ال setTimeout () الطريقة المستخدمة في المثال غير المتزامن أعلاه هي وظيفة رد الاتصال. يمرر البرنامج لها وظيفة السجل كمعامل (وظيفة رد الاتصال) ، ولا ينفذها إلا بعد ثلاث ثوان (الحدث).
تعد وظائف رد الاتصال رائعة بالنسبة للبرامج الصغيرة ، ولكن مع نمو تطبيقاتك ، يمكن أن تصبح معقدة للغاية بسرعة كبيرة. وذلك لأن وظائف رد الاتصال غالبًا ما تستدعي وظائف رد الاتصال الأخرى ، مما يؤدي إلى إنشاء سلسلة من عمليات الاسترجاعات المتداخلة.
استخدام الوعود
أضاف JavaScript دعمًا للوعود بعد وظائف رد الاتصال. إنها بديل جيد عند إنشاء تطبيقات أكبر. يمثل الوعد ما قد يحدث بعد عملية غير متزامنة. ستتخذ هذه النتيجة المحتملة أحد شكلين: تم الحل أو مرفوض. تتعامل وظيفة منفصلة مع كل من هذه النتائج ، مما يلغي الحاجة إلى التداخل (مشكلة وظيفة رد الاتصال). بدلاً من ذلك ، تشجع الوعود وظائف السلسلة التي يسهل استخدامها.
كل وعد يبدأ مع جديد يعد الكائن الذي له وظيفة مجهولة مع حل و يرفض المعلمات. ضمن هذه الوظيفة ، سيكون لديك التطبيق غير المتزامن ، الذي يعرض حلًا إذا نجحت العملية غير المتزامنة ، أو تم الرفض بطريقة أخرى.
ال ومن بعد() سلسلة تتعامل مع حل وظيفة ، و قبض على() سلسلة تتعامل مع يرفض وظيفة. لذلك ، ليست هناك حاجة إلى عبارات if المتداخلة ، كما هو الحال مع وظائف رد الاتصال.
استخدام مثال الوعود
كونست PromiseFunction = () => {
إرجاع الوعد الجديد ((حل ، رفض) => {
setTimeout (() => {
حل ("تم تنفيذ هذه العملية غير المتزامنة بشكل جيد")
}, 3000)
})
}
PromiseFunction (). ثم ((النتيجة) => {
console.log ("النجاح" ، النتيجة)
}). catch ((خطأ) => {
console.log ("خطأ" ، خطأ)
})
يقوم الكود أعلاه بإرجاع الإخراج التالي في وحدة التحكم:
نجح تنفيذ هذه العملية غير المتزامنة بشكل جيد
هذا لأن الوعد يعيد حل وظيفة ، والتي تمرر نتائجها إلى ومن بعد() وظيفة. إذا عاد الوعد يرفض الوظيفة التي يستخدمها البرنامج قبض على تعمل بدلا من ذلك.
استخدام Async / Await
إذا كنت لا تريد إنشاء سلسلة وعد عند التعامل مع العمليات غير المتزامنة ، فيمكنك تجربة عدم التزامن / الانتظار. لا تعد Async / Wait أداة غير متزامنة مختلفة تمامًا عن الوعود ، إنها مجرد طريقة مختلفة للتعامل معها. إنه يتعامل مع الوعود دون استخدام أسلوب السلسلة. لذلك ، بالطريقة نفسها التي تعد بالتعامل مع العمليات غير المتزامنة بشكل أفضل من وظائف رد الاتصال ، فإن عدم التزامن / انتظار له فوائد على الوعود البسيطة.
هناك نوعان من السمات الرئيسية لكل وظيفة غير متزامن / انتظار. يبدأون بـ غير متزامن الكلمات الرئيسية و انتظر الكلمة الأساسية تنتظر نتيجة عملية غير متزامنة.
مثال على برنامج Async / Await
كونست PromiseFunction = () => {
إرجاع الوعد الجديد ((حل ، رفض) => {
setTimeout (() => {
حل ("تم تنفيذ هذه العملية غير المتزامنة بشكل جيد")
}, 3000)
})
}const AsyncAwaitFunc = غير متزامن () => {
نتيجة const = انتظار PromiseFunction () ؛
console.log (نتيجة) ؛
}
AsyncAwaitFunc () ،
سيعيد الكود أعلاه الإخراج التالي في وحدة التحكم:
تم تنفيذ هذه العملية غير المتزامنة بشكل جيد
ما هي الوجبات الرئيسية؟
هناك العديد من النقاط الرئيسية التي يجب أن تأخذها من هذه المقالة:
- تعتبر البرمجة غير المتزامنة ذات قيمة لأنها تقلل من وقت انتظار البرنامج ، مما يؤدي إلى إنشاء تطبيقات أسرع.
- يمكن أن تكون وظيفة رد الاتصال متزامنة أو غير متزامنة.
- تقدم الوعود طريقة أفضل للتعامل مع العمليات غير المتزامنة من وظائف رد الاتصال.
- تتعامل وظائف Async / Wait مع الوعود بطريقة أفضل من استخدام وظائف السلسلة.
- تعالج وظيفة غير متزامنة / انتظار العمليات غير المتزامنة بطريقة تبدو متزامنة ، مما يسهل فهمها.
- تساعدك وظائف السهم على كتابة كود أفضل.
تريد أن تكون أفضل في تطوير الويب؟ تمنحك وظائف Arrow ، المضافة إلى JavaScript ES6 ، طريقتين لإنشاء وظائف لتطبيقات الويب.
اقرأ التالي
- برمجة
- برمجة
- جافا سكريبت
قاديشا كين مطور برامج متكامل وكاتب تقني / تقني. لديها قدرة مميزة على تبسيط بعض المفاهيم التكنولوجية الأكثر تعقيدًا ؛ إنتاج مادة يمكن لأي مبتدئ في مجال التكنولوجيا فهمها بسهولة. إنها شغوفة بالكتابة وتطوير البرامج الشيقة والسفر حول العالم (من خلال الأفلام الوثائقية).
اشترك في نشرتنا الإخبارية
انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!
انقر هنا للاشتراك