高手问答第 254 期 —— Java 二十五载,你开始学习 Kotlin 了吗?

雑人 发布于 09/02 19:26
阅读 9K+
收藏 8

Kotlin是一种广泛的通用语言你可以在任何原先使用Java的地方以及其他更多场景中使用它。自从Google官方宣布Kotlin为Android的开发语言后,Kotlin的发展势头极为迅速,已成为编程语言界的又一颗新星,在业界得到了广泛的关注。

协程是一个重要技术,它的最重要两个作用,一是可以让异步代码同步化,降低异步程序的设计复杂度;二是可以实现轻量级的并发,提高系统资源的利用率。在大厂面试时,如果你有协程经验,那绝对是大大的加分项。

OSCHINA 本期高手问答( 2020 年 9 月 3 日——2020 年 9 月 8 日 ) 我们请来了霍丙乾老师@Bennyhuo 如果你对 Kotlin 以及 Kotlin 协程感兴趣,不管是用法,还是原理,你都可以在这期高手问答得到启发。

问答主题

本次问答主要包括以下方向:

  1. Kotlin 语言特性相关的话题
  2. Kotlin 协程的实现机制、使用场景相关的话题

有其他相关的问题,也欢迎提问。

嘉宾简介

霍丙乾(Bennyhuo),毕业于北京邮电大学,现任腾讯地图数据采集研发中心移动客户端团队技术负责人。资深 Kotlin 技术专家,国内知名的 Kotlin 开发者和布道师。2016年10月创建微信公众号 Kotlin,持续发布 Kotlin 相关的文章和教学视频,颇受欢迎。2017年初开始参与 Kotlin 中文相关网站的翻译和维护至今。

著有《深入理解 Kotlin 协程》一书,已由机械工业出版社出版。

为了鼓励提问@华章会在问答结束后从提问者中抽取5名幸运会员赠与正版《深入理解 Kotlin 协程》1本

从工作机制、实现原理、应用场景、使用方法、实践技巧、标准库、框架、应用案例等多个维度全面讲解Kotlin协程的专著,它同时提供了多语言视角,亦可通过本书了解其他语言的协程。

适读人群 :本书适合有 Java 并发开发经验并有良好 Kotlin 基础的读者阅读。

购买地址:https://item.jd.com/12898592.html

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就相关问题向霍丙乾老师@Bennyhuo  提问,请直接回帖提问。

加载中
1
雑人
雑人

高手问答第 254 期 —— Java 二十五载,你开始学习 Kotlin 了吗?

@osc_06093598 @puras @wha37 @WanAsan @Maxium_R 恭喜以上五位网友分别获得图书一本

请在48小时内私信 @雑人 告知快递信息(格式:姓名+电话+地址),过期中奖资格将会被取消!!

wha37
wha37
还没有收到书
wha37
wha37
感谢
Morty_a
Morty_a
非常感谢 ~~~~~~~
WanAsan
WanAsan
已发送,哈哈,谢谢赠书!
2
赤脚小子
赤脚小子

@Bennyhuo KOTLIN和GO的协程有区别么?

Bennyhuo
Bennyhuo
回复 @haerri : 但 go routine 究竟是如何执行在线程上,还是要运行时控制的呀。我的意思是,go routine 在它自己的领域内做的很好了,但如果作为协程的话题来讨论的话,协程的应用场景不只有 go routine 适用的场景,我们不否认在 go 的领域内,go routine 足够优秀,而 Kotlin 做到了兼顾。
h
haerri
回复 @Bennyhuo : WaitGroup和Context就可以很好的控制go routine了啊
Bennyhuo
Bennyhuo
回复 @神秘的农夫 : 而前面说的这些场景Kotlin协程都可以,我甚至在书当中封装出了lua js 风格的协程应用层api,go 风格的Channel 以及响应式的Flow 都已经在官方框架有实现了。我个人也非常喜欢go routine,但它的协程api从来就没有考虑更多的场景,连线程都不能控制,灵活度上自然是不够的。当然,过于灵活必然让上手变得更难,就像我们常说C语言灵活一样。
Bennyhuo
Bennyhuo
回复 @神秘的农夫 : go 的协程好用,但相比之下,我们不能控制go routine的调度,这是由运行时决定的;go routine解决的是高并发的场景,过于深度结合场景使得对于其他场景的支持就无能为力了。go以外的协程实现多数用来简化异步程序设计,例如async await,或者用作实现延迟操作,例如懒序列,js python c#很多都是如此,go routine 无法满足这样的场景。
神秘的农夫
神秘的农夫
回复 @Bennyhuo : 虽然没用过kotlin,但在协程上,应该没有几个敢说比go更灵活了
下一页
1
WanAsan
WanAsan

