2013-03-15 3 views
6

Qualcuno sa in quale linguaggio di programmazione si può utilizzare questo:quando (espressione) {fare cose}

when(expression){ do stuff } 

Si suppone per registrare l'espressione e il blocco di codice in alcune serie che a sua volta viene analizzato ogni Q mili-/micro-/nanosecondi con un thread in background e, per ogni espressione che assume valore true, esegue il rispettivo blocco di codice.

Come si potrebbe pensare, ho già un'implementazione. Lo sto chiedendo perché penso che sarebbe bello averlo supportato nativamente in alcuni linguaggi di programmazione.

Per chi potrebbe chiedere a cosa serve questa istruzione- immagina di creare alcune variabili/oggetti nel tuo programma e vuoi che una procedura venga eseguita ogni volta/mentre/ogni volta che la variabile/oggetto ha un determinato valore/stato. Il vantaggio è che non dovresti associare il codice alla variabile/oggetto e più non dovrebbero nemmeno esistere nel momento in cui dichiari lo when(){}. Sarebbe una sorta di trigger

+0

Sembra interessante, ma non qualcosa di cui avevo sentito parlare in modo nativo in una lingua. La cosa più vicina sarebbe probabilmente un evento? Ma anche questo dipende dall'applicazione, non tanto dall'implementazione del linguaggio. Si baserebbe anche sull'autore iniziale, piuttosto che sullo scrittore del codice finale. –

+0

Sembra un ricevitore Broadcast in Android (ma con diverso zucchero sintattico). –

+0

Sarebbe contrario al principio dell'incapsulamento se questi fossero implementati su scala globale, cosa che penso tu stia insinuando. – Jodes

risposta

0

Il linguaggio SR ha un costrutto molto simile a quello che si cerca. C'è la sintassi è

do guard -> command 
[] guard -> command 
[] guard -> command 
... 
od 

È possibile trovare informazioni (e realizzazione) qui: http://www.cs.arizona.edu/sr/

0

Non so di nessun costrutti livello linguistico come ciò che si descrive ma suona simile in linea di principio a quello che ReactiveX fa con i suoi osservabili. Credo che il tipo Osservabile debba essere incorporato anche nelle versioni future di Javascript.

sembra un po 'diverso:

observable.doNext(() => { // do stuff }) 

vs:

when(expression) { // do stuff } 

Nell'esempio si dà l'espressione sarebbe tornato qualcosa di simile ad un ReactiveX osservabile, e il corpo della dichiarazione potrebbe essere equivale a .doNext(() => do stuff). In effetti Rx fornisce una serie di opzioni su come gestire diversi eventi osservabili e può fare cose davvero potenti che ti consentono di eseguire operazioni a catena.