Un esdeveniment en informàtica és un fet o canvi d'estat detectat per un sistema que pot desencadenar una resposta del programa. Pot originar-se per l'acció d'un usuari, per la recepció de dades, per una operació interna del sistema o per la finalització d'un procés. En terminologia informàtica, el TERMCAT defineix l'esdeveniment com el resultat provocat per l'acció d'un usuari o per l'execució d'un procés sobre un objecte durant el funcionament d'un programa, i que pot iniciar una nova acció.
Els esdeveniments són fonamentals en la programació orientada a esdeveniments, un model en què el flux d'execució no depèn només d'una seqüència fixa d'instruccions, sinó també de l'arribada d'esdeveniments als quals el sistema respon. Aquest enfocament és habitual en interfícies gràfiques, aplicacions web, sistemes interactius i programes que han de reaccionar a entrades externes.
Funcionament En molts sistemes, un esdeveniment és generat per un emissor i processat per un o més receptors. El component que detecta l'esdeveniment el comunica al programa, i aquest activa una rutina específica, sovint anomenada gestor d'esdeveniments o event handler. Per exemple, prémer un botó, moure el cursor, rebre un paquet de xarxa o completar una operació d'entrada/sortida poden generar esdeveniments diferents.
En diversos entorns de programació, els receptors s'han de registrar prèviament per escoltar determinats tipus d'esdeveniments. En el model d'esdeveniments del DOM, per exemple, els objectes poden registrar oients mitjançant mecanismes com `addEventListener`, i aquests són cridats quan l'esdeveniment corresponent es produeix. De manera semblant, les biblioteques de llenguatges com Java o C# incorporen mecanismes explícits per crear, publicar i gestionar esdeveniments.
Ús en programació Els esdeveniments permeten construir aplicacions més reactives i desacoblades. En comptes de consultar constantment si ha passat alguna cosa, un programa pot esperar fins que el sistema li notifiqui l'esdeveniment rellevant. Això és útil, per exemple, en una interfície gràfica que ha de respondre a clics o pulsacions de teclat, o en un servidor que ha de reaccionar quan arriba una nova connexió.
Aquest model també facilita separar la lògica que produeix l'esdeveniment de la lògica que el tracta. Un mateix esdeveniment pot ser processat per diferents components sense que l'emissor hagi de conèixer-ne els detalls interns, cosa que afavoreix l'organització modular del programari.
Esdeveniments i concurrència En programació concurrent i asíncrona, els esdeveniments també poden actuar com a mecanismes de coordinació. Una tasca pot quedar suspesa fins que una altra indiqui que una determinada situació s'ha produït, com ara la disponibilitat d'un recurs o l'arribada d'una dada. A Python, la biblioteca `asyncio` ofereix primitives d'esdeveniment per sincronitzar tasques dins d'un bucle d'esdeveniments.
El llibre Python Concurrency with Asyncio, de Matthew Fowler, presenta els esdeveniments com una eina per esperar fins que es compleixi una condició abans de continuar l'execució d'una operació concurrent. Aquest ús és especialment rellevant en programes que executen diverses tasques cooperatives i necessiten coordinar-ne el progrés.Fowler, Matthew. Python Concurrency with Asyncio. Manning Publications, 2022, capítol 11.
Vegeu també Programació orientada a esdeveniments Bucle d'esdeveniments Programació asíncrona Concurrència
Referències
Categoria:Terminologia informàtica