t*******h 发帖数: 2882 | |
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循环要常用
|
|
|
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;
|