前言 – 随笔
今年是2021年。
十年前,2011年的时候,Kotlin由 JetBrains公司的大神 Andrey Breslav 主导设计并成功发布。(我一看到And开头我还以为和安迪-E-鲁宾有啥关系,查了半天,没啥关系。)
说个题外话,安迪-鲁宾的这个名字老是让我联想到蒙奇-D-路飞,麻蛋,跑偏了。
拉回来,
2017年Google I/O 大会,宣布支持Kotlin,从那一天开始,Kotlin进入到了我的视野中。
当时,我看着官方文档学习了一点基础语法。
说实话,官方文档更适合当字典来使用,遇到不明白的场景去查一查还是挺合适的。但是硬是通过官方文档来学Kotlin,老实说实在是不友好。
自己学的也是不得要领,并没有体会到Kotlin丝滑起飞的感觉。
之后两年,
2018到2019,
我工作中实际项目使用的也全是Java开发的项目。Kotlin很久没有使用。
2019年,Google 官方提出”Kotlin – first”, 支持Kotlin 成为Android 开发的一级语言。JetPack 推出,优先Kotlin更新。一时风光无限。
搞Android 必须学习Kotlin!跑是跑不脱了。
2020年,Kotlin 几乎一下变成了应用开发的热门。尤其是协程。
几乎成为了兵家必争之地。
我们公司项目中老项目居多,新项目开始使用。
我借此机会,准备仔细的写个Kotlin 相关专栏——《跟着Java老大学习Kotlin》
希望我的Kotlin 探索之路可以帮助到大家,我的更新频率不会太快,我追求的是质量,追求慢慢把知识讲清楚的通畅感。
加油吧!奥利给!
同样都是跨平台,Kotlin和Java有什么不同?
Java是Android 程序员的本命语言,无论是JNI的C、C++ , 还是Groovy 、Kotlin 。都没有Java对Android 的影响重要。
当然,Kotlin现在已经在Android 端抢夺Java的饭碗了。不过,还需要时间。
Java 大火和他的跨平台属性关系很大。
Java 的宣传标语是“Write Once, Run AnyWhere!”
他是通过JVM来做到的。
简单的说就是,Java 代码编译成字节码,字节码是相同的。
但是JVM在不同的操作系统上,是不同的。
JVM集成了在目标平台上执行的指令集。操作系统的区别被JVM给处理了。
字节码运行在JVM上,以此来实现跨平台。
首先,我们来明确一点,跨平台不是什么新鲜事。
解释性语言,例如JavaScript ,浏览器就是它的运行环境,那么它的程序自然就跨平台。
但这个和Java强调的东西不同。
JS利用浏览器跨平台但是只能做浏览器环境的事情。
Java 利用JVM跨平台,Java可以做目标平台可以做的事情。这才是目的。
编程语言的分类
编程语言根据 “ 翻译方式 ”的不同,分为:编译型和解释型。
Java这样的设计思想就是结合了这两种翻译方式的思路,创造了编译 – 解释型。
我认为,编译型和解释型的根本区别就是是否生成机器语言。
所以Java的本质还是解释型语言,因为并没有生成机器语言,是由虚拟机来执行的。
这种把传统的翻译方式结合的做法,在很多语言身上都能看到。
和Java最像的就是C#,只是命运完全不同。这里就不说了。
到这里,你一定会觉得,Java太给力了。跨平台跨得稳稳的。
然而,Kotlin 告诉你,我全都要!
首先,Kotlin 是JVM语言。所以,它具有Java跨平台的能力。而且,Kotlin 和Java 100%互通。
所以,它和Scala、Groovy 这些语言的目的不一样,并不是希望在DSL的场景下做得更好。
而是剑锋直指Java!
这里,我认为与Google 和Oracle 关于 Java打官司的关系很大。88个亿啊!
JetBrains 这家捷克公司,和Google 的关系实在是太过暧昧。
他们开发了IDEA,这就是他们影响力最大的作品。
这是Java开发者的主要开发工具。
而Android Studio,就是以IDEA作为蓝本做的Android 开发工具,由Google和JetBrains联合开发。
Google 赔钱之后,急需一门语言来替代Java,因为一直使用,就有一直赔钱的风险。
于是,JetBrains 就开发了Kotlin。
有趣的是,Java这个名字是源自爪哇岛,Kotlin这个名字是源自科特林岛。
可以,这波算是致敬吧。
Kotlin 基金会主要负责设计这门语言,其中成员绝大部分是这两家公司的员工。
随着JetPack的问世,和 Kotlin – frist 的推广。
在Android应用开发领域,Kotlin 已经确定了江湖地位。
但是,Kotlin燃起了更大的野心。
或许从一开始就有。
就是它既然已经跨平台了,只是赖在Java的老本上实在是太没有意思。
要跨就干脆全跨了。
于是,Kotlin 支持JS互操作,Kotlin 还能编译成二进制文件,运行到各个平台。
复习一下
能编译成二进制文件的语言是什么语言?
编译型语言。
Java是什么语言?
编译-解释型语言。本质上就是解释型语言。
那么,Kotlin是什么语言?
它两者都是。它全都要。
对于Java的大本营服务器端,Spring 全家桶表示,我同样支持Kotlin。
所以,可以预见的是支持Kotlin的地方会越来越多。
多提一句,我现在也在学习使用Groovy来写Gradle 插件。Kotlin 同样可以写。
Kotlin 还搞出了KMM,这是移动端跨端的一个方案。
你没看错,Kotlin 把手伸向了iOS。
JetBrains对Kotlin说:你今天搞定七成Android,明天搞定五成Java服务端,后天搞定三成iOS和JS,大后天…
Kotlin : 大后天我就统一黑白两道!!
跨端是很多编程语言都做过的梦,无一例外,都失败了。C# 提供跨端Android 和 iOS的技术方案Mono, 凉得透透的。
鸿蒙的负责人在公开接受采访中也说过,鸿蒙不是想取代Android,这没有意义。鸿蒙要的是终端统一方案。
他不打算跨端,他和Android 走的路很像,跨个毛线端,每个端都是鸿蒙,自然就不需要跨端。
就像现在的车联网、智能手表、手机、平板电脑、智能家居、电视、物联网。Android 无处不在。
鸿蒙就要做这样的事情,当然,需要很多时间。
鸿蒙我认为是以后重要的中国移动操作系统的重要储备。
一旦,Google 开始要钱,我们国家可以切换到鸿蒙系统。反正我们国内的应用也不基于GMS。换了就换了。
我是做Android开发的,换个差不多的操作系统对我影响不大。反正他不能一天换完。有的是时间学。
后记
由于我希望把知识讲清楚点,所以很多常识性的知识,我会通过本文这样的方式科普给大家。
下一篇,我打算聊一下JVM 语言的技术常识。
巩固好技术常识,是学好Kotlin的关键。