由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - FP 和 Procedural Programming 有什么不同?
相关主题
storm俨然是下一个冉冉升起的新星啊这次Clojure把Scala给干了
大牛给讲讲monad吧?aspect programing 就是 functional programing吗?
看来跳了Scala的坑是对的why Scala is terrible
Scala的思路现在谈paradigm过时了
scala和monad感觉并发模型上go可以秒vertx
scala future之间通信有什么好办法吗?databrick的scala style guide
Scala的map和flatmap什么区别?这里有人用 Erlang 吗?
scala写个loop老难了10个数所有的组对可能, 怎么解?
相关话题的讨论汇总
话题: fp话题: procedural话题: sum话题: int
进入Programming版参与讨论
1 (共1页)
t*******h
发帖数: 2882
1
举例说明?
c******o
发帖数: 1277
2
最简单的就是例子就是,用 for loop/recursive 去实现同一个东西。
for loop mutable variable, recursive immutable value.
尤其是有些复杂的logic要求recursive的参数里带有函数。
c******o
发帖数: 1277
3
再来一个 fold 和 for
val x : List[Int] = List(1,2,3,4)
x.fold(0)((y,z)=>y+z)
得出
10
var i:Int =0
var sum:Int =0
while(i sum = sum+x(i)
i=i+1
}
println sum
得出10
d***a
发帖数: 13752
4
一个无状态,一个有状态。

【在 t*******h 的大作中提到】
: 举例说明?
n***e
发帖数: 723
5
其实我一直想问一个问题:code写成这样如果出问题怎么debug?

