برنامه‌نویسی رویدادمحور

**برنامه‌نویسی رویدادگرا یا برنامه نویسی رخدادگرا** یک الگوی برنامه‌نویسی است که در آن، روند اجرای برنامه توسط رویدادها - مانند خروجی یک سنسور، تعاملات کاربر (مانند کلیک موس و فشار دادن کلیدها) یا پیام‌های دریافتی از سایر برنامه‌ها یا ریسه‌ها - تعیین می‌گردد.

برنامه‌نویسی رویدادگرا به عنوان یکی از پارادایم‌های برنامه‌نویسی، به‌طور گسترده برای توسعه نرم‌افزارهای مدرن، از جمله رابط‌های کاربری گرافیکی و سیستم‌های توزیع‌شده استفاده می‌شود. این مدل به کمک حلقۀ رخداد (Event Loops) کار می‌کند که به‌طور مداوم رویدادها را پایش و مدیریت می‌کنند.

## ساختار برنامه‌نویسی رویدادگرا
در برنامه‌نویسی رویدادگرا، نرم‌افزار از یک **حلقه اصلی** تشکیل شده است که وظایف زیر را برعهده دارد:  
* **انتخاب رویداد**: پایش و شناسایی رویدادهایی مانند کلیک موس، ورودی صفحه‌کلید و پیام‌های سیستم.  
* **اداره کردن رویدادها**: اجرای فراخوان‌ها یا کدهای مرتبط با هر رویداد.

حلقۀ رخداد در این ساختار نقشی کلیدی دارد و به‌طور مستقیم یا غیرمستقیم مسئول مدیریت و اجرای توابع مرتبط با رویدادهاست. این حلقه، صف رویدادها (Event Queue) را بررسی کرده و با پردازش رویدادها، برنامه را از حالت انتظار به وضعیت اجرا درمی‌آورد.

## فریم‌ورک‌ها و کتابخانه‌ها
در بسیاری از فریم‌ورک‌های مدرن برنامه‌نویسی، کد منبع مربوط به حلقه‌های رخداد از قبل پیاده‌سازی شده است و برنامه‌نویسان تنها نیاز به تعریف نگهدارنده‌های رویداد (Event Handlers) دارند. برای مثال:  
* در جاوااسکریپت، حلقه رخداد توسط نود.جی‌اس و موتور V8 مدیریت می‌شود.  
* در پایتون، از کتابخانه‌هایی مانند *asyncio* برای مدیریت وظایف غیرهم‌زمان و حلقه‌های رخداد استفاده می‌شود.  
* در توسعه رابط‌های کاربری مانند Qt یا GTK، مدیریت رویدادها به‌صورت داخلی پیاده‌سازی شده است.  

## نمونه‌ای از نگهدارنده رویداد
در برنامه‌نویسی رویدادگرا، کدهایی که برای پاسخ‌گویی به یک رویداد خاص نوشته می‌شوند، **نگهدارنده رویداد** (Event Handler) نام دارند. برای مثال:  

* رویداد فشردن کلید ENTER:
وقتی کاربر کلید *Enter* را فشار می‌دهد، یک نگهدارنده رویداد مانند *OnKeyEnter()* فراخوانی می‌شود که وظیفه اجرای کد مرتبط با آن رویداد را بر عهده دارد. در ادامه نمونه‌ای از پیاده‌سازی ساده ارائه می‌شود:

```javascript
function onKeyEnter(inputText) {
    console.log("کاربر متن زیر را وارد کرد:");
    console.log(inputText);
    let numbers = inputText.split(" ");
    if (numbers.length === 2) {
        let sum = parseInt(numbers[0]) + parseInt(numbers[1]);
        console.log("مجموع اعداد وارد شده برابر است با: " + sum);
    } else {
        console.log("ورودی نامعتبر است. لطفاً دو عدد وارد کنید.");
    }
}

onKeyEnter("12 34");
```


## مزایا
* پاسخ‌گویی بالا: برنامه‌ها می‌توانند بدون توقف به رویدادهای متعدد واکنش نشان دهند.
* انعطاف‌پذیری: به‌راحتی می‌توان رویدادهای جدید به برنامه اضافه کرد.
* مقیاس‌پذیری: مناسب برای برنامه‌های مدرن مانند وب‌سرورها و رابط‌های کاربری گرافیکی که نیاز به مدیریت تعداد زیادی رویداد دارند.  

## چالش‌ها
* پیچیدگی در مدیریت رویدادها: در برنامه‌های بزرگ، هماهنگی بین رویدادها و کدهای پاسخ ممکن است پیچیده شود.
* مسدود شدن حلقه رخداد: وظایف سنگین می‌توانند باعث کاهش کارایی و مسدود شدن حلقۀ رخداد شوند.

## ارتباط با حلقۀ رخداد
برنامه‌نویسی رویدادگرا به‌طور مستقیم بر پایهٔ حلقۀ رخداد بنا شده است. حلقه رخداد وظیفه پایش و مدیریت رویدادها را بر عهده دارد و از طریق فراخوانی نگهدارنده‌های رویداد، پاسخ مناسبی به ورودی‌ها یا پیام‌ها ارائه می‌دهد.

## منابع
  
  

رده:پارادایم‌های برنامه‌نویسی  
رده:رویدادها (رایانش)