java9 的语法几乎没有变化

2017-06-03 18:47:09 +08:00
 zgqq

距离 java9 发布还有两个月,可惜语法居然没啥变化,现在 java 的语法糖实在太少了,写久了有点没意思啊

8460 次点击
所在节点    Java
68 条回复
srx1982
2017-06-05 10:41:07 +08:00
Kotlin 就行了
af463419014
2017-06-05 10:58:22 +08:00
当公司把一个已经开发了两年的项目交给你加新功能的时候,你才会知道,语法糖什么的一点也不好玩
bk201
2017-06-05 11:35:11 +08:00
语法糖会降低代码可读性,写起来是爽,别人看起来就会很不爽。
sagaxu
2017-06-05 12:36:07 +08:00
@af463419014 去年恰好接手了一个两年的项目,我先把 Java6 升级到 Java8,再把 spring3 升级到 spring4,然后把 maven 迁移到 gradle,最后引入 Kotlin 混合开发,除了新增文件都是 Kotlin 以外,偶尔得闲了还不忘挑一两个 Java 文件转换成 Kotlin,夹带在版本中一起测试发布,迁移还是比较平稳的。

Java 不是语法糖不足的问题,它是落后现代语言太多,不跟别的比,就跟 C#比,它的语法也显得有些老态龙中了。如果我同事 low 到连一点儿最基本的语法糖都成为障碍,我会考虑换同事,或者换工作,不会迁就培训班水平的同事。
ren2881971
2017-06-05 13:13:50 +08:00
我特么还用 1.6 呢 就算出到 12 又与我何干!
af463419014
2017-06-05 13:42:15 +08:00
@sagaxu
能接手以前的项目还玩的这么溜,你很厉害
我 kotlin 也就写了 hello world 的水平,有时间我也多写写,毕竟写了,才能更好的理解它的优点和缺点

另外语法糖成为障碍这种事应该不至于,我只是认为同一个功能,可能有多种语法糖可以实现,而大家在没有标准的情况下,可能不同风格的代码在同一个工程里,导致代码混乱(纯属猜测,没有实践,js 里这样的情况倒是很常见)
sagaxu
2017-06-05 14:21:48 +08:00
@msg7086 Python 现在也经常有人写 list/dict/set comprehension 了,偶尔还会有两层甚至三层的 comprehension,Java 不这么写,只是因为长期以来一直语法罗嗦不方便这么写,Java8 稍稍改进了一点但还是不够简洁。

我举个例子试着对比一下可读性和罗嗦之间有没有关联,先来个 Java 版的
https://gist.github.com/anonymous/b7361b54a68afe154f9a4eb01ad0e228
71 行代码,原汁原味的 getter 和 setter,sortByAgeA 和 sortByAgeB 分别用了 Java7 和 Java8 的 style,更罗嗦的 Java7 可读性更高吗?我不觉得。

再看一下 Kotlin 的写法,
https://gist.github.com/anonymous/ba398be974f1861256a5770eb33b009c
只有 13 行代码,没有 getter/setter,连 toString 都自动合成了比较理想的形式,sort 的方法太简短,以至于专门定义个方法都显得多余。

more verbose 并不能得到 more readable,两者相关,但没有因果关系,再举个例子
a = a * b 和 assign a * b to a 比,后者更 verbose,而且不会让初学者对等号产生疑惑,但它可读性如何呢?
Ouyangan
2017-06-05 18:09:09 +08:00
idea 可以自动转换成语法糖....
wangxiaoer
2017-06-08 16:49:33 +08:00
@anyele 效率?你还在纯手写吗? 纯 java 语言没有任何糖和各种符号,就一个 `.` 用于方法调用和属性引用,(箭头符号是后来的),这就意味着脑子稍微正常的读一个新的 java 项目毫无难度,就跟看小说一样,更不用提母语是英文的认了。

有些语言各种 $ & @ > >> << 乱入,真是看起来头大。
anyele
2017-06-08 17:16:09 +08:00
@wangxiaoer #49 看起来头发说明你不熟, 学习新语法不就行了?
gnaggnoyil
2017-06-11 03:16:01 +08:00
@sagaxu C++模板的 partial specialzation 你给我语法糖一个;异常和 CPS 变换你给我用 C 语法糖一个.
sagaxu
2017-06-11 10:24:21 +08:00
@gnaggnoyil 有什么软件是必须用 partial specialzation,不用就做不出来的? C 里的异常不就是用 goto 和 setjmp 做的么?语法糖无非就是少写几行代码,它不会给语言增加原来没有的能力。
sagaxu
2017-06-11 10:41:30 +08:00
@wangxiaoer 脑子稍微正常的人,学个面向大众的新语言也是毫无难度,跟看小说一样,最多几天就学会了。语法是为这门语言的用户服务的,还是为熟悉别的语言但是不愿意熟悉这门语言的其他语言用户服务的?
wangxiaoer
2017-06-11 11:37:09 +08:00
@sagaxu 人肉 parse 代码 Java 基本是 0 成本。
sagaxu
2017-06-11 15:02:35 +08:00
@wangxiaoer 你说的那是 Java <= 6,一个死守 Java 6 的人,看到 Java7 和 Java8 的新特性,也会 parse 不了的。随便举几个例子。

Java 7 的 try-with-resource 让人一愣,Java 7 的 multi-catch 会让人思考 exception 的类型顺序,
Java 8 就更多了,lambda 表达式,stream 和并行 stream,随便拿个官网例子
double average = roster
.stream()
.filter(p -> p.getGender() == Person.Sex.MALE)
.mapToInt(Person::getAge)
.average()
.getAsDouble();
不熟悉 Java 8 的人 parse 起来真的 0 成本吗?而且即将发布的 Java 9,往这个方向越走越远,简单到不学就能用的日子,已经是过去时了。
wangxiaoer
2017-06-11 18:44:28 +08:00
@sagaxu 我们生产环境在用 8 感觉 parse.起来没啥压力。
总之感觉靠着 Ide 可以闭着眼睛写 Java ,但 Python 总感觉无法下手,写起来小心翼翼
sagaxu
2017-06-11 21:10:14 +08:00
@wangxiaoer 你用 Java 8 没压力,不正好说明它增加的那些语法糖不会带来额外的人肉 parse 成本么?::和->这种新增的运算符也没那么难懂。

Python 我读起来也毫无压力,写的话除了 IDE 补全差点,重构功能弱点,其它也还好。只有 haskell 这类语言让我觉得有点阅读负担,那也只是因为我没有学过,如果我愿意学,读起来不会比 Java 费力。
zgqq
2017-06-11 21:43:25 +08:00
@sagaxu java8 的 stream,如果没有学过,根本没有读好吗,现在集合操作都是用 stream 还被同事说秀操作我特么也是醉了
zgqq
2017-06-11 21:43:56 +08:00
@sagaxu 打错,是没法读
phx13ye
2017-06-11 23:52:37 +08:00
赞“ more verbose 并不能得到 more readable ”
可读性都是建立在熟悉程度上的,觉得更可读只是自己习惯了罢了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/365710

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX