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

Kotlin 相比 Java 有什么优势呢

  •  2
     
  •   noble4cc · 2019-05-06 11:22:17 +08:00 · 12185 次点击
    这是一个创建于 1810 天前的主题,其中的信息可能已经有所发展或是发生改变。

    感觉现在 Kotlin 势头不如以前了

    56 条回复    2019-05-07 13:18:19 +08:00
    V2exUser
        1
    V2exUser  
       2019-05-06 12:34:16 +08:00 via Android
    主推的人士都是安卓这块的,而安卓的火爆程度大不如前了
    luozic
        2
    luozic  
       2019-05-06 12:46:09 +08:00 via iPhone
    核心问题还是 库少,没有多少直接用 kotlin 写的原始库。
    WispZhan
        3
    WispZhan  
       2019-05-06 13:16:00 +08:00 via Android
    语法糖多,甜,香
    yuankui
        4
    yuankui  
       2019-05-06 13:29:08 +08:00
    跨平台是大趋势
    yuankui
        5
    yuankui  
       2019-05-06 13:29:42 +08:00
    期望 html6 能统一桌面,网页,app~
    zt1991616
        6
    zt1991616  
       2019-05-06 13:33:16 +08:00
    @luozic 原始库直接调用呗
    goodleixiao
        7
    goodleixiao  
       2019-05-06 13:36:56 +08:00
    简单,不用写那么多代码
    misttyw
        8
    misttyw  
       2019-05-06 13:45:22 +08:00
    只对安卓开发有用,但是安卓很多的适配问题啊第三方库问题各种导致还是很多人继续写 java,kotlin 火就火在成了官宣而已
    SuperMild
        9
    SuperMild  
       2019-05-06 14:06:18 +08:00
    就语言本身,比 java 香很多。但是要说用于生产,情况就很复杂了。
    glaucus
        10
    glaucus  
       2019-05-06 14:11:41 +08:00
    问题就是现在 Kotlin 还是需要和 Java 一起混合编程,调用的大部分也是 Java 编写的类库,为了实现 100% interoperable with java 反而限制了很多
    icris
        11
    icris  
       2019-05-06 14:12:46 +08:00
    优势很多,劣势没有,Java 能用的库 kotlin 都能用(不局限于 Android 开发,连 Spring 也有 https://spring.io/guides/tutorials/spring-boot-kotlin/ 这样的东西),kotlin 能用的东西 Java 不一定能用
    youxiachai
        12
    youxiachai  
       2019-05-06 14:14:10 +08:00
    一个 jvm 语言...不是看 java 的势头吗.....
    反正....kotlin 和 java 又不冲突...
    lihongjie0209
        13
    lihongjie0209  
       2019-05-06 14:18:15 +08:00
    @yuankui java 不跨平台吗?
    Raisu
        14
    Raisu  
       2019-05-06 14:21:29 +08:00
    没有
    abcbuzhiming
        15
    abcbuzhiming  
       2019-05-06 14:30:56 +08:00   ❤️ 1
    *.kotlin 对 java 的增益,没有利害到 Typescript 对 javascript 的增益那种地步。java 这语言只是在语法上比较笨,明显的,无法接受的弱点很少,历史早就证明普通的语法糖是不足以使用户迁移的
    *.在开发上,kotlin 始终只是 IDEA 在推,它家的 IDE 对 kotlin 支持的最好,eclipse 对 kotlin 的支持始终很糟糕,这严重限制了 kotlin 的扩张
    *.kotlin 号称 100%兼容 java,但是事实情况是 kotlin 调 java 可以,但是 java 调 kotlin 是存在很多问题的。这个限制导致 kotlin 最合适的位置是新项目业务线的上层,调用 java 的接口,因为大量的 java 祖传代码的存在,你若使用 kotlin 来写类库给别人提供接口就要考虑兼容问题,这限制了 kotlin 的生态圈扩张
    yuankui
        16
    yuankui  
       2019-05-06 14:45:20 +08:00
    @lihongjie0209 十年前这么说没毛病。
    kotlin 支持开发跨平台的移动应用,Java 没说行吧。
    我说的跨平台是一套代码,能同时编译成 windows,linux,mac,android,ios,浏览器 都可以运行的 app
    skiy
        17
    skiy  
       2019-05-06 14:59:44 +08:00
    flutter 要来了。
    kimiler
        18
    kimiler  
       2019-05-06 15:08:09 +08:00
    这么说吧,flutter 选择了 dart,就代表了 kotlin 仅仅是一个过渡,为啥呢,因为 java 官司
    xgfan
        19
    xgfan  
       2019-05-06 15:12:15 +08:00 via iPhone
    其实 kotlin 的“”
    xgfan
        20
    xgfan  
       2019-05-06 15:14:11 +08:00
    @xgfan 移动端手抖了。
    其实 kotlin 的很多“高阶”用法出 bug 的几率挺高的。
    我就骚操作了几次,就发现了两个 bug,提 issue 之后到现在都还没修复。
    dnL
        21
    dnL  
       2019-05-06 15:19:49 +08:00
    没有用过 kotlin 的人就不要在这评论了,说什么第三方库少确定不是为了黑而黑?用 kotlin 不允许你用 Java 库了?
    sty
        22
    sty  
       2019-05-06 15:30:29 +08:00
    我已经在 spring boot + kotlin 了,简单业务,状况良好
    Febers
        23
    Febers  
       2019-05-06 15:34:50 +08:00 via Android   ❤️ 3
    @kimiler ……你理解错了吧,应该去看看为什么 flutter 选择 dart,是因为 jit 和 aot 以及热重载,而 kotlin 是 jvm 语言,也就是说从一开始 dart 和 kotlin 就不是竞争关系。java 官司跟 kotlin 又有什么关系?不知道 open jdk 吗,而且官司是因为 google 确实原封不动抄了 oracle 的代码实现。况且 flutter 目前来说还是属于 ui 框架,绕不来原生开发,这两者无法直接比较
    shihty5
        24
    shihty5  
       2019-05-06 15:57:57 +08:00   ❤️ 1
    我们是 Fintech 公司,已经全线在服务器端使用 spring boot + kotlin 了
    好用的语法糖,简介的代码,就是有时候写太爽了打日志比较少。
    sagaxu
        25
    sagaxu  
       2019-05-06 16:09:28 +08:00
    我从 2017 年开始引入 Kotlin 到生产环境,两年里将所有后端 Java 代码用 Kotlin 重构 /写了一遍。

    总结下来就俩字,真香。

    大量语法糖,少写很多很多代码,比用了 lambda 之后的 Java 还要简洁许多。

    Java 能用的库,Koltin 都能用,包括 Spring 家族等所有后端的框架和库,所以不存在生态是不是繁荣的问题。

    Kotlin 1.3 开始有稳定版的协程,创建 1000 万个协程也很轻松,真的很香。
    cpdyj0
        26
    cpdyj0  
       2019-05-06 16:18:33 +08:00 via Android
    kotlin 受 Java 限制太多了
    mamahaha
        27
    mamahaha  
       2019-05-06 16:20:26 +08:00
    以我的理解,会 java 不就相当于会 Koltin 吗?想用啥就用啥有啥好纠结的?(纯个人理解,我这两个都不会)
    yizmaoaa
        28
    yizmaoaa  
       2019-05-06 16:22:23 +08:00
    有啥大不容前的......以 kotlin 对 java 的兼容性.........

    所以我们就是将 kotlin 当做是 jvm 上的一个库而已......

    kotlin  目前适用的地方?

    首先当然是随着这两年 reactor 的发展.........

    只要你写过异步的东西,你就知道 callback 地狱了.......

    用 rxjava  或者   reactor  也没有那么舒服的....

    写 vertx 的很大一群体都在用 kotlin 了...https://vertx.io/docs/vertx-lang-kotlin-coroutines/kotlin/

    用协成写岂不是美滋滋.......

    另外在 spring 的  webflux 中 目前应该也可以使用协成了....

    https://spring.io/blog/2019/04/12/going-reactive-with-spring-coroutines-and-kotlin-flow
    Febers
        29
    Febers  
       2019-05-06 16:28:21 +08:00 via Android
    @cpdyj0 说实话,kotlin 最开始作为一门 jvm 语言,肯定与 java 脱不开关系,而且 java 无数的成熟高效的类库,直接支持不更好吗?但是说 kotlin 受 java 限制,那是不关注 kotlin 的发展,kotlin/native 和 kotlin/js 逐步推进中,Android 开发者已经可以像写 c 一样写 kotlin native 让 java 层调用,kotlin 的协程概念更加像 javascript。
    ukyoo
        30
    ukyoo  
       2019-05-06 16:45:42 +08:00
    语法糖而已,上手很简单
    kimiler
        31
    kimiler  
       2019-05-06 17:03:29 +08:00
    @Febers 😰是理解错了,不好意思
    tppppp
        32
    tppppp  
       2019-05-06 17:44:40 +08:00
    语法糖什么的都不重要,写过 Java 再转 kotlin 就知道空指针的处理,kotlin 太尼玛方便了,而且编译器很好的提醒 NPE,减少愚蠢 BUG 率,虽然还是会出现,其实大多都出现在调用 java 类库上,毕竟面向对象开发都是先定义类&属性,属性就会定义是否为 NULL,然后在业务处理时候编译器会提示处理,真心少了很多这方面问题,而且写起来舒服,不用再 if 来 if 去。感觉唯一缺点就是编译慢(毕竟做了那么多糖果给你吃),还有就是写和传统 java 框架兼容性稍微差一点,虽然 mvc 上有强大的 spring 套餐,但是在 orm 上例如 mybatis 用起来就会层出不穷的奇异现象出现,以上仅个人线上实践后的观点。
    fan123199
        33
    fan123199  
       2019-05-06 18:12:57 +08:00
    代码少,就是正义。
    luozic
        34
    luozic  
       2019-05-06 18:40:09 +08:00 via iPhone
    同样的组织 同样的能力 代码越少 bug 越少,并且 对于已定能力的组织,能够处理的代码的复杂度的能力是有限的,大部分遗留系统是不可能通过重构就活。
    murmur
        35
    murmur  
       2019-05-06 19:13:01 +08:00
    @kimiler 别吹了,如果是因为语言官司的话选 c#也轮不到 dart
    bduqw
        36
    bduqw  
       2019-05-06 19:29:12 +08:00 via Android
    写爬虫稳的一批
    gemini767
        37
    gemini767  
       2019-05-06 20:22:32 +08:00
    @yuankui 这和 kotlin 有什么关系,这不是 vm 的功劳么?
    ysihaoy
        38
    ysihaoy  
       2019-05-06 20:28:27 +08:00
    @shihty5 Airwallex?
    lazywen
        39
    lazywen  
       2019-05-06 20:43:18 +08:00 via Android
    我司就是用 kotlin + spring 全家桶做了日活百万的复杂应用,踩了不少 kotlin 的坑,但远赶不上 spring 的坑多,用惯了再也不想写 Java 了😋
    golang83
        40
    golang83  
       2019-05-06 21:12:04 +08:00
    我个人的浅见就是,如果 java 不属于 oracle 这种公司,那么 java 也是一个优秀的语言,但和 oracle 有关系的,都是垃圾!
    mxalbert1996
        41
    mxalbert1996  
       2019-05-06 21:20:25 +08:00 via Android
    我觉得可能很多人都是没用过 Kotlin 吧,反正我用了以后是觉得真香。
    kaedea
        42
    kaedea  
       2019-05-07 00:53:30 +08:00 via Android
    高级虚拟机语言特性(语法糖实现)
    scoping functions
    函数式
    coroutine
    eminemcola
        43
    eminemcola  
       2019-05-07 01:46:25 +08:00
    @lazywen #39 赞 期待贵司能多分享一些踩坑经验
    luke666
        44
    luke666  
       2019-05-07 08:23:51 +08:00 via Android
    没有
    stanjia
        45
    stanjia  
       2019-05-07 08:41:29 +08:00
    协程
    huhujin
        46
    huhujin  
       2019-05-07 09:19:55 +08:00
    比 java 甜吧
    hongch
        47
    hongch  
       2019-05-07 09:42:28 +08:00
    说 flutter 的一直停留在业务层吧?
    1.你从事过物联网开发?
    2.串口通信有搞过?
    3.大部分硬件都要写 cpp 然后通过 JNI 给 APP 层调
    所以一上来就说 flutter 的业务人员 求求你们不要会写几个 UI 就在这吹 哇塞 flutter 真好,性能真好真牛逼
    kimiler
        48
    kimiler  
       2019-05-07 10:00:48 +08:00
    @murmur 不要提这么古老的语言好吗
    kimiler
        49
    kimiler  
       2019-05-07 10:04:45 +08:00
    @hongch flutter 定位是高性能的跨平台 ui 框架,你非要拿它去做串口开发,物联网我们也没折啊~
    hantsy
        50
    hantsy  
       2019-05-07 10:31:32 +08:00
    java 8 以后的语法简洁了很多, Lambda, Optional, Stream, var/List.of/Map.of/Set.of 等), 模式匹配加到最新的 Java 12 中了等。

    Kotlin 很多东西比如 lambda 之类的在 Java 8 以后优势不明显。不过 Kotlin 还是有一些优势,null check, 函数优先,extensions 这些语法糖还是不错。当然像 Spring 中 RouterFuncation,Bean Definition DSL 之类的, 个人觉得一般,利用了 Kotlin 特性,但是很多东西又回到类似文本(和以前的 Groovy DSL,XML 差不多了)配置的老路上了。
    hantsy
        51
    hantsy  
       2019-05-07 10:34:11 +08:00
    也说一点 Kotlin 缺点吧,作为 JVM 语言,和 Scala,Groovy 一样,相比 Java 编译速度明显减慢,这会严重影响开发效率。
    yuankui
        52
    yuankui  
       2019-05-07 11:05:28 +08:00
    @gemini767 所以楼主说:

    ···感觉现在 Kotlin 势头不如以前了···
    wupher
        53
    wupher  
       2019-05-07 11:08:27 +08:00
    我是少见的,在后端使用 kotlin 开发。


    @hantsy BTW,编译速度速度从来不会影响开发效率。我既用 Java,也用 kotlin、Scala、Groovy,甚至还有 golang。我一般使用 Maven 做为部署编译,开发过程中使用 IDE 的增量编译,都不会有你说的速度问题。

    回原题, 好处:
    * FP
    * 语法糖
    * 强类型:刚从 Groovy 转强类型时,确实有不习惯的地方,但是用久后确实也有它的方便
    * Coroutines
    * ReativeX Koltin 相比 RxJava 确实也有一些有趣的地方,不过现在用 Coroutines 更多
    * 没有分号

    缺点或者不便:
    * 强类型带来的副影响:json 相较 Groovy 或者 Java,有些地方确有不便
    * 版本的快速升级
    holmesabc
        54
    holmesabc  
       2019-05-07 11:14:06 +08:00
    除了反射和范性。
    其它都全是优势。

    只要你敢用两周,应该就下不了贼船了
    chendy
        55
    chendy  
       2019-05-07 12:01:13 +08:00
    1. 不用写分号
    2. 有携程,比 rx 之类的好多了
    shihty5
        56
    shihty5  
       2019-05-07 13:18:19 +08:00
    @ysihaoy Aha you know us
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2760 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:46 · PVG 20:46 · LAX 05:46 · JFK 08:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.