d******e 发帖数: 2265 | 1 在读一个java8的proj.简直要抓狂了。
所有的code都是函数式的。builder被传来传去。加上没有case class.
简直是灾难啊。
看来java到头了。基本上java 7就够了。否则转scala. |
d******e 发帖数: 2265 | 2 来一段:
listReuqest.ifPresent(lr -> {blah})
你又不是函数式chaining结果,就要个side effiect.
不能好好的写
if (listRequest){
blah
}
吗。
都省了定义optional了。 |
d******e 发帖数: 2265 | 3 顺便问一嘴,现在写java有没有超过effecitve java的东西?
好久不写java了 |
z****e 发帖数: 54598 | 4 本来就不是纯fp
你非要按照fp那一套写
难怪会出问题
lambda主要是用来对付annoymous class时候用的
谁让你什么都写成fp
pure functional就是一灾难
有多少人能把side effect弄清楚的? |
z****e 发帖数: 54598 | 5 java的边界不是function
是class,所以只要没有跑出class之外
都是无side effect的
然后按照actor model,用vert.x就可以保证没有side effect
只有fp那种苛刻的要求才会要求你不准用状态
java经过vert.x等优化之后,没有这个要求
这是好事,别不习惯 |
z****e 发帖数: 54598 | 6 俺只有在spring的时候,不敢随便用状态
用了vert.x之后,状态随便传,不传对不起自己
各种省内存 |
e***i 发帖数: 231 | 7 言过了吧
【在 d******e 的大作中提到】 : 在读一个java8的proj.简直要抓狂了。 : 所有的code都是函数式的。builder被传来传去。加上没有case class. : 简直是灾难啊。 : 看来java到头了。基本上java 7就够了。否则转scala.
|
z****e 发帖数: 54598 | 8 java关于并发的控制,从ejb开始
一直都是冲着class为边界去的
fp那种要求,一直在java世界里面被认为是太苛刻
ejb比fp要爽不少
ejb后来失败了,主要是因为配置太麻烦
各种xml
现在有了vert.x之后就不一样了 |
x***4 发帖数: 1815 | 9 java8的lambda主要是语法糖,不要真是按fp的思考模式写java8。
如果想用fp用得爽,你要保证用immutable data才行。
【在 d******e 的大作中提到】 : 来一段: : listReuqest.ifPresent(lr -> {blah}) : 你又不是函数式chaining结果,就要个side effiect. : 不能好好的写 : if (listRequest){ : blah : } : 吗。 : 都省了定义optional了。
|
z****e 发帖数: 54598 | 10
然,java还是oop
纯粹的fp根本不应该用java
适得其反
java本质上是不赞同fp那种搞法的
全部封装到function这个level中去的话
各种折腾少不了,side effect这些,很多人搞不明白
oop则比较容易被大众所接受
【在 x***4 的大作中提到】 : java8的lambda主要是语法糖,不要真是按fp的思考模式写java8。 : 如果想用fp用得爽,你要保证用immutable data才行。
|
|
|
T*******x 发帖数: 8565 | 11 这个有道理。
【在 z****e 的大作中提到】 : java的边界不是function : 是class,所以只要没有跑出class之外 : 都是无side effect的 : 然后按照actor model,用vert.x就可以保证没有side effect : 只有fp那种苛刻的要求才会要求你不准用状态 : java经过vert.x等优化之后,没有这个要求 : 这是好事,别不习惯
|
C*******n 发帖数: 193 | |
c*********e 发帖数: 16335 | 13 现在spring, vert.x哪个更流行?
【在 z****e 的大作中提到】 : java关于并发的控制,从ejb开始 : 一直都是冲着class为边界去的 : fp那种要求,一直在java世界里面被认为是太苛刻 : ejb比fp要爽不少 : ejb后来失败了,主要是因为配置太麻烦 : 各种xml : 现在有了vert.x之后就不一样了
|
c*********e 发帖数: 16335 | 14 scala更会让你抓狂,仿佛回到遥远的过去用perl的时代。
【在 d******e 的大作中提到】 : 在读一个java8的proj.简直要抓狂了。 : 所有的code都是函数式的。builder被传来传去。加上没有case class. : 简直是灾难啊。 : 看来java到头了。基本上java 7就够了。否则转scala.
|
n******7 发帖数: 12463 | 15 我一直不太清楚 lambda到底是啥
看介绍都是长篇大论,甚至一本书
但是java8里面用起来
好像就是写匿名函数简洁一点的效果?
【在 x***4 的大作中提到】 : java8的lambda主要是语法糖,不要真是按fp的思考模式写java8。 : 如果想用fp用得爽,你要保证用immutable data才行。
|
Y**G 发帖数: 1089 | 16 把值传给那个consumer不是省掉了吗?不是很简洁吗。
https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html#ifPresent-
java.util.function.Consumer-
【在 d******e 的大作中提到】 : 来一段: : listReuqest.ifPresent(lr -> {blah}) : 你又不是函数式chaining结果,就要个side effiect. : 不能好好的写 : if (listRequest){ : blah : } : 吗。 : 都省了定义optional了。
|
z****e 发帖数: 54598 | 17
匿名方法
就是当你临时想马上定义一个方法
然后只在这里用,用完就不再需要的时候
就需要用到匿名方法
java以前不支持匿名方法
必需要在匿名方法外面套上一层class
这就是所谓的匿名类
所以java8主要就是用来简化这个用的
说成一本书主要是因为func这个是fp的基础
所以关于func的定义什么都需要扩展
所以就说成了一本书
如果是java的话,可以不用鸟这些东东
【在 n******7 的大作中提到】 : 我一直不太清楚 lambda到底是啥 : 看介绍都是长篇大论,甚至一本书 : 但是java8里面用起来 : 好像就是写匿名函数简洁一点的效果?
|
c*********e 发帖数: 16335 | 18 c#里面很多lambda, linq
var values = new List() { 7, 13, 4, 9, 3 };
// Map the anonymous function over all elements in the list, return the new
list
var foo = values.ConvertAll(d => d*d) ;
【在 n******7 的大作中提到】 : 我一直不太清楚 lambda到底是啥 : 看介绍都是长篇大论,甚至一本书 : 但是java8里面用起来 : 好像就是写匿名函数简洁一点的效果?
|
x***4 发帖数: 1815 | 19 正解
【在 z****e 的大作中提到】 : : 匿名方法 : 就是当你临时想马上定义一个方法 : 然后只在这里用,用完就不再需要的时候 : 就需要用到匿名方法 : java以前不支持匿名方法 : 必需要在匿名方法外面套上一层class : 这就是所谓的匿名类 : 所以java8主要就是用来简化这个用的 : 说成一本书主要是因为func这个是fp的基础
|
d******e 发帖数: 2265 | 20 scala用的好好的。新项目看了java 8才要疯掉。
关键是:
要么你fp,要么你oop.两个浇在一起,项目很可能嗝屁。
另外就是看了一下原作者,毕业两年多。貌似拿这个项目联系各种design pattern玩。
各种over engieering.
【在 c*********e 的大作中提到】 : scala更会让你抓狂,仿佛回到遥远的过去用perl的时代。
|
|
|
n******7 发帖数: 12463 | 21 这跟java8基本一样
就是匿名函数写的方便点
new
【在 c*********e 的大作中提到】 : c#里面很多lambda, linq : var values = new List() { 7, 13, 4, 9, 3 }; : // Map the anonymous function over all elements in the list, return the new : list : var foo = values.ConvertAll(d => d*d) ;
|
n******7 发帖数: 12463 | 22 那这也不怪java8了
本来灵活性被滥用了就是灾难
前几天有人读python code不也吐血了
都是为了用某个feature霸王硬上弓
【在 d******e 的大作中提到】 : scala用的好好的。新项目看了java 8才要疯掉。 : 关键是: : 要么你fp,要么你oop.两个浇在一起,项目很可能嗝屁。 : 另外就是看了一下原作者,毕业两年多。貌似拿这个项目联系各种design pattern玩。 : 各种over engieering.
|
S***k 发帖数: 370 | 23 java's lambda is not nice and "nature" as c#.
if using java, it could looks like:
values.Stream()
.map(d->d*d)
.collect(Collectors.toList())
to be honest, I don't think this is better than for loop from any aspects.
The parallel is another funny one.
in c#, we just say Parallel.ForEach(value, v=>{blalala});
in java: values.parallelStream().map(blah).flatMap(List::Stream)
And, c# async is easier to use than java. I am still not sure if java's
async could work well because it is implemented using threading.
Anyway, I agree with "java 8就是一坨屎".
new
【在 c*********e 的大作中提到】 : c#里面很多lambda, linq : var values = new List() { 7, 13, 4, 9, 3 }; : // Map the anonymous function over all elements in the list, return the new : list : var foo = values.ConvertAll(d => d*d) ;
|
z****e 发帖数: 54598 | 24 all u need is rxjava
then u can do sth. like .map(d -> d*d)
and forEach(v->{blablabla});
this is just a way to pass in function as a parameter
how stupid u r to think this is impossible for java
u can even impl. this by urself rather than using rxjava
as long as u have lambda & reflection
besides, for async part, u should know java.nio
which have been impl.ed in 1.4 many years ago
if u wanna a sync way to write async code
u need javaagent and for framework quosar would be the answer
【在 S***k 的大作中提到】 : java's lambda is not nice and "nature" as c#. : if using java, it could looks like: : values.Stream() : .map(d->d*d) : .collect(Collectors.toList()) : to be honest, I don't think this is better than for loop from any aspects. : The parallel is another funny one. : in c#, we just say Parallel.ForEach(value, v=>{blalala}); : in java: values.parallelStream().map(blah).flatMap(List::Stream) : And, c# async is easier to use than java. I am still not sure if java's
|
z****e 发帖数: 54598 | 25 here is a simple example of rx.map
Observable.from("item1")
.map((str1)->{
System.out.println("insde the map " + str1);
return str1;
})
.subscribe(System.out::println);
u can see str1 -> {blablabla} |
z****e 发帖数: 54598 | 26 compared to for loop
how to use for loop in the streaming?
u dont even know the border of the stream/loop
u need a listener rather than a loop
reactive rather than active
reactive is not for zhuangbi
is used for solving problems
especially for those streaming industry like Netflix
if u can use for loop then plez use for loop
do not use forEach which should only be used in streaming api
and i personally believe for loop is enough for batch api
u dont need streaming for batch like db/file system crud operations
except the dataset is extremely large then u may need streaming
otherwise, just use for loop, make other ppl's life a lot easier
too many zhuangbi -ers |
S***k 发帖数: 370 | 27 simple example? How many "." there. lol
【在 z****e 的大作中提到】 : here is a simple example of rx.map : Observable.from("item1") : .map((str1)->{ : System.out.println("insde the map " + str1); : return str1; : }) : .subscribe(System.out::println); : u can see str1 -> {blablabla}
|
S***k 发帖数: 370 | 28 impl?? this is another sample of "java 就是一坨屎"
【在 z****e 的大作中提到】 : all u need is rxjava : then u can do sth. like .map(d -> d*d) : and forEach(v->{blablabla}); : this is just a way to pass in function as a parameter : how stupid u r to think this is impossible for java : u can even impl. this by urself rather than using rxjava : as long as u have lambda & reflection : besides, for async part, u should know java.nio : which have been impl.ed in 1.4 many years ago : if u wanna a sync way to write async code
|
z****e 发帖数: 54598 | 29
u can import static if u want
i dont think . has problems since this part is usually written by IDE
【在 S***k 的大作中提到】 : simple example? How many "." there. lol
|
z****e 发帖数: 54598 | 30
lol
gotta admit that
DOTNET is really suitable for those ppl who do not have a brain
【在 S***k 的大作中提到】 : impl?? this is another sample of "java 就是一坨屎"
|
|
|
S***k 发帖数: 370 | 31 Whoops do you need a bandage for your tail
【在 z****e 的大作中提到】 : : lol : gotta admit that : DOTNET is really suitable for those ppl who do not have a brain
|
S***k 发帖数: 370 | 32 I agree with this.
【在 z****e 的大作中提到】 : compared to for loop : how to use for loop in the streaming? : u dont even know the border of the stream/loop : u need a listener rather than a loop : reactive rather than active : reactive is not for zhuangbi : is used for solving problems : especially for those streaming industry like Netflix : if u can use for loop then plez use for loop : do not use forEach which should only be used in streaming api
|
z****e 发帖数: 54598 | 33
u just lazy
【在 S***k 的大作中提到】 : Whoops do you need a bandage for your tail
|
d******e 发帖数: 2265 | 34 推荐读读
http://www.slideshare.net/ScottWlaschin/fp-patterns-ndc-london2
java 8根本思路就是错的。本来就是给笨蛋烙印用的,管的死死的。
加上fp就4不象了。开始想C++发展了。
【在 n******7 的大作中提到】 : 那这也不怪java8了 : 本来灵活性被滥用了就是灾难 : 前几天有人读python code不也吐血了 : 都是为了用某个feature霸王硬上弓
|
z****e 发帖数: 54598 | 35
for fp
when start writing codes, u have to know these
state, immutable, side effect
u have been "管的死死的"ed already
i do agree some times patterns r 八股
but compared to monad
oop patterns r far more easier
【在 d******e 的大作中提到】 : 推荐读读 : http://www.slideshare.net/ScottWlaschin/fp-patterns-ndc-london2 : java 8根本思路就是错的。本来就是给笨蛋烙印用的,管的死死的。 : 加上fp就4不象了。开始想C++发展了。
|
g*****g 发帖数: 34805 | 36 Java 8的思路是正确的,就是一个语法糖而已。真要 FP去用 Scala好了。
【在 d******e 的大作中提到】 : 推荐读读 : http://www.slideshare.net/ScottWlaschin/fp-patterns-ndc-london2 : java 8根本思路就是错的。本来就是给笨蛋烙印用的,管的死死的。 : 加上fp就4不象了。开始想C++发展了。
|
H****S 发帖数: 1359 | 37 没有immutable data structure,过多lambda在一起确实是灾难。想要更多compile
time safety,不怕折腾,就上Scala。否则没有必要让一个纯OO语言折腾这些东西。
【在 d******e 的大作中提到】 : 在读一个java8的proj.简直要抓狂了。 : 所有的code都是函数式的。builder被传来传去。加上没有case class. : 简直是灾难啊。 : 看来java到头了。基本上java 7就够了。否则转scala.
|
l******t 发帖数: 55733 | 38 真正理解了monad大概就算可以实战了
【在 n******7 的大作中提到】 : 我一直不太清楚 lambda到底是啥 : 看介绍都是长篇大论,甚至一本书 : 但是java8里面用起来 : 好像就是写匿名函数简洁一点的效果?
|