真是,两年没写 Java 了,之前写了两礼拜 Java 没给我急死,手速远远跟不上脑子的速度。。。 但是看看社区,有一种不温不火的感觉呢,慌······
102
sagaxu 2020-07-13 22:37:06 +08:00 via Android
@wysnylc 不是用协程重写提升了性能,是用异步把线程数降低了几个数量级,大大提升了性能,后来再用协程提升了可维护性。重构第二版的时候,就没协程什么事,netty 和 vertx 是久经考验的,而此时 Kotlin 协程几乎没有成功案例,甚至没有听说过有谁用过,当然没有考虑使用。之后逐步尝试观察一段时间之后,才全面使用,性能跟 future 差不多,只是为了写起来轻松一点。
|
103
hantsy 2020-07-13 22:42:56 +08:00
@sagaxu 个人感觉只是 Coroutines 写起来直白一点,对于传统的熟悉同步的开发人员容易理解 。性能嘛,没测试,也没过比较与 reactor 的原生的 Mono, Flux 有什么差别。从我眼里,还是 Mono,Flux 比较舒服。
|
104
hantsy 2020-07-13 22:44:57 +08:00
Spring Boot 现在通过 Starter 创建的项目,一开始就加入了 Kotlin Coroutines 依赖,Spring 内部只要是 Kotlin,Reactor 相关基本上全面支持 Coroutines 了。
|
105
Mistwave 2020-07-13 22:47:19 +08:00 1
@hantsy 想把 Scala 学透再去应用就太难了,这门语言夹杂了太多前沿东西。边学边用吧,走 FP 路线的看看 cats zio ;走 better java 路线的就 akka-http akka-stream play 搞起来;想快速上手就看看 lihaoyi 的项目和代码;大数据线路的就不赘述了。
能提升生产力固然好,开阔眼界也不赖嘛。 Scala 3 ( Dotty )已经在路上了,implicit 也被简化掉了,泛型这个东西,是得花点时间啃一下。 另外,那本 fpinscala 小红书太太太难了,推荐先看 scala with cats |
106
yuenc 2020-07-13 22:47:35 +08:00
我前端,写 kotlin 跟写 ts 一样,爽
|
107
hyyou2010 2020-07-13 22:53:01 +08:00
我则经常把 kotlin 跟 ts 写混,晕
|
109
iseki OP |
110
lloovve 2020-07-13 23:08:26 +08:00 via iPhone
@kingslayer 还不一样
|
111
aureole999 2020-07-13 23:31:42 +08:00
我们现在后端新项目已经全用 kt+spring 了。挺好用的,就是 spring 要注意一点,kt 默认都是 final 的类,要用到 allopen 插件。有些持久化的 data 类要用 noarg 。其它都很爽啊,不需要这 stream 那 stream 的了。还有 non-null 类型,业务上的逻辑很清晰,不像 java 在这判断一下,那判断一下,还容易漏。
|
112
hantsy 2020-07-13 23:37:00 +08:00
@aureole999 如果是由 Spring Boot Starter 生成的,官方有插件解决这些 Spring 中的问题,不用关心,但 Jetbrains 文档中手动是你这么配置的。
|
114
secondwtq 2020-07-14 01:40:34 +08:00
我强调过 N 遍了,“火不火”和“好不好”完全是两个不相关的问题( https://www.v2ex.com/t/636465#r_8459702 )。
倒不如说,强行把“火不火”和“好不好”关联起来会造成很多问题。 |
115
CosimoZi 2020-07-14 02:23:19 +08:00
学 scala 最好要有一点 pl 背景
|
116
qinfensky 2020-07-14 02:24:41 +08:00
Kotlin + Vert.x 舒坦
|
117
gantleman 2020-07-14 03:11:17 +08:00
@iseki Java 的流行是因为 jvm 的性能仅次于 C 。以及内存的多线程保护和回收策略,这样 java 不会出现内存崩溃。放弃现在的代码做迁移,仅仅因为语法更加流畅。这个成本任何公司和团队都不会做的。
|
118
dayeye2006199 2020-07-14 04:02:16 +08:00
主要的锅可能是你们公司用的 JDK 还是 8 。。。
|
119
chihiro2014 2020-07-14 04:22:25 +08:00
用 Java 就够了,kt 没啥前途可言啊,毕竟最后都是走 JVM 有啥区别。
而且 JDK9 之后,Java 大变。没必要以以前的眼光来看待了 |
120
chihiro2014 2020-07-14 04:24:46 +08:00
@iseki 说起协程,Go 里面的协程跟 Java 的单线程线程池没啥区别
|
121
cs419 2020-07-14 06:52:03 +08:00
@hantsy
刚学 scala 的 implicit 很别扭, 有种莫名其妙的感觉 后来想通了 可以看成 java 中的 int long 的自动装箱拆箱 这样一对比 就感觉合理多了 协变 逆变 让人晕乎乎的 这东西 java kotlin scala 都有 泛型还是别强求深入 能简单调库就成 map fold 啥的 会用不难吧 真到你重构框架 做抽象封装的时候自然就能整明白了 |
122
DiamondY 2020-07-14 08:33:01 +08:00 1
优雅有个卵用
|
123
lblblong 2020-07-14 08:35:27 +08:00 via Android
kotlin 是真的好,个人最喜欢就是 ts 和 kt
|
124
lblblong 2020-07-14 08:36:18 +08:00 via Android
kotlin 确实好,个人最喜欢的就是 ts 和 kt
|
125
namelosw 2020-07-14 08:37:03 +08:00 2
Haskell / Scheme: 你说啥?优雅?为什么不火?
|
126
jorneyr 2020-07-14 08:40:53 +08:00
写小的程序是很优雅,但是对于中大型项目来说,便于项目管理才是更关键的,Java 无疑可以做到相对平衡。
技巧在项目管理中是很不受人喜欢的。 |
127
sagaxu 2020-07-14 09:10:35 +08:00 via Android 1
@hantsy 可以.then 一路写到底的场景,coroutine 的确优势不大,但这种简单逻辑只有 demo 里有。实际逻辑可能是
for(){ a=func1() for(a...){ b=func4(a) if(b) func2(b) else func3(a) } } func 都是 IO 型的,future 方案需要自行保存和恢复 context,麻烦的可不是一点点了,中途抛 exception,调用栈能不能跟同步阻塞写法一样直观呢? |
129
sunziren 2020-07-14 09:18:06 +08:00
优雅有个卵用
|
130
BigDogWang 2020-07-14 09:21:34 +08:00
问个问题,如果 kt 里同时要判两个变量的 null,是不是要嵌套 let ?
|
131
bibsbx 2020-07-14 09:34:14 +08:00
各位用 kotlin 的,Checked Exception 你们是怎么解决的
|
133
nicevar 2020-07-14 09:37:36 +08:00
我自己的几个项目几乎全用 Kotlin 写的,公司的项目用 Java,说实话 Kotlin 除了那点语法糖之外,并不比 Java 强多少,我都觉得论优雅还不及 Java,而且现在最近几年出来的语言都有一些通病,就是小版本的升级都有可能造成之前的代码编译不过去,比如 Kotlin 升级到 1.3.72 ,好好的项目一堆错误,这多多少少会影响使用者的心情,虽然 JetBrains 很强,但是 Kotlin 估计随着 Android 的死去也没多大风浪了
|
134
no1xsyzy 2020-07-14 09:41:48 +08:00
@secondwtq #114 同意啊
不然你要什么语法,Racket 都可以给你做出来。而且自带 First-class continuation,自己动手实现个 Coroutine 也就是分分钟的事。用了 ChezScheme,编译效率和编译结果的执行效率也是非常高的。 |
135
wupher 2020-07-14 09:42:53 +08:00
因为做技术决策的人不是你啊。
|
136
sagaxu 2020-07-14 09:47:02 +08:00 via Android
|
137
kkurs 2020-07-14 09:49:45 +08:00
kotlin 已经是 jvm 上除 Java 外占有率最高的语言了,这还不算火的话 scala 和 Clojure 都不用玩了
|
138
bage2020 2020-07-14 09:55:43 +08:00
KOTLIN ke du xin 太差
|
139
wee911 2020-07-14 09:57:43 +08:00
写的这么好怎么会火呢, 越垃圾的越火
|
140
takemeaway 2020-07-14 10:01:35 +08:00
金锄头,银锄头,铜锄头,铁锄头,都是锄头。
|
141
PhpBestRubbish 2020-07-14 10:08:52 +08:00
优雅有什么用
C#那么好用,有几家公司用? |
144
KuroNekoFan 2020-07-14 10:14:40 +08:00
有特性不是充分必要条件,人想不想用才是
|
145
janxin 2020-07-14 10:15:28 +08:00
kotlin 不火是有原因的,因为没有培训班
|
146
sharpy 2020-07-14 10:26:02 +08:00
要说这些新语言的,我看好 Rust 的发展,在项目里也用上了,写起来真是神清气爽
|
147
cco 2020-07-14 10:27:33 +08:00
以后发展几十年,没准就天下大同了。一门 Java 足以研究半辈子了。后半本子还要研究送外卖的路线。
|
148
chanchan 2020-07-14 10:32:51 +08:00
优雅的语言多了取了,轮不到 kotlin
|
149
azhangbing 2020-07-14 11:09:04 +08:00
kt 大多数只是写法优雅而已,语法糖确实挺爽的,但没有根本性的变化(不要说 kt 的协程,em....不是真正的协程) ,不像是 flutter 有革命性的变化的
|
150
SheHuannn 2020-07-14 11:13:02 +08:00
目前主要是写 Android 的用 Kotlin,而且段时间内并不能带来明显的收益
|
151
CoderGeek 2020-07-14 11:35:20 +08:00
flutter 够用 社区不给力 需要文化推广
|
152
GM 2020-07-14 11:39:58 +08:00
个人感觉语法糖太多了。
|
153
iseki OP @wysnylc 是指 Kotlin 里的 ?. ?: 操作吗? Java 里确实没有对标的东西是我万万没想到的…连 js 里都有了…别跟我说 Optional
|
156
glovebx 2020-07-14 13:14:46 +08:00
Kotlin 谁用谁知道,爽的不得了
|
157
hantsy 2020-07-14 13:19:39 +08:00
@bage2020 可读性我感觉和习惯有很大关系,习惯就好了,开始迁移到 Java 8 API 的时候,Labmda,Method Reference 都是不习惯的。Kotlin 也还好,与 Java 兼容性很好,完全开始可以以 Class 为中心来写。
|
158
xuewuchen 2020-07-14 13:25:19 +08:00
JAVA 的代码风格不适合我,我比较喜欢 python 这中类型的代码风格或者是 pascal 这种风格
|
159
hantsy 2020-07-14 13:29:02 +08:00
@xuewuchen Python,CoffeeScript 这种真受不了,一不小心还以为自己在写 Yaml,老想着缩进对齐。
|
160
xcstream 2020-07-14 13:32:34 +08:00
要和 c 语言长得像才容易上手
|
161
winglight2016 2020-07-14 13:45:32 +08:00
@wwlzz #79 这一点我倒是可以理解:很多开源项目的积极贡献者都是从 M¥垄断的年代过来的,已经习惯了看到 M¥
就反对,根本不会去碰微软系的产品——那个年代的微软产品真的是铁桶一般,现在大约只是换成木桶的程度。 |
162
lengyihan 2020-07-14 13:59:15 +08:00 via Android
可参考 python 还是八十年代的语言呢,这几年才火。
|
163
whyrookie 2020-07-14 14:12:00 +08:00
Android, 主力使用 kotlin 开发
|
164
taoprogramer 2020-07-14 14:24:35 +08:00
工作主力用 java,平时写工具和刷题用 kotlin,真的香。
|
165
zorui 2020-07-14 14:47:53 +08:00
同问 Clojure 这么优雅的语言为什么不火呢
|
166
jin7 2020-07-14 15:02:51 +08:00
没觉得他哪里优雅了
java 新版本语法糖也越来越多 |
167
winterbells 2020-07-14 16:27:02 +08:00 via Android
@BigDogWang 我们是单独写了 N 个方法,判断 N 个变量同时不为空。。。
|
168
pdog18 2020-07-14 16:34:45 +08:00
@tctc4869 「 android 的 MVVM 居然要等到 3.6 版本才支持」老铁这句话怎么说? MVVM 为什么要等到 3.6 ?
|
169
shijingshijing 2020-07-14 16:37:52 +08:00
C#默默不语
|
171
lxk11153 2020-07-14 17:32:40 +08:00
@lengyihan #162 wiki 上写: python 发行时间 1991 年,java 发行时间 1995 年
|
172
tctc4869 2020-07-14 17:32:45 +08:00
@iseki 初学者学 Kotlin,有些 Kotlin 特性不了解,大部分写 java 代码开发,或者说是用 java 的组件,比如 java 那边的集合和 map 等。这些合适么?
|
173
leonme 2020-07-14 21:20:31 +08:00 via iPhone
相比 groovy 呢?
|
174
crclz 2020-07-15 08:33:17 +08:00
async/await+TAP 是 c#的,Linq 是 C#的,ReactiveX 是 c#的,并且和 Linq 完美集成。c#为啥不火呢?
|
175
iseki OP @tctc4869 其实那些东西底层就是 Java 的那套啊…kotlin 对 collection 的功能也都大多是扩展函数实现的,无影响基本上(反射时需要小心一点
|
177
KentY 2020-07-16 22:09:54 +08:00
我们(主要是后端)新的服务, 项目一多半都用 kotlin + springboot 了.
个别的有用 quarkus 的. |
178
Kamiyu0087 2020-07-17 12:19:17 +08:00
个人体会,Kotlin 挺好的,
不过有一点不如 Java 的地方是 try with resource Java 可以 try ( InputStream input = ...; OutputStream output = ...; ) { // logic } catch (IOException e) { } Kotlin 只能单个对象使用 use val input: InputStream = ... input.use { // logic } 这个时候还有其他 Closeable 对象要一起用的话就比较尴尬了 不知道有没有办法解决? |
179
iseki OP @Kamiyu0087 官方似乎没有?自己造一个吧( x
|
180
aguesuka 2020-09-28 23:32:36 +08:00
|
181
Cabana 2021-07-05 09:22:31 +08:00 via iPhone
@azhangbing 请问什么才是真正的协程🤪
|