Chain of responsability
- design pattern comportamentale
- utilizzato per separare il codice che effettua una richiesta da quello che elabora la richiesta
Idea
Invece di avere una funzione che invoca direttamente un’altra funzione, la prima funzione invia la richiesta ad una catena di destinatari
- il primo destinatario può o elaborare la richiesta o passare la richiesta al prossimo destinatario nella catena
- il secondo si comporta allo stesso modo del primo e così via fino a che non viene raggiunto l’ultimo destinatario
- che può decidere se scartare la richiesta o lanciare un’eccezione
Ordine
L’ordine in cui inseriamo i gestori nella catena non dovrebbe essere rilevante perchè ogni gestore deve gestire solo l’evento per cui è stato designato
Generatore
- funzione o metodo che contiene una o più espressioni yield invece che dei return
- ogni volta che viene raggiunto un yield viene restituito un valore
- e l’esecuzione della funzione o del metodo è sospesa con il suo stato intatto
- quando il generatore è usato nuovamente, l’esecuzione riprende dallo statement successivo all’espressione yield
Coroutine
- usa l’espressione yield allo stesso modo ma esegue un loop infinito
- e comincia sospesa alla sua prima espressione yield
- in attesa che venga inviato un valore
Nel caso vi sia un’unica espressione yield
- se e quando viene inviato un valore con una send
- la coroutine lo riceve come valore dell’espressione yield in cui è sospesa in quel momento
- la coroutine riprende l’esecuzione e può fare qualsiasi computazione desideri nel corpo del ciclo
- quando ha finito cicla ancora
- e di nuovo sospende l’esecuzione in attesa di un valore da parte dell’espressione yield