前言
即日, Kotlin 从入门到夺门而出系列正式开坑了,唯一希望的是我能够填完整个坑。
本篇为开坑篇,主要从以下几个方面出发,解答正在踌躇徘徊的人的疑惑,也是为了完整的引人入坑。
- 什么是 kotlin?
- kotlin 在能取代 Java 吗?
- 为什么要学习 kotlin?
- 我该如何学习 kotlin?
正文
什么是 kotlin?
什么是 kotlin?
关于什么是 kotlin,我们先来看官方的解释:
Statically typed programming language
for modern multiplatform applications
100% interoperable with Java:tm: and Android:tm:
翻译为中文:
用于现代多平台应用的
静态编程语言
与 Java:tm: 和 Android:tm: 100% 可互操作
Kotlin 是一种静态类型编程语言,可在 Java 虚拟机上运行,也可编译为 JavaScript 源代码或使用 LLVM 编译器基础结构。
kotlin 的起源
kotlin 是有 JetBrains 由 2011 年 7 月推出,2012 年 2 月根据 Apache 2 许可将 kotlin 开源,2016 年 2 月 15 日正式推出 v1.0 稳定版本,而在在 Google I / O 2017 上,Google 正式宣布 kotlin 成为 Android 开发的官方语言。
而 kotlin 这个名字的由来和 Java 差不多,这个名字来自圣彼得堡附近的科特林岛。
kotlin 的发展前景
自从谷歌宣布 kotlin 为 Android 开发的官方语言后,热度直线上升。国内虽然还没有达到普及的地步,但是已经有很多大厂已经开始逐步的接入并进行替换。
还有就是 JakeWharton 加入谷歌后,传闻在用 kotlin 来重写底层代码。另外虽然 kotlin 能编译成 JavaScript,但是使用得也是比较少,还要就是现在的实验版本正在向开发 iOS 应用发展,拭目以待吧。
kotlin 在能取代 Java 吗?
作为一个普通人,我还看不到那么远,我只能从我身边说起。
对于后端:
- 我身边的后端开发仍然全部是使用 Java 来开发,对于 kotlin 是比较抵触,大体原因是学习成本和兼容性,码龄越大的工程师,尤其是没有第二语言的工程师,更不愿意接受新语言。
对于 Android 开发:
- 我在两年前接触 kotlin,一年半前正式在新的项目中接入 kotlin,对于我的感受是则是减少了大量的代码量,尤其是加上我自己封装的基类和模板,与之前的我相比,足足减少了 80% 的代码量,效率足足提升两倍,这也导致上级迟迟不招人,只有我一个人开发维护 4 个项目。
- 终于最近在招人,然而会用 kotlin 的人少之又少,最终我也只能降低要求,起码 Java 与 kotlin 能够混编嘛,但是 kotlin 未来肯定是一个趋势,不会 kotlin 不会找不到工作,但是会 kotlin 起码会加分。对于我来说,会新语言,证明人比较好学,容易接受新的技术,有上进心。
结论:kotlin 不会取代 Java,最终的结果是共存。
为什么要学习 kotlin?
为什么要学习 kotlin?前面的大道理就不重新讲了,我们直接上实例,希望能激起你的兴趣!
Kotlin Android Extensions
这是我当时下定决心入手 kotlin 的原因之一,这玩意可以让你省去 fvb 和 butterknife,直接通过 id 来进行引用,还不用担心类型转换的问题,简直清爽到爆。来看看下面的代码吧:
在布局中:
<TextView
android:id="@+id/mToolbarTitleTv"
style="@style/ToolBarTitleStyle" />
那么我们可以直接在 Activity 中进行引用:
mToolbarTitleTv.text="测试页面"
mToolbarTitleTv.setOnClickListener{
// todo
}
? 空判断
这个非常常用,自从用上了 kotlin,再也看不到烦人的空指针了。
(数据可以不正确,但是绝对不能崩溃)
textView.text=ojb?.name?:""//为空的时候直接赋值空字符串
ojb?:let { } //为空的时候调用代码块
ojb?.let { } //非空的时候调用代码块
延时加载(by lazy)
就是字面上的意思:延时加载对象,只有在使用到的时候才进行初始化。就像这样
/**日期选择帮助类*/
private val mDatePickViewHelper: DatePickViewHelper by lazy {
DatePickViewHelper()
}
注意:
1. 使用延时加载, 必须要使用 val 作为修饰符
2. 语句块的最后一行是返回结果
高阶函数
函数定义:
apply
public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }
with
public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
功能:调用某对象的 apply 函数,在函数块内可以通过 this 指代该对象。返回值为该对象自己。
list.all
//遍历所有,看看是不是全部都选中了
if (mDatas.all { it.isSelected }) {
}
其他更多,略。
函数参数
将一个函数作为参数传递给另外一个参数。个人感觉和 Callback 接口好像。
private fun request(param: Param, block:(result:String)->Unit){
//一些网络操作。。。
block.invoke("请求结果")
}
上面这个函数接收一个 param 参数和一个 block 的参数类型为 String 的空返回值的函数。在调用的时候可以这么写:
request(param){
result ->
}
拓展函数
相当于 utils 类,但是用起来比 utils 更爽,可以直接通过【对象.方法】的方式进行调用。
ImageView
fun ImageView.loadImage(url: String?) {
if (!url.isNullOrEmpty()) {
//加载图片
Glide.with(context).load(url).into(this)
}
}
调用的时候直接用 iamgeview.loadImage(),好爽有没有,而且就算到时候切换加载 lib 也是很方便的更改
TextView
返回内容文本
fun TextView.contentText(): String {
return text.toString()
}
判断文本长度
fun TextView.equalLength(length: Int): Boolean {
return text.toString().length >= length
}
判断非空
fun TextView.isEmptyText(): Boolean {
return contentText().isNullOrEmpty()
}
判断相等
fun TextView.equalsText(text: String?): Boolean {
return contentText() == (text)
}
字符串更改后
fun TextView.afterTextChanged(block: (str: String) -> Unit) {
this.addTextChangedListener(object : BaseTextWatcher() {
override fun afterTextChanged(s: Editable?) {
//返回数据
block.invoke(contentText())
}
})
}
Intent 相关
这一部分在 anko 已经完善了,建议都去看看。
有了这部分拓展,启动一个 Activity 就非常的简单了
startActivity<Activity>("key1" to "value1" , "key2" to value2)
更多更多,略。。
怎么样?有没有激起想法?
我该如何学习 kotlin?
如何学习 kotlin?有以下几个方面!
- 跟着官方文档把所有的例子敲一遍,恭喜你:你已经入门了。
- 在之前的基础上,可以考虑在某个小模块中直接开始使用 kotlin 吧,因为工作需要才会有压力。
- 不要怕踩而放弃 kotlin,相信我,如果在不熟悉的情况之下进行直接编码,是会很难受,但是一旦熟悉,你将会很爽。
- 多看官方文档和逛论坛、博客。
- 看视频
- 当然,最重要的一点是:要有时间!
结论
对于一个 Android 开发者,可以选择不学习 kotlin,但是如果会 kotlin 将会是加分项,而如果是在新的工作环境中要求使用 kotlin 的时候,请不要推脱,请勇敢的接受新的事物。
对于一个 Java 开发者,学不学习 kotlin,使不使用 kotlin 完全看整个项目的结构和 leader 的意思,但对于老旧项目,个人建议还是不要接入。
早用早享受!
最后
如果你对 kotlin 起了兴趣,可以跟着剩下的文章慢慢学习和深入,不单只是讲语法,还讲实例和在开发中遇到的各种坑。
未完待续、敬请期待!
我的博客地址
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于