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

Kotlin 相比 Java 有什么优势呢

  •  2
     
  •   noble4cc · 44 天前 · 6334 次点击
    这是一个创建于 44 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    总结下来就俩字,真香。

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

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

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

    ···感觉现在 Kotlin 势头不如以前了···
        53
    wupher   43 天前
    我是少见的,在后端使用 kotlin 开发。


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

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

    缺点或者不便:
    * 强类型带来的副影响:json 相较 Groovy 或者 Java,有些地方确有不便
    * 版本的快速升级
        54
    holmesabc   43 天前
    除了反射和范性。
    其它都全是优势。

    只要你敢用两周,应该就下不了贼船了
        55
    chendy   43 天前
    1. 不用写分号
    2. 有携程,比 rx 之类的好多了
        56
    shihty5   43 天前
    @ysihaoy Aha you know us
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2989 人在线   最高记录 5043   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 69ms · UTC 10:43 · PVG 18:43 · LAX 03:43 · JFK 06:43
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1