Y**G 发帖数: 1089 | 1 正常写法:
void foo() {
doA();
doB();
doC();
}
异步+FP写法:
fooAsync(OnCompleteCallback onComplete) {
doAAsync(new OnCompleteCallback() {
public void onComplete() {
doBAsync(new onCompleteCallback() {
public void onComplete() {
doCAsync(onComplete);
}
}
}
}
} |
c******o 发帖数: 1277 | 2 你一看就没用过。。。
用 future monad, gorountine 啥的,一个callback都不用写,还可以互相随意组合。
al usdQuote = future { connection.getCurrentValue(USD) }
val chfQuote = future { connection.getCurrentValue(CHF) }
val purchase = for {
usd <- usdQuote
chf <- chfQuote
if isProfitable(usd, chf)
} yield connection.buy(amount, chf)
purchase onSuccess {
case _ => println("Purchased " + amount + " CHF")
}
最后一个 onSuccess往往都被framework带劳了 |
Y**G 发帖数: 1089 | 3 如果你在future后面写一个anonymous函数,不是可读性一样很差 |
c******o 发帖数: 1277 | 4 你觉得差,就不要anonymous,完全可以定义可重用函数,然后用val来得值计算
FP没啥特别的,为啥总觉得势不两立
【在 Y**G 的大作中提到】 : 如果你在future后面写一个anonymous函数,不是可读性一样很差
|
Y**G 发帖数: 1089 | 5 我的意思是可读性差,写起来却很爽。
【在 c******o 的大作中提到】 : 你觉得差,就不要anonymous,完全可以定义可重用函数,然后用val来得值计算 : FP没啥特别的,为啥总觉得势不两立
|
c******o 发帖数: 1277 | 6 这个和FP没关系,和个人习惯有关。
【在 Y**G 的大作中提到】 : 我的意思是可读性差,写起来却很爽。
|
Y**G 发帖数: 1089 | 7 还是用Java舒服
假定
SimpleFunctionTask -- 异步执行一个函数
SequentialTask -- 将两个task串行执行
CompositeTask -- 同时启动多个task
new SequentialTask(
new CompositeTask(
WAIT_ALL,
new SimpleFunctionTask(new Runnable() {
void run() {
useQuote = connection.getCurrentValue(USD);
}
},
new SimpleFunctionTask(new Runnable() {
void run() {
useQuote = connection.getCurrentValue(USD);
}
}
},
new SimpleFunctionTask(new Runnable() {
void run() {
if isProfitable(usd, chf) {
...
}
}
},
new SimpleFunctionTask(new Runable() {
void run() {
System.out.println("Purchased " + amount + " CHF";
}
});
)
【在 c******o 的大作中提到】 : 你一看就没用过。。。 : 用 future monad, gorountine 啥的,一个callback都不用写,还可以互相随意组合。 : al usdQuote = future { connection.getCurrentValue(USD) } : val chfQuote = future { connection.getCurrentValue(CHF) } : val purchase = for { : usd <- usdQuote : chf <- chfQuote : if isProfitable(usd, chf) : } yield connection.buy(amount, chf) : purchase onSuccess {
|
c******o 发帖数: 1277 | 8 你没发现,在future monad这里,你都不用管啥串行,并行,你的dataflow自动就把这
些都解决了。
这个本身就叫data flow currency paradigm
要是有transaction, 再加STM/agent, 要是distributed, 再加 location neutral
Actors.
这些都是现在FP强的地方。 |
Y**G 发帖数: 1089 | 9 不错,俺得看一下这个future monad。谢谢 |
c******o 发帖数: 1277 | |