真是,两年没写 Java 了,之前写了两礼拜 Java 没给我急死,手速远远跟不上脑子的速度。。。 但是看看社区,有一种不温不火的感觉呢,慌······
1
wvitas 2020-07-13 17:14:11 +08:00
kt 才几年啊,现在用的不是挺多的么,除了 android 以为,后台有的不是已经开始用了么
|
3
dcalsky 2020-07-13 17:17:57 +08:00 via Android
用 kotlin 替代一切 java 场景的给你打打气。
|
4
wvitas 2020-07-13 17:18:55 +08:00 3
@iseki 是的,是你太着急了,什么语言也不可能快速火的,android 端 Google 都提出 kt first 了,android 端现在至少 60%+有 kt 了,后台不了解,相信不久的将来后台也会用的
|
5
iseki OP 其实 Kotlin 真的挺好的,能够比较好的帮人避开一些坑,已经好几次看到 Java 代码里有人 `==` 比较 `Long/Integer` 了 emmm
我和他说别这么写他还反应不过来原因 emmm |
6
tctc4869 2020-07-13 17:21:13 +08:00
@wvitas kotlin 服务端开发完全代替 java 可以么? kotlin 使用 java 的框架,这些推荐用什么开发 IDE ?
|
7
lloovve 2020-07-13 17:22:00 +08:00 via iPhone 1
Android 上 kotlin 还是编译 Java 吧,意义不大
|
8
iseki OP @tctc4869 写 Kotlin 代码当然推荐 IDEA,框架的话稍稍注意些就好,很多库会为 Kotlin 提供单独的包用来额外支持,记得加入
|
9
FireFoxAhri 2020-07-13 17:22:38 +08:00 via Android
Scala 开发飘过…
|
11
iseki OP @FireFoxAhri Scala 真香呢(
|
12
tctc4869 2020-07-13 17:24:26 +08:00
@iseki eclipse 不行么? IDEA 啊,感觉不放心,我想到 android studio 这个感觉很棒又感觉糟糕的东西。android 开发里用 MVVM 居然得用高版本 android studio 才行
|
13
wvitas 2020-07-13 17:24:36 +08:00
@tctc4869 完全合适,新项目完全 kt,当然有些第三库是 java,老项目也是无缝混编,写 kt 完全不想写 java
|
14
stevenlv 2020-07-13 17:24:56 +08:00
多项目大都还是 java 的,切换语言有成本。
|
15
iseki OP @tctc4869 现在,Android APP 还有用 Eclipse 开发的吗? iseki 才知道呢,另外,不曾见过身边有 JVM 生态开发者有使用 Eclipse 的呢
|
18
iseki OP 话说,Android 现在的官方一等推的 IDE 不是 Android Studio 吗 emmm
|
19
tctc4869 2020-07-13 17:30:05 +08:00
@iseki 我没用过 IDEA 开发,但我用过 android studio,这个是基于 IDEA 社区版,但是我用安卓开发的 MVVM 模型,我不知道谷歌的 android studio 设计者到底是傻还是出于什么原因,android 的 MVVM 居然要等到 3.6 版本才支持
|
20
wujieyuan 2020-07-13 17:33:39 +08:00
@tctc4869 用过你就回不去了, 你用 Eclipse 是因为你熟悉它, 而不是因为 Eclipse 比 IDEA 好, 正如 kt 比 java 写起来舒服, 但是更多人还是用 java, 因为更熟悉
|
21
chendy 2020-07-13 17:35:27 +08:00
自己有几个小项目用的 kt,唯二的感觉是编译速度比 java 慢,以及不用写分号
安卓端谷歌自己推,服务端啥时候用上 java11 都是问题 就一 crud 也玩不出啥花,用啥写都一样,用 kt 写万一遇到框架支持的问题反而闹心 |
22
glaucus 2020-07-13 17:36:16 +08:00
Java 的优点在这个时候就变成缺点了呀,需要太多框架与库适配,虽说不适配也可以用,但是还是没有全是 Kotlin 写的用起来舒服
|
23
tctc4869 2020-07-13 17:47:14 +08:00
@iseki 用 eclipse 开发 java,之所以还用,是因为 Eclipse 的几个插件把,region 折叠插件,还有换行字符串插件(不是 java13 的换行)
|
24
tctc4869 2020-07-13 17:50:48 +08:00
@iseki IDEA 有没有开发 java 的换行字符串的插件功能? java 的换行字符串,java13 虽然支持,但 13 那个版本不是长期支持的
|
26
tctc4869 2020-07-13 17:59:13 +08:00
Scala 与 kotlin 相比怎样?如果要只选一个,那么选谁?
|
28
tctc4869 2020-07-13 18:02:47 +08:00
@WebKit 那 html 的 Vue 是怎么搞起的?我用 html 开发基于 vue 的 js 程序,哪怕只用记事本都可以实现 MVVM 。还有微软的 WPF 的 MVVM 开发,只需要继承一个接口就可以,与上下文进行绑定就可以实现 MVVM 了,没有牵扯到 visual studio 的版本,MVVM 开发模式,这个应该是与 IDE 无关的啊。
|
31
viator42 2020-07-13 18:07:50 +08:00
java 能用就先用着,还得留着精力捣鼓 flutter
|
32
wysnylc 2020-07-13 18:53:21 +08:00
用过 Java8 Stream Lambda Completablefuture LocalDateTime 吗?
|
33
murmur 2020-07-13 18:54:35 +08:00
因为 java 只是啰嗦,这叫教科书级别的工整,跟 objc 比 java 美爆了好吧?
|
34
fanqsh123 2020-07-13 19:04:32 +08:00
天天看别人说“代码优雅”,“结构优雅”,“语法优雅”,这个优雅到底是啥呢?我也明明写了挺多年代码了呀!
|
35
HBpencil 2020-07-13 19:10:12 +08:00
这还不火
|
36
iseki OP @tctc4869 抱歉没用过 Eclipse,但是 idea 默认提供对换行的有限支持(你按回车时会自动拆成 "..." + "..."的形式)
话说,换 Kotlin 你就没这个问题了,毕竟 Kotlin 支持 """sth something """ |
37
iseki OP 哦,我上条的说法可能是错的,我的上下文有问题
|
38
7hens 2020-07-13 19:19:02 +08:00 via Android
@wysnylc Java8 用起来还是没有 Koltin 爽,Sequence, Flow, Coroutine,还有自动类型推断、inline, 各种语法糖,简直不要太爽。
|
39
mmdsun 2020-07-13 19:23:31 +08:00 via Android
并不是语言优雅就可以火。。看看隔壁 C#就知道了。Kotlin 好多特性都可以看到 C#的影子。
还有就是现在 Java 更新速度飞快。kotlin 的特性以后 Java 也会有。。 |
40
iseki OP @fanqsh123 我对此的看法可能比较肤浅,如有误还请指出… 在我眼里,看着舒服,整洁;逻辑一致,分层清晰,坑少(指不容易出错)可以说是优雅
|
41
putaozhenhaochi 2020-07-13 19:27:47 +08:00 via Android
可能特性太多学不过来
|
43
qW7bo2FbzbC0 2020-07-13 19:30:29 +08:00
优雅不仅仅有语法或者格式优雅,还有运行优雅。Kotlin 现在可以像 go 或者 c#那样编译成自带运行环境的二进制文件吗?
|
44
tctc4869 2020-07-13 19:32:45 +08:00
@iseki 按回车时会自动拆成 "..." + "...",这种换行感觉不行,如果我要复制出来合并呢,,是不是还得把引号和+号复制出去?
如果我真的用 IDEA 了,那可能是用 Kotlin 弄了,而不是 java,我用 java 还是继续 eclipse,至少有个插件在 idea 是没有的。java13 的那个字符串换行功能,未来支不支持都还是问题。 |
45
wysnylc 2020-07-13 19:38:01 +08:00
@7hens #38 java9 flow ,java10 var,java13 switch 优化,java14 instanceof 模式匹配
你想要的,jdk 都会抄 |
47
pursuer 2020-07-13 19:56:39 +08:00
|
48
murmur 2020-07-13 20:00:31 +08:00
@hjahgdthab750 electron 都能自带 chrome,java 当然可以自带 jre,jetbrains 家的产品就自己带 jre
|
49
sagaxu 2020-07-13 20:05:46 +08:00 via Android
Kotlin 在 reddit 上热度刚超过 Scala,作为一个正式发布才 3 年的语言,普及的已经相当快了。
@wysnylc Java 抄的太慢了,coroutine 2021 年出的来吗? Kotlin 只要 JVM8 就够了。 @hjahgdthab750 Kotlin native 支持多平台,但是性能跟 C++比还是差太多,生产用还不够成熟。 |
50
bohan 2020-07-13 20:08:54 +08:00
|
51
iseki OP |
52
wysnylc 2020-07-13 20:13:14 +08:00
@sagaxu #49 https://www.zhihu.com/question/332042250 --为什么 Java 坚持多线程不选择协程?
协程并没有吹得那么牛逼,就好像能打爆 Java 线程池似的 |
53
iseki OP @tctc4869 显然 https://kotlinlang.org/docs/tutorials/getting-started-eclipse.html Eclipse 也存在 Kotlin 插件,我没有用过,不知道体验如何
|
54
sagaxu 2020-07-13 20:15:10 +08:00 via Android
@wysnylc IO 密集型,打爆线程池毫无压力。Java 要是坚持线程池,就不会搞 project loom 了。
|
55
iseki OP @wysnylc 在我看来协程与线程并非是取代的概念,Kotlin 在使用协程时也不能对线程一无所知,他们有各自适合的场景
|
57
sagaxu 2020-07-13 20:18:04 +08:00 via Android
阿里和华为的 JDK 都有协程
|
59
iseki OP Java 本身也有类似的解决方案,毕竟需求是存在的,协程又不是 Kotlin 团队发明的。不过 Kotlin 用一种相对优雅的方案对此提供了第一方的支持
|
60
gtx990 2020-07-13 20:24:54 +08:00 via Android
stackless coroutine 就是 Completable future+语法糖
|
61
iseki OP 在我看来 Coroutine 就是个大号语法糖,你不用他也能写,就是得多费点脑细胞 emmm
|
63
wysnylc 2020-07-13 20:26:39 +08:00
|
64
sharpy 2020-07-13 20:27:40 +08:00
kt 里那个 sum enum 写法,和 scala 一样,设计得有点儿难看
|
65
wysnylc 2020-07-13 20:28:05 +08:00
@sagaxu #62 回调地狱在 2014 年发布的 Jdk8 中的特性 Completablefuture 早已经被解决,6 年过去了你还是没有更新过对 Java 的知识点
|
67
iseki OP 其实就 Java 生态(如 Spring )大量利用 ThreadLocal 的这些问题,Coroutine 都有对应的支持,Kotlin coroutine 本身也在不停演进······另外 Coroutine 提供的功能是 Completable 的超集
|
68
sharpy 2020-07-13 20:32:27 +08:00
@iseki 只是粗看了一下,记忆里是这样,和 scala 好像都是 sealed 关键字,当初做那本 scala 红皮书,这玩意儿写起来有点儿蛋疼,swift 和 rust 里简洁多了
|
69
hslx111 2020-07-13 20:38:31 +08:00
现在好多后台开始用 Go 了。。。
|
70
sagaxu 2020-07-13 20:38:41 +08:00 via Android
@wysnylc 别扯了,future 和 promise 只是解决了回调的代码缩进问题,根本没解决流程控制的复杂度。一旦业务复杂,涉及到循环和递归等控制,异常的传播,future 写起来还是太麻烦了。曾经负责过公司一个大量使用 future 的项目协程化,协程真香。
|
74
hantsy 2020-07-13 20:45:11 +08:00
@sharpy 莫急,马上 Java 15 的 Sealed 就出来了,配合现在 Java 14 的 Pattern Matching 你就不用羡慕 Scala 了。
|
75
iseki OP Kotlin 中的 Coroutine 本质是语法糖,本质是 CPS 变换,和 Thread 不是一个层面的概念,不要混淆比较好 详情建议阅读: https://github.com/Kotlin/KEEP/blob/master/proposals/coroutines.md
|
76
hantsy 2020-07-13 20:48:36 +08:00
实在对 Coroutines 没太多好感,同时也讨厌类似的 Promise ( async, await 这些),要么用同步方式,要么 Functional 流式。
|
77
Mistwave 2020-07-13 20:52:40 +08:00 via iPhone
|
78
hantsy 2020-07-13 20:55:44 +08:00
以前看 Android 的时候,看 Kotlin Coroutines 针对不同的情况用不同的 Dispatchers ( UI,Network IO 等),感觉挺复杂的。
https://codelabs.developers.google.com/codelabs/kotlin-coroutines/#3 到了 Spring 里面,我都是没关心过用 Spring 内部用的哪种。 |
79
hantsy 2020-07-13 20:59:33 +08:00
@Mistwave Scala 与 Java API 互通太差了,特别是 Collections,相对这方面 Kotlin 优势很大。
https://github.com/hantsy/scala-sandbox/blob/master/spring-boot-demo/src/main/scala/com/example/demo/DemoApplication.scala#L34-L41 用 Scala 除非你全部用 Scala 的库,否则用 Java API 太痛苦了。 |
80
hantsy 2020-07-13 21:02:35 +08:00
@iseki 国内开发团队基本都是一个尿性,如果你不是 Team Lead,强制加入一些东西,一些巨婴都会以各种借口拒绝新东西。
|
81
fihserman123 2020-07-13 21:08:29 +08:00
反过来说:震惊,Java 语法这么垃圾的语言为什么这么火呢?
语法好不好和语言活不活又没有必然的关系 :) |
82
hantsy 2020-07-13 21:08:58 +08:00
@wysnylc Completablefuture 想长成 ReactiveStreams 的模样 ,早生了两年,可惜缺少了 reactivestreams 一些特质,如订阅模式。实在不懂的是 Java 9 Copy 了 ReactiveStreams Java 1.0 API 到 Flow 中,一直嘎在那里, 并没有第三方框架大力支持( Spring 兼容,只是调用了一个 Reactor 的工具类做到的),搞不懂 Copy 的意义在哪里,难道就是为后面的 Java 11 HttpClient 使用?
|
84
xiangyuecn 2020-07-13 21:12:40 +08:00
让开,让开,公差赶路,快让开,公差赶路。。
用过 swift 这坨后之后你就会觉得 Android 还是舒服点,oc 就不说了吧,java 真香,怎么舒服怎么来,所以我选 JavaScript🤔 |
85
gantleman 2020-07-13 21:17:38 +08:00
不太理解 Kotlin 这类静态语言的优雅,可以编译成 java 和 js 。
Kotlin 编译成 java,java 编译成中间语言,中间语言在 jvm 编译成二进制。 ^^歪果仁们的编程语言套娃。 |
86
billlee 2020-07-13 21:18:32 +08:00
@tctc4869 #26 kotlin 可以算是 Scala-- 吧。如果是大数据之类重度使用函数式的开发,或者需要搞 DSL, 元编程这些东西,那么 scala 很合适。
|
87
abcbuzhiming 2020-07-13 21:21:32 +08:00
Kotlin 目前最大的问题是对这语言支持的比较好的 IDE 只有 IDEA,而众所周知,IDEA 是要钱的
|
88
hantsy 2020-07-13 21:25:01 +08:00
|
89
hantsy 2020-07-13 21:27:19 +08:00
@gantleman 我也有点不理解,还是 Java 直接,Kotlin 可选用吧,主要我觉得 Kotlin,Scala 编译明显慢了很多(这蹼很不爽),毕竟带套太多了。
|
90
lululau 2020-07-13 21:27:45 +08:00 via iPhone
谁说的 kotlin,scala,Clojure 是 Java 的方言的😂 JavaScript 才是 Java 的方言好吗😄
|
91
wwlzz 2020-07-13 21:29:48 +08:00
火不火不是语言决定的,C# 这么优秀的语言,也不火啊
|
93
sagaxu 2020-07-13 21:36:43 +08:00 via Android
@hantsy jdk 原生协程 loom 项目就是以前搞 quasar 的那个人在搞,最快也要明年出来。
不看 freebsd 和 windows fiber 这种,操作系统层面最小粒度还是线程,协程最终都要在线程里运行,Go 协程最终也是在线程池里运行。协程设施提供的也只是调度和上下文的保存和还原。 @wysnylc 截图以为我没看过? netty 和 vertx 也都写过,最早就像答主说的那样,多开线程解决并发问题,一直开到 6000 个线程,需求还在不断扩大,后来第二版使用 netty 和 vertx 重写了,开发体验相当糟糕。 netty 写写框架或者基础设施是没问题的,但是一旦用来写业务逻辑,动不动就改逻辑的那种,心智负担明显高于协程。 |
94
hantsy 2020-07-13 21:37:23 +08:00
回头想其实 PHP 也不错。
我第一份工作 PHP 4.06 ,Oracle8i, Mandrake 8 |
95
wysnylc 2020-07-13 21:38:43 +08:00
@hantsy #82 先挖坑后面填吧,现在快速迭代开发版本,功能日新月异实在变化太快了有些人还停留在过去也能理解
就目前来看 Completablefuture 作为一个简单的异步编程填充是合格的,Java9 的 Flow 知道的人少用的更少要是想用订阅模式还是用第三方 jar 包实现吧 Java 只抄成熟的不抄最新的,有些特性不 Copy 可能是有一定考虑在里面,毕竟加了再改太麻烦没有十足把握还是再观望观望 |
96
wysnylc 2020-07-13 21:44:16 +08:00
@sagaxu #93 有些业务用协程重写性能提升并不是因为协程而是因为重写旧的代码获得性能提升
netty 写业务确实是灾难,写容器和框架或者作为高性能组件才是正途 |
97
brucewuio 2020-07-13 22:01:52 +08:00
那个钱多用那个,我太穷了
|
99
kingslayer 2020-07-13 22:22:33 +08:00
@lloovve 非也,只能说也是编译成 class 文件
|