2013-03-15 13 views
6

Weiß jemand, in welcher Programmiersprache können Sie verwenden, um dies:wenn (Ausdruck) {Sachen tun}

when(expression){ do stuff } 

Es soll den Ausdruck und den Codeblock in einigen Array registrieren, die wiederum jede analysiert wird Q mili-/micro-/nanoseconds durch einen Hintergrund-Thread und für jeden Ausdruck, der wahr auswertet, den entsprechenden Code-Block ausführen.

Wie Sie vielleicht denken, habe ich bereits eine Implementierung. Ich frage, weil ich denke, dass es nett wäre, wenn es nativ in einigen Programmiersprachen unterstützt wird.

Für wen könnte fragen, was ist die Verwendung für eine solche Anweisung - stellen Sie sich vor, dass Sie einige Variablen/Objekte in Ihrem Programm erstellen wollen eine Prozedur jedes Mal ausgeführt werden soll/while/wann immer die Variable/Objekt einen bestimmten Wert hat/Zustand. Der Vorteil ist, dass Sie den Code nicht an die Variable/das Objekt binden müssen, und sie müssten sogar nicht mehr existieren, wenn Sie die when(){} deklarieren. Es wäre eine Art von Trigger

+0

Klingt interessant, aber nicht etwas, von dem ich gehört habe nativ in einer Sprache implementiert. Die nächste Sache wäre wahrscheinlich ein Ereignis? Aber auch das hängt von der Anwendung ab, nicht so sehr von der Implementierung der Sprache. Es würde sich auch eher auf den ursprünglichen Autor als auf den Endcode-Schreiber verlassen. –

+0

Es sieht aus wie ein Broadcast Receiver in Android (aber mit verschiedenen syntaktischen Zucker). –

+0

Es würde gegen das Prinzip der Kapselung gehen, wenn diese im globalen Maßstab implementiert würden, was ich denke, dass Sie damit implizieren. – Jodes

Antwort

0

Die SR-Sprache hat ein Konstrukt sehr ähnlich zu dem Sie suchen. Es ist die Syntax

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

Sie können hier Informationen (und Implementierung) finden: http://www.cs.arizona.edu/sr/

0

Ich weiß nicht von irgendwelchen Sprachniveau Konstrukte wie das, was Sie beschreiben, aber es klingt im Prinzip ähnlich zu dem, was ReactiveX tut es mit seinen Observablen. Ich glaube, dass der Observable-Typ in zukünftigen Versionen von Javascript enthalten sein wird.

Es sieht ein wenig anders:

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

vs:

when(expression) { // do stuff } 

Im Beispiel Sie Ihren Ausdruck geben würde, so etwas wie eine ReactiveX beobachtbaren zurückzukehren, und der Körper der Erklärung könnte sein, gleich .doNext(() => do stuff). Tatsächlich bietet Rx eine Reihe von Optionen für den Umgang mit verschiedenen beobachtbaren Ereignissen und es kann wirklich mächtige Dinge tun, die es Ihnen ermöglichen, Operationen zu verketten.