@Bennyhuo怎么能使Kotlin写的UI逻辑清晰简单易懂?没有满篇的嵌套

Bennyhuo
Bennyhuo
回复 @AndersMichael : 预览的效率还是 xml 更好。编写的体验上,其实都挺啰嗦,你看 Flutter 一样啰嗦
AndersMichael
AndersMichael
回复 @Bennyhuo : 不嫌XML啰嗦吗?
Bennyhuo
Bennyhuo
UI 嵌套是常规操作,不管是 Flutter 的 Dart,还是 iOS 的 SwiftUI,还是 JavaScript 的 JSX,没有哪个不嵌套的。 用 Kotlin 写 UI 的 Compose 我还没用过,我个人还是喜欢 xml。
0
开源中国首席尿黄师
开源中国首席尿黄师

@Bennyhuo  这个不了解, Kotlin为Android的开发语言 ,比之前的java有什么优势呢?前排坐板凳,看各位高手过招!

Bennyhuo
Bennyhuo
优势就是语法简洁,特性灵活,除了做 Android 还能多平台 ~
0
开源中国首席罗纳尔多
开源中国首席罗纳尔多

@Bennyhuo 您好,请问kotlin也是编译成class,按道理都兼容,为什么Spring5.0有些版本更新会说兼容kotlin,兼容是指什么?最后都是class给jvm读取,是兼容哪些方面呢?

Bennyhuo
Bennyhuo
只兼容字节码岂不是显得太没追求。 毕竟一门新语言出来,有很多特性,也有自己的api设计风格,Spring 5.0 之后设计API的时候很多都会考虑 Kotlin 用户的使用,也会考虑 Kotlin 的更友好的语法特性。
0
west_coast
west_coast

@Bennyhuo  您好,  既然Kotlin 能像java一样快速编译,又有并发的优势,那我们以后可以抛弃java只用Kotlin开发安卓吗?

Bennyhuo
Bennyhuo
回复 @AndersMichael : 不不不,不是忍,他们俩是打了很久了:satisfied:
AndersMichael
AndersMichael
回复 @Bennyhuo : 我估计Google忍Oralce很久了
west_coast
west_coast
回复 @Bennyhuo : 哈哈!可以可以
Bennyhuo
Bennyhuo
当然可以只用 Kotlin 开发安卓,Google 官方已经在疯狂明示让大家这么做了。 不过,请不要抛弃 Java,我怕 Java 会伤心~
0
wy65
wy65

@Bennyhuo kotlin的协程能否复制到java语言中呢

Bennyhuo
Bennyhuo
Java 当中也在 Project Loom 当中尝试实现协程,但不同语言在协程实现上差异很大。
0
longforus
longforus

@Bennyhuo 书刚买,正在看,用kotlin也2.3年了,但是协程一直没有在项目中大量的用起来,之前用协程重构了项目中复杂的上传流程,看起来确实不错,目的也达到了,希望看完书后,能对协程有更深入的理解,问题现在暂时没有什么想问的.感谢

Bennyhuo
Bennyhuo
好的,有问题欢迎随时提问。
0
一个人的中台
Bennyhuo
Bennyhuo
Java 是一门好语言,我一直都非常喜欢。Kotlin 更好~ Java YES!Kotlin YES!
0
Morty_a
Morty_a

@Bennyhuo    bennyhuo老师,   我们的项目基本上都是使用 Java 编写的,我们没有精力也没有必要去全部用 Kotlin 重写。其次,Java 作为一门历经考验的语言,自然有它存在的道理,Kotlin 作为崭露头角的新秀,想请你谈谈 Kotlin 语言特性 相比于 java 有哪些 优缺点 , 还有就是  kotlinx.coroutines 核心这块 我理解的不是很透 ,请问你 这新书里面,有详解这一块吗

Bennyhuo
Bennyhuo
1. Java 的优缺点与 Kotlin 相比,可以长篇大论了,有很多,Java 语法特性不够灵活,对函数支持得不好,扩展性较差等等,我想,你可以去试着体验一下 Kotlin,可能也就是一两个小时的事儿。 2. 协程框架这块儿,必须有详细的解释,不仅如此,我还专门手写了一个简化版的 CoroutineLite 框架来帮助读者深入理解协程框架的理解。
返回顶部
顶部