jhe*_*dus 5 javafx reactive-programming system.reactive elm rx-java
我最近看到了关于Elm反应式编程的这个有趣的演讲.
这让我想知道用于实现Mario游戏的语言结构(在所示的演示文稿中,以及下图中)是否可以映射到纯JavaFX或JavaFX与RxJava结合的类似高级语言结构?
换句话说,是否有可能在单独的JavaFX或JavaFX + RxJava中使用相同的概念抽象(即时间相关值)来表达在Elm中实现的Mario游戏?
因此,如果经验丰富的JavaFX程序员或经验丰富的JavaFX + RxJava + Functional程序员想要将Mario游戏从Elm移植到1)JavaFX或2)JavaFX + RxJava那么程序员可以通过使用类似的高来完成此任务在Elm中使用的级别抽象?
我为JavaFX考虑的抽象是绑定,对于JavaFX + RxJava是绑定+ Observables/Subjects/Subscription.

我快速浏览了榆树,这令人印象深刻(而且富有表现力).
在榆树中,你构建你的场景
Signal Element
Run Code Online (Sandbox Code Playgroud)
在JavaFX中大致相当于
ObservableValue<Node>
Run Code Online (Sandbox Code Playgroud)
对JavaFX的天真转换意味着您在每次更新时交换整个场景,这是非常昂贵的.在Elm中,Element是一个场景节点的不可变抽象表示,在屏幕外构建(在DOM之外).它足够便宜,可以在每次更新时重新创建整个场景图(由于不变性,重用未更改的分支是安全的).根Element被渲染到DOM,但据我所知,只是第一次构造完整的DOM.在后续更新中,Elm运行时运行一个算法来比较新的根元素和旧的根元素,并且仅修改需要更新的DOM的那些部分,这足够快.React.js使用相同的技术.因此,Elm和React.js都提供了高级功能抽象,但出于性能原因,使用了可变性.
通过一些额外的语法噪音,您可以将大多数Elm构造转换为JavaFX (*).例如,
lift2 display Window.dimensions gameState
Run Code Online (Sandbox Code Playgroud)
相当于
import static org.fxmisc.EasyBind.*;
combine(Window.dimensions, gameState, display)
Run Code Online (Sandbox Code Playgroud)
缺少的部分是不可变的抽象窗口小部件表示库以及它们对JavaFX场景图的有效渲染.
你能做的是:
我很乐意看到其中任何一个完成.
(*)我认为Elm 记录非常强大,需要Java中的大量样板(或Scala).
榆树:
type Point = { x:Float, y:Float }
p = { 0.0, 0.0 }
q = { p | x <- 5.0 }
Run Code Online (Sandbox Code Playgroud)
Java的:
class Point {
public final float x;
public final float y;
public Point(float x, float y) {
this.x = x;
this.y = y;
}
public Point updateX(float x) {
return new Point(x, y);
}
public Point updateY(float y) {
return new Point(x, y);
}
}
Point p = new Point(0.0, 0.0);
Point q = p.updateX(5.0);
Run Code Online (Sandbox Code Playgroud)
斯卡拉:
case class Point(x: Float, y: Float)
val p = Point(0.0, 0.0)
val q = p.copy(x = 5.0f)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1462 次 |
| 最近记录: |