1
hingbong 2022-07-14 22:45:11 +08:00 via Android
学 rust 的时候,最想要的就是这个,kotlin 想了很多办法也没能实现类似的东西,这个真好啊
|
2
TWorldIsNButThis OP @hingbong kotlin 主要是 when 比较残废,没有解构声明的功能,sealed class 倒是很早就有了
|
3
Cbdy 2022-07-14 23:00:14 +08:00 via Android
很合理
|
4
luob 2022-07-15 04:23:24 +08:00
不是所有程序员都跟前端一样天天盯着标准看今年更新了什么语法,尤其是 javaer
不过 javaer 也不用灰心,今年或明年可能会有某个重量级选手把 ADT 炒到 能让你不懂技术的老板都来过问一下你们的业务语言支不支持完整的 ADT 和 pattern match 的地步,开个玩笑( |
5
chendy 2022-07-15 07:52:19 +08:00
说到 var ,多年前曾经在项目里大规模使用过 lombok 的 val
结果就是吧,看自己的代码还好,看别人写的就经常要点一下方法声明看看返回类型是啥,就有一种“使用方不需要关心类型但是又得知道啥类型”的感觉。优不优雅不好说,确实多了点麻烦 |
6
kilasuelika 2022-07-15 08:24:33 +08:00 via Android
DOP 跟函数式编程没有必然的联系。
我以前在 Mathematica 上用过函数式编程。感觉就是写起来爽,但性能不太行,占用的内存也高,这个也很容易理解,函数式编程推崇不可变数据,必然要用额外的空间存储。debug 也有点难,有时候 map 一下,出错了也不知道是在哪个输入上出错。 被折磨了一段时间后就不用了。 |
8
Mithril 2022-07-15 09:06:54 +08:00
建议看看这个帖子 https://v2ex.com/t/865425 里面的 Javaer 都是怎么说的。。。
随便你怎么吹出花来,坚持 Version 8 一百年不动摇。 |
9
TWorldIsNButThis OP @kilasuelika Mathematica 不是静态类型的语言
@chendy ide 的 inlay hint 不开吗 @Mithril 这个升不升,其实国内这些程序员的话语分量是最少的,springboot3 出来以后 2 不会维护很长时间 |
10
chendy 2022-07-15 10:44:09 +08:00
@TWorldIsNButThis 开 hint 还不如直接吧类型写上……
|
11
clcy1243 2022-07-15 11:35:23 +08:00 via iPhone
这就是我为什么不愿意做 java ,从 19 年应公司要求转组之后开始接触 java ,发现越是老 java ,越不愿意走出自己的舒适圈,语言、框架、组件的新版本新特性都不去看不去学,也不去看新出的组件和框架,一直抱着自己老旧的工具类自以为高效通用还洋洋得意,却不知道自己即将被时代抛弃。
我从最开始接触 java ,就找怎么减少繁杂且无用的工作,开始用 lombok 的注解和 var val ,开始用 localdatetime ,开始用 stream ,为了迁就公司的 mybatis 技术栈开始是自己写 generator 配置,然后自己做插件,再之后学习 mybatis-dynamic-sql 组件,反观老 java ,19 年和现在毫无变化,每次提新的东西就是学习成本以及老项目,从来不说能提升多少效率。 我唯一能想到的他们不愿意学的原因就是学习耽误摸鱼,而且用新东西不能复制老代码,出了错自己没见过不知道怎么查,对这种人就很厌烦,不愿意学习做什么技术,所有的技术工种都是要持续学习持续进步的,因为技术在不断发展,你不进步就只能停留在这个时代,运气好转了管理可能还能继续工作,运气不好被裁了就再也进不去技术岗位。 |
12
aguesuka 2022-07-15 11:36:41 +08:00
undecidable 的 adt 没有灵魂.
@kilasuelika 下一个 10 年, 函数式编程中的性能问题"有望"通过 Cost-Aware Type Theory 这样的东西(但不是 CATT 本身)解决. @TWorldIsNButThis kotlin 的 sealed class 之前也是个残废, 因为 jdk 的原因只支持抽象类不支持接口, 而且好像 jetbrains 不把它挡回事. |
13
TWorldIsNButThis OP @aguesuka 当时 java 引入了 sealed 以后 kotlin 好像跟着就出 sealed interface 了
kotlin 的饼画的太大,感觉人手不是很够用的样子 |
14
cs419 2022-07-15 15:40:29 +08:00
类型匹配 解构 scala 中就有
先是 scala 语法比较激进 上手难度大 后来出了 kotlin 语法糖相较 java 与 scala 算是个折中 |
15
partystart 2022-07-15 17:43:34 +08:00
我是真的不理解使用 var 的意义是什么?
从看代码的角度 ,基本上都是从左到右扫描 用 var 的话 我还需要看到右边的代码. 尤其是看到 for (var item: list) { out.prinltn("name:" + item) } 看到这种就操蛋了, 我还需要去查看 lis 里面 item 是什么类型 脱裤子放屁? |
16
jameslan 2022-07-16 05:28:20 +08:00 via iPad
@partystart 您这 list 的命名也是没谁了
|
17
huihuimoe 2022-07-18 04:54:00 +08:00
@partystart 我也真的不理解为什么不使用 var 。
首先正常人不会写出这样的代码,写出这样代码的 CR 直接就被批了好吗? 正常的代码应该变量名是能体现其作用的。 再者 // for (Person person: personList) { for (var person: personList) { log.info("person: {}", person); } 您看这样的代码,按您的说法,写 Person person ,从左到右扫描,读了两次 person ,表明 person 是个 person ,那不就是脱裤子放屁吗? |
18
partystart 2022-07-18 10:01:20 +08:00
@huihuimoe
1. for (Person person: personList) 循环 list ,看左边的类型不就可以知道 list 里面的类型了 。从左到右为啥要读两次? 2. for (var person: personList) 如果你需要了解 list 里面的元素是什么类型 你怎么办 ?操纵光标放 list 上? command + click 点击? 3. 字段名只代表它叫什么,不代表它的类型是什么 ?看到 personList 这个名字就代表 Person ? |
19
aguesuka 2022-07-20 15:33:07 +08:00
@partystart eclipse 没有 type hints 吗? 为什么用 var 的原因很简单, 因为显式的类型声明在语法树上是有副作用的:
``` Object wrap = new Object(){ } ``` |
20
aguesuka 2022-07-20 15:37:09 +08:00
上段没打完发了,
``` Object wrap = new Object(){ int value = 0 } ``` 如果是 var 的话那么可以 wrap.value. 当然很多时候我们不需要这个特性, 这里只是展示一下这个副作用, 这种副作用应该是要尽量避免的. |
21
ychost 2022-07-21 22:13:01 +08:00
@partystart 别老盯着 Java ,建议看下 C#/Node/PHP 等等,起始像 C# 我认为就设计的挺优秀的,里面清一色的 var ,一般看代码都是有 IDE 的,IDE 会直接显示 var 的类型是什么,尤其是 Java 里面用到多个类型推导的时候,不写 var 还真不知道返回该怎么写,比如设计到泛型之间有关联,然后返回又是与其它泛型关联的情况
|