V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iseki
V2EX  ›  Kotlin

慌的一批, Kotlin 这么优雅的语言为什么不火呢

  •  2
     
  •   iseki · 2020-07-13 17:10:17 +08:00 · 43362 次点击
    这是一个创建于 1601 天前的主题,其中的信息可能已经有所发展或是发生改变。

    真是,两年没写 Java 了,之前写了两礼拜 Java 没给我急死,手速远远跟不上脑子的速度。。。 但是看看社区,有一种不温不火的感觉呢,慌······

    181 条回复    2021-07-05 09:22:31 +08:00
    1  2  
    hantsy
        101
    hantsy  
       2020-07-13 22:28:47 +08:00
    @Mistwave 特别是 Java8 后,几个 Scala 特有的都在 Java 中有了,没欲望用 Scala 了。
    sagaxu
        102
    sagaxu  
       2020-07-13 22:37:06 +08:00 via Android
    @wysnylc 不是用协程重写提升了性能,是用异步把线程数降低了几个数量级,大大提升了性能,后来再用协程提升了可维护性。重构第二版的时候,就没协程什么事,netty 和 vertx 是久经考验的,而此时 Kotlin 协程几乎没有成功案例,甚至没有听说过有谁用过,当然没有考虑使用。之后逐步尝试观察一段时间之后,才全面使用,性能跟 future 差不多,只是为了写起来轻松一点。
    hantsy
        103
    hantsy  
       2020-07-13 22:42:56 +08:00
    @sagaxu 个人感觉只是 Coroutines 写起来直白一点,对于传统的熟悉同步的开发人员容易理解 。性能嘛,没测试,也没过比较与 reactor 的原生的 Mono, Flux 有什么差别。从我眼里,还是 Mono,Flux 比较舒服。
    hantsy
        104
    hantsy  
       2020-07-13 22:44:57 +08:00
    Spring Boot 现在通过 Starter 创建的项目,一开始就加入了 Kotlin Coroutines 依赖,Spring 内部只要是 Kotlin,Reactor 相关基本上全面支持 Coroutines 了。
    Mistwave
        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
    yuenc
        106
    yuenc  
       2020-07-13 22:47:35 +08:00
    我前端,写 kotlin 跟写 ts 一样,爽
    hyyou2010
        107
    hyyou2010  
       2020-07-13 22:53:01 +08:00
    我则经常把 kotlin 跟 ts 写混,晕
    hantsy
        108
    hantsy  
       2020-07-13 22:54:38 +08:00
    @yuenc Kotlin 支持写前端啊,只是看一些介绍仅仅是 React 官方的包支持得不错,其它估计要自己转换了。
    iseki
        109
    iseki  
    OP
       2020-07-13 23:00:17 +08:00
    @gantleman 不是的,Java 、Kotlin 都是编译成 JVM 上的字节码文件,Kotlin 额外通过 LLVM 支持其他后端等等
    @hantsy 这个问题见仁见智了,个人看来狂写 Callback 和人肉 CPS 不现实,常规的 Promise 等等也显得有点孱弱
    Kotlin 前端现在能打的就一个 kotlin-react?之前有用过,不知道支持到什么程度,虽然是官方的项目
    Scala 真的好难( x
    lloovve
        110
    lloovve  
       2020-07-13 23:08:26 +08:00 via iPhone
    @kingslayer 还不一样
    aureole999
        111
    aureole999  
       2020-07-13 23:31:42 +08:00
    我们现在后端新项目已经全用 kt+spring 了。挺好用的,就是 spring 要注意一点,kt 默认都是 final 的类,要用到 allopen 插件。有些持久化的 data 类要用 noarg 。其它都很爽啊,不需要这 stream 那 stream 的了。还有 non-null 类型,业务上的逻辑很清晰,不像 java 在这判断一下,那判断一下,还容易漏。
    hantsy
        112
    hantsy  
       2020-07-13 23:37:00 +08:00
    @aureole999 如果是由 Spring Boot Starter 生成的,官方有插件解决这些 Spring 中的问题,不用关心,但 Jetbrains 文档中手动是你这么配置的。
    aguesuka
        113
    aguesuka  
       2020-07-13 23:49:07 +08:00 via Android
    @wysnylc 问号表达式从 jdk6 喊到 14 还没出来
    secondwtq
        114
    secondwtq  
       2020-07-14 01:40:34 +08:00
    我强调过 N 遍了,“火不火”和“好不好”完全是两个不相关的问题( https://www.v2ex.com/t/636465#r_8459702 )。
    倒不如说,强行把“火不火”和“好不好”关联起来会造成很多问题。
    CosimoZi
        115
    CosimoZi  
       2020-07-14 02:23:19 +08:00
    学 scala 最好要有一点 pl 背景
    qinfensky
        116
    qinfensky  
       2020-07-14 02:24:41 +08:00
    Kotlin + Vert.x 舒坦
    gantleman
        117
    gantleman  
       2020-07-14 03:11:17 +08:00
    @iseki Java 的流行是因为 jvm 的性能仅次于 C 。以及内存的多线程保护和回收策略,这样 java 不会出现内存崩溃。放弃现在的代码做迁移,仅仅因为语法更加流畅。这个成本任何公司和团队都不会做的。
    dayeye2006199
        118
    dayeye2006199  
       2020-07-14 04:02:16 +08:00
    主要的锅可能是你们公司用的 JDK 还是 8 。。。
    chihiro2014
        119
    chihiro2014  
       2020-07-14 04:22:25 +08:00
    用 Java 就够了,kt 没啥前途可言啊,毕竟最后都是走 JVM 有啥区别。
    而且 JDK9 之后,Java 大变。没必要以以前的眼光来看待了
    chihiro2014
        120
    chihiro2014  
       2020-07-14 04:24:46 +08:00
    @iseki 说起协程,Go 里面的协程跟 Java 的单线程线程池没啥区别
    cs419
        121
    cs419  
       2020-07-14 06:52:03 +08:00
    @hantsy
    刚学 scala 的 implicit 很别扭, 有种莫名其妙的感觉
    后来想通了 可以看成 java 中的 int long 的自动装箱拆箱
    这样一对比 就感觉合理多了


    协变 逆变 让人晕乎乎的 这东西 java kotlin scala 都有
    泛型还是别强求深入
    能简单调库就成 map fold 啥的 会用不难吧
    真到你重构框架 做抽象封装的时候自然就能整明白了
    DiamondY
        122
    DiamondY  
       2020-07-14 08:33:01 +08:00   ❤️ 1
    优雅有个卵用
    lblblong
        123
    lblblong  
       2020-07-14 08:35:27 +08:00 via Android
    kotlin 是真的好,个人最喜欢就是 ts 和 kt
    lblblong
        124
    lblblong  
       2020-07-14 08:36:18 +08:00 via Android
    kotlin 确实好,个人最喜欢的就是 ts 和 kt
    namelosw
        125
    namelosw  
       2020-07-14 08:37:03 +08:00   ❤️ 2
    Haskell / Scheme: 你说啥?优雅?为什么不火?
    jorneyr
        126
    jorneyr  
       2020-07-14 08:40:53 +08:00
    写小的程序是很优雅,但是对于中大型项目来说,便于项目管理才是更关键的,Java 无疑可以做到相对平衡。
    技巧在项目管理中是很不受人喜欢的。
    sagaxu
        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,调用栈能不能跟同步阻塞写法一样直观呢?
    tctc4869
        128
    tctc4869  
       2020-07-14 09:14:37 +08:00
    @iseki 支持 C#的部分类么?
    sunziren
        129
    sunziren  
       2020-07-14 09:18:06 +08:00
    优雅有个卵用
    BigDogWang
        130
    BigDogWang  
       2020-07-14 09:21:34 +08:00
    问个问题,如果 kt 里同时要判两个变量的 null,是不是要嵌套 let ?
    bibsbx
        131
    bibsbx  
       2020-07-14 09:34:14 +08:00
    各位用 kotlin 的,Checked Exception 你们是怎么解决的
    ukyoo
        132
    ukyoo  
       2020-07-14 09:36:40 +08:00
    @bibsbx 这是个问题, 问就是 let it crash...
    nicevar
        133
    nicevar  
       2020-07-14 09:37:36 +08:00
    我自己的几个项目几乎全用 Kotlin 写的,公司的项目用 Java,说实话 Kotlin 除了那点语法糖之外,并不比 Java 强多少,我都觉得论优雅还不及 Java,而且现在最近几年出来的语言都有一些通病,就是小版本的升级都有可能造成之前的代码编译不过去,比如 Kotlin 升级到 1.3.72 ,好好的项目一堆错误,这多多少少会影响使用者的心情,虽然 JetBrains 很强,但是 Kotlin 估计随着 Android 的死去也没多大风浪了
    no1xsyzy
        134
    no1xsyzy  
       2020-07-14 09:41:48 +08:00
    @secondwtq #114 同意啊
    不然你要什么语法,Racket 都可以给你做出来。而且自带 First-class continuation,自己动手实现个 Coroutine 也就是分分钟的事。用了 ChezScheme,编译效率和编译结果的执行效率也是非常高的。
    wupher
        135
    wupher  
       2020-07-14 09:42:53 +08:00
    因为做技术决策的人不是你啊。
    sagaxu
        136
    sagaxu  
       2020-07-14 09:47:02 +08:00 via Android
    @bibsbx 需要处理的地方一个 runCatching 包裹一下,不会每个地方都处理。
    @nicevar 还能编译不过?我从 1.0 一路升级到 1.3,还没有碰到过 kotlin 引起的编译不过的情况。gradle 升出问题问题的倒是有过,不过解决也就几分钟的事情。
    kkurs
        137
    kkurs  
       2020-07-14 09:49:45 +08:00
    kotlin 已经是 jvm 上除 Java 外占有率最高的语言了,这还不算火的话 scala 和 Clojure 都不用玩了
    bage2020
        138
    bage2020  
       2020-07-14 09:55:43 +08:00
    KOTLIN ke du xin 太差
    wee911
        139
    wee911  
       2020-07-14 09:57:43 +08:00
    写的这么好怎么会火呢, 越垃圾的越火
    takemeaway
        140
    takemeaway  
       2020-07-14 10:01:35 +08:00
    金锄头,银锄头,铜锄头,铁锄头,都是锄头。
    PhpBestRubbish
        141
    PhpBestRubbish  
       2020-07-14 10:08:52 +08:00
    优雅有什么用
    C#那么好用,有几家公司用?
    wysnylc
        142
    wysnylc  
       2020-07-14 10:12:44 +08:00
    @aguesuka #113 问号表达式?你是想说三元表达式?
    wysnylc
        143
    wysnylc  
       2020-07-14 10:13:48 +08:00
    @nicevar #133 他们对新生的东西太过于宽容,对长久陪伴自己的过于苛刻,男人女人就这德行
    KuroNekoFan
        144
    KuroNekoFan  
       2020-07-14 10:14:40 +08:00
    有特性不是充分必要条件,人想不想用才是
    janxin
        145
    janxin  
       2020-07-14 10:15:28 +08:00
    kotlin 不火是有原因的,因为没有培训班
    sharpy
        146
    sharpy  
       2020-07-14 10:26:02 +08:00
    要说这些新语言的,我看好 Rust 的发展,在项目里也用上了,写起来真是神清气爽
    cco
        147
    cco  
       2020-07-14 10:27:33 +08:00
    以后发展几十年,没准就天下大同了。一门 Java 足以研究半辈子了。后半本子还要研究送外卖的路线。
    chanchan
        148
    chanchan  
       2020-07-14 10:32:51 +08:00
    优雅的语言多了取了,轮不到 kotlin
    azhangbing
        149
    azhangbing  
       2020-07-14 11:09:04 +08:00
    kt 大多数只是写法优雅而已,语法糖确实挺爽的,但没有根本性的变化(不要说 kt 的协程,em....不是真正的协程) ,不像是 flutter 有革命性的变化的
    SheHuannn
        150
    SheHuannn  
       2020-07-14 11:13:02 +08:00
    目前主要是写 Android 的用 Kotlin,而且段时间内并不能带来明显的收益
    CoderGeek
        151
    CoderGeek  
       2020-07-14 11:35:20 +08:00
    flutter 够用 社区不给力 需要文化推广
    GM
        152
    GM  
       2020-07-14 11:39:58 +08:00
    个人感觉语法糖太多了。
    iseki
        153
    iseki  
    OP
       2020-07-14 12:01:22 +08:00 via Android
    @wysnylc 是指 Kotlin 里的 ?. ?: 操作吗? Java 里确实没有对标的东西是我万万没想到的…连 js 里都有了…别跟我说 Optional
    iseki
        154
    iseki  
    OP
       2020-07-14 12:02:52 +08:00 via Android
    @nicevar 毕竟还在演进阶段,特性尚未稳定,有些东西改来改去也是意料之中…
    iseki
        155
    iseki  
    OP
       2020-07-14 12:03:50 +08:00 via Android
    @bibsbx 我不知道 CE 有没有更好的办法,反正 Java 那是个很糟糕的办法……
    glovebx
        156
    glovebx  
       2020-07-14 13:14:46 +08:00
    Kotlin 谁用谁知道,爽的不得了
    hantsy
        157
    hantsy  
       2020-07-14 13:19:39 +08:00
    @bage2020 可读性我感觉和习惯有很大关系,习惯就好了,开始迁移到 Java 8 API 的时候,Labmda,Method Reference 都是不习惯的。Kotlin 也还好,与 Java 兼容性很好,完全开始可以以 Class 为中心来写。
    xuewuchen
        158
    xuewuchen  
       2020-07-14 13:25:19 +08:00
    JAVA 的代码风格不适合我,我比较喜欢 python 这中类型的代码风格或者是 pascal 这种风格
    hantsy
        159
    hantsy  
       2020-07-14 13:29:02 +08:00
    @xuewuchen Python,CoffeeScript 这种真受不了,一不小心还以为自己在写 Yaml,老想着缩进对齐。
    xcstream
        160
    xcstream  
       2020-07-14 13:32:34 +08:00
    要和 c 语言长得像才容易上手
    winglight2016
        161
    winglight2016  
       2020-07-14 13:45:32 +08:00
    @wwlzz #79 这一点我倒是可以理解:很多开源项目的积极贡献者都是从 M¥垄断的年代过来的,已经习惯了看到 M¥
    就反对,根本不会去碰微软系的产品——那个年代的微软产品真的是铁桶一般,现在大约只是换成木桶的程度。
    lengyihan
        162
    lengyihan  
       2020-07-14 13:59:15 +08:00 via Android
    可参考 python 还是八十年代的语言呢,这几年才火。
    whyrookie
        163
    whyrookie  
       2020-07-14 14:12:00 +08:00
    Android, 主力使用 kotlin 开发
    taoprogramer
        164
    taoprogramer  
       2020-07-14 14:24:35 +08:00
    工作主力用 java,平时写工具和刷题用 kotlin,真的香。
    zorui
        165
    zorui  
       2020-07-14 14:47:53 +08:00
    同问 Clojure 这么优雅的语言为什么不火呢
    jin7
        166
    jin7  
       2020-07-14 15:02:51 +08:00
    没觉得他哪里优雅了
    java 新版本语法糖也越来越多
    winterbells
        167
    winterbells  
       2020-07-14 16:27:02 +08:00 via Android
    @BigDogWang 我们是单独写了 N 个方法,判断 N 个变量同时不为空。。。
    pdog18
        168
    pdog18  
       2020-07-14 16:34:45 +08:00
    @tctc4869 「 android 的 MVVM 居然要等到 3.6 版本才支持」老铁这句话怎么说? MVVM 为什么要等到 3.6 ?
    shijingshijing
        169
    shijingshijing  
       2020-07-14 16:37:52 +08:00
    C#默默不语
    tctc4869
        170
    tctc4869  
       2020-07-14 16:56:32 +08:00
    @zorui java 用的人多。
    lxk11153
        171
    lxk11153  
       2020-07-14 17:32:40 +08:00
    @lengyihan #162 wiki 上写: python 发行时间 1991 年,java 发行时间 1995 年
    tctc4869
        172
    tctc4869  
       2020-07-14 17:32:45 +08:00
    @iseki 初学者学 Kotlin,有些 Kotlin 特性不了解,大部分写 java 代码开发,或者说是用 java 的组件,比如 java 那边的集合和 map 等。这些合适么?
    leonme
        173
    leonme  
       2020-07-14 21:20:31 +08:00 via iPhone
    相比 groovy 呢?
    crclz
        174
    crclz  
       2020-07-15 08:33:17 +08:00
    async/await+TAP 是 c#的,Linq 是 C#的,ReactiveX 是 c#的,并且和 Linq 完美集成。c#为啥不火呢?
    iseki
        175
    iseki  
    OP
       2020-07-15 10:32:16 +08:00 via Android
    @tctc4869 其实那些东西底层就是 Java 的那套啊…kotlin 对 collection 的功能也都大多是扩展函数实现的,无影响基本上(反射时需要小心一点
    hantsy
        176
    hantsy  
       2020-07-15 13:47:02 +08:00
    @crclz .net core 从国外情况看还好啊。
    KentY
        177
    KentY  
       2020-07-16 22:09:54 +08:00
    我们(主要是后端)新的服务, 项目一多半都用 kotlin + springboot 了.
    个别的有用 quarkus 的.
    Kamiyu0087
        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 对象要一起用的话就比较尴尬了
    不知道有没有办法解决?
    iseki
        179
    iseki  
    OP
       2020-07-23 01:34:01 +08:00 via Android
    @Kamiyu0087 官方似乎没有?自己造一个吧( x
    aguesuka
        180
    aguesuka  
       2020-09-28 23:32:36 +08:00
    Cabana
        181
    Cabana  
       2021-07-05 09:22:31 +08:00 via iPhone
    @azhangbing 请问什么才是真正的协程🤪
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   918 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:16 · PVG 05:16 · LAX 13:16 · JFK 16:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.