由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 异步编程+FP的程序的可读性太差
相关主题
看了一下Meteor很不错很着急,莫纳的
最近系统深入的学了haskell 困惑不少 收获不多一个multithreading 问题
看了一下monad,让我想到了Java的AOP多线程优化求助! (转载)
fp就是Declarative Programming请问有哪位师傅知道haskell语言的?
我对为什么使用FP的理解 (补)编程题又一道
scala 的future 和 promise有机制防止dead lock吗?问题一枚
数学和编程有没有人对curring有研究
C++问题几个Haskell很难学。。
相关话题的讨论汇总
话题: oncomplete话题: void话题: new
进入Programming版参与讨论
1 (共1页)
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
10
http://doc.akka.io/docs/akka/snapshot/scala/futures.html
http://doc.akka.io/docs/akka/snapshot/scala/dataflow.html

【在 Y**G 的大作中提到】
: 不错,俺得看一下这个future monad。谢谢
1 (共1页)
进入Programming版参与讨论
相关主题
Haskell很难学。。我对为什么使用FP的理解 (补)
我老给你们指条明路吧scala 的future 和 promise有机制防止dead lock吗?
Linq不是syntactic sugar数学和编程
Re: java inner class - 初学者问 (转载)C++问题几个
看了一下Meteor很不错很着急,莫纳的
最近系统深入的学了haskell 困惑不少 收获不多一个multithreading 问题
看了一下monad,让我想到了Java的AOP多线程优化求助! (转载)
fp就是Declarative Programming请问有哪位师傅知道haskell语言的?
相关话题的讨论汇总
话题: oncomplete话题: void话题: new