【在 c******o 的大作中提到】
: 再来一个 fold 和 for
: val x : List[Int] = List(1,2,3,4)
: x.fold(0)((y,z)=>y+z)
: 得出
: 10
: var i:Int =0
: var sum:Int =0
: while(i: sum = sum+x(i)
: i=i+1

z****e
发帖数: 54598
6
j2ee经过大讨论之后
现在大部分business logic所经过的组件都是无状态的
尤其是spring管理的组件

【在 d***a 的大作中提到】
: 一个无状态,一个有状态。
z****e
发帖数: 54598
7
int sum=0;
for(int i:list) sum+=i;
return sum;

【在 c******o 的大作中提到】
: 再来一个 fold 和 for
: val x : List[Int] = List(1,2,3,4)
: x.fold(0)((y,z)=>y+z)
: 得出
: 10
: var i:Int =0
: var sum:Int =0
: while(i: sum = sum+x(i)
: i=i+1

z****e
发帖数: 54598
8
老弟,不是俺说你
但是你这种属于写代码写得太少的
要么就是你故意把oop的代码写得很繁琐
用了最糟糕的一个选择while
哪怕是弱循环for(int i=0;i 都比while强上不是一点半点,而且远比while循环要常用

【在 c******o 的大作中提到】
: 再来一个 fold 和 for
: val x : List[Int] = List(1,2,3,4)
: x.fold(0)((y,z)=>y+z)
: 得出
: 10
: var i:Int =0
: var sum:Int =0
: while(i: sum = sum+x(i)
: i=i+1

c******o
发帖数: 1277
9
问题是你在哪儿出bug?
x.fold(0)((y,z)=>y+z)
0就是初始值,你觉得不对,可以调整。
(y,z) => y+z 是一个函数,定义是就是两个变一个,怎么变是你定义的,这儿是 y+z
, 要是复杂,或者出错,就在这里加log,debug code, break point.
本质上和loop有任何区别么?

【在 n***e 的大作中提到】
: 其实我一直想问一个问题:code写成这样如果出问题怎么debug?
c******o
发帖数: 1277
10
你太敏感,我根本不觉得多少行代码有啥意义,我啥时候吹捧过那个。
我不用for,因为scala的for 不是 loop,只是flatMap/map的语法糖
着眼点是:
一个是固定逻辑处理,用var
一个是传入逻辑(函数)处理, 不用变量 var
你看看你的那上一个(不使这个),就是一个半FP半OO,不要和我说java里没有FP

【在 z****e 的大作中提到】
: 老弟,不是俺说你
: 但是你这种属于写代码写得太少的
: 要么就是你故意把oop的代码写得很繁琐
: 用了最糟糕的一个选择while
: 哪怕是弱循环for(int i=0;i: 都比while强上不是一点半点,而且远比while循环要常用

相关主题
scala future之间通信有什么好办法吗?这次Clojure把Scala给干了
Scala的map和flatmap什么区别?aspect programing 就是 functional programing吗?
scala写个loop老难了why Scala is terrible
进入Programming版参与讨论
p*****2
发帖数: 21240
11
procedural, function不是first class
z****e
发帖数: 54598
12
我们用另外一种paradigm目的是什么?
我觉得一个是为了简化开发,其次第二个是增强可读性
最糟糕的也应该是加强机器执行的效率
否则没有任何意义去做这个事
如果你只是为了不传状态而这么做的话
我觉得这overkill了,越发地接近回字的几种写法了
做事情要有目的性,想明白自己要什么,然后再去选择工具予以执行
当然这个如果只是举例的话,我顶多也只能说这是一个不恰当的例子

【在 c******o 的大作中提到】
: 你太敏感,我根本不觉得多少行代码有啥意义,我啥时候吹捧过那个。
: 我不用for,因为scala的for 不是 loop,只是flatMap/map的语法糖
: 着眼点是:
: 一个是固定逻辑处理,用var
: 一个是传入逻辑(函数)处理, 不用变量 var
: 你看看你的那上一个(不使这个),就是一个半FP半OO,不要和我说java里没有FP

z****e
发帖数: 54598
13
实际上作为一个aop的爱好者来说
我很讨厌看到代码里面出现debug.log这种东西
哪怕是一行我都不喜欢看到
fp这点上比oop差了不少,oop要做aop很容易
切面本身通过flow可以直观理解
fp我连切都不知道怎么切进去

+z

【在 c******o 的大作中提到】
: 问题是你在哪儿出bug?
: x.fold(0)((y,z)=>y+z)
: 0就是初始值,你觉得不对,可以调整。
: (y,z) => y+z 是一个函数,定义是就是两个变一个,怎么变是你定义的,这儿是 y+z
: , 要是复杂,或者出错,就在这里加log,debug code, break point.
: 本质上和loop有任何区别么?

n***e
发帖数: 723
14
没法步进啊。。。
好吧,我承认我弱。

+z

【在 c******o 的大作中提到】
: 问题是你在哪儿出bug?
: x.fold(0)((y,z)=>y+z)
: 0就是初始值,你觉得不对,可以调整。
: (y,z) => y+z 是一个函数,定义是就是两个变一个,怎么变是你定义的,这儿是 y+z
: , 要是复杂,或者出错,就在这里加log,debug code, break point.
: 本质上和loop有任何区别么?

c******o
发帖数: 1277
15
可以步进。。
在传入函数里做断点,就可以步进了。

【在 n***e 的大作中提到】
: 没法步进啊。。。
: 好吧,我承认我弱。
:
: +z

c******o
发帖数: 1277
16
这个我没用,不过所有的java AOP framework scala都能用吧?都是一样的byte code
我知道有人用 Spring/Scala 的。
查了一下
AspectWerkz/AspectJ/Spring AOP
都有人和scala一起用,没什么问题。

【在 z****e 的大作中提到】
: 实际上作为一个aop的爱好者来说
: 我很讨厌看到代码里面出现debug.log这种东西
: 哪怕是一行我都不喜欢看到
: fp这点上比oop差了不少,oop要做aop很容易
: 切面本身通过flow可以直观理解
: fp我连切都不知道怎么切进去
:
: +z

g*****g
发帖数: 34805
17
lamdba好多都是一行的函数,调试起来老费劲了。

【在 c******o 的大作中提到】
: 可以步进。。
: 在传入函数里做断点,就可以步进了。

z****e
发帖数: 54598
18
aop最常见的就是拦截方法的调用
然后获取方法传入的参数,然后存到log里面去,以备将来查询
举个例子,假设for也是一个函数
那么当我for(int i:list)的时候,切面设在这里,然后把list拦截到
放到log里面去,我将来查log时候就可以看到list里面是什么
你的while里面只有i,我拦截了有什么意义?只能看到size

code

【在 c******o 的大作中提到】
: 这个我没用,不过所有的java AOP framework scala都能用吧?都是一样的byte code
: 我知道有人用 Spring/Scala 的。
: 查了一下
: AspectWerkz/AspectJ/Spring AOP
: 都有人和scala一起用,没什么问题。

q*c
发帖数: 9453
19
我发现一个问题, 就是吹嘘 FP 的同修, 经常举例的时候 FP 那是怎么精炼怎么写
, OO 那是怎么难看怎么写。
甚至还有拿 scala built in permutation 的函数对比 java 手动实现一个类似函数,
然后来比较两者程序长度的。
比较程序长度本来就无聊, 还这么比 就有点恶心了。

【在 z****e 的大作中提到】
: int sum=0;
: for(int i:list) sum+=i;
: return sum;

1 (共1页)
进入Programming版参与讨论
相关主题
10个数所有的组对可能, 怎么解?scala和monad
Java 不是纯oo, oo 不是 imperative programmingscala future之间通信有什么好办法吗?
求scala入门Scala的map和flatmap什么区别?
scala for impatient 还是 Programming in Scala 作为第一部书学习好?scala写个loop老难了
storm俨然是下一个冉冉升起的新星啊这次Clojure把Scala给干了
大牛给讲讲monad吧?aspect programing 就是 functional programing吗?
看来跳了Scala的坑是对的why Scala is terrible
Scala的思路现在谈paradigm过时了
相关话题的讨论汇总
话题: fp话题: procedural话题: sum话题: int