Kotlin从入门到夺门而出(1) - 开坑篇

简介: 前言即日, Kotlin从入门到夺门而出系列正式开坑了,唯一希望的是我能够填完整个坑。本篇为开坑篇,主要从以下几个方面出发,解答正在踌躇徘徊的人的疑惑,也是为了完整的引人入坑。

前言

即日, Kotlin从入门到夺门而出系列正式开坑了,唯一希望的是我能够填完整个坑。
本篇为开坑篇,主要从以下几个方面出发,解答正在踌躇徘徊的人的疑惑,也是为了完整的引人入坑。

  • 什么是kotlin?
  • kotlin在能取代Java吗?
  • 为什么要学习kotlin?
  • 我该如何学习kotlin?

正文

什么是kotlin?

什么是kotlin?

关于什么是kotlin,我们先来看官方的解释:

Statically typed programming language
for modern multiplatform applications
100% interoperable with Java™ and Android™

翻译为中文:

用于现代多平台应用的
静态编程语言
与 Java™ 和 Android™ 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)

startActivity拓展

更多更多,略。。
怎么样?有没有激起想法?

我该如何学习kotlin?

如何学习kotlin?有以下几个方面!

  • 跟着官方文档把所有的例子敲一遍,恭喜你:你已经入门了。
  • 在之前的基础上,可以考虑在某个小模块中直接开始使用kotlin吧,因为工作需要才会有压力。
  • 不要怕踩而放弃kotlin,相信我,如果在不熟悉的情况之下进行直接编码,是会很难受,但是一旦熟悉,你将会很爽。
  • 多看官方文档和逛论坛、博客。
  • 看视频
  • 当然,最重要的一点是:要有时间!

结论

对于一个Android开发者,可以选择不学习kotlin,但是如果会kotlin将会是加分项,而如果是在新的工作环境中要求使用kotlin的时候,请不要推脱,请勇敢的接受新的事物。
对于一个Java开发者,学不学习kotlin,使不使用kotlin完全看整个项目的结构和leader的意思,但对于老旧项目,个人建议还是不要接入。

早用早享受!

最后

如果你对kotlin起了兴趣,可以跟着剩下的文章慢慢学习和深入,不单只是讲语法,还讲实例和在开发中遇到的各种坑。

未完待续、敬请期待!
我的博客地址

img_1ee92a858822d3b1d90a45e40e7b1042.jpe
FullScreenDeveloper
目录
相关文章
|
6月前
|
Java Kotlin
开心档-软件开发入门之​Kotlin 基本数据类型​
开心档-软件开发入门之​Kotlin 基本数据类型​
15 0
|
7月前
|
Java 开发工具 Android开发
Kotlin入门学习
Kotlin入门学习
39 0
|
6月前
|
Java Unix 编译器
开心档-软件开发入门之​Kotlin 使用命令行编译​
开心档-软件开发入门之​Kotlin 使用命令行编译​
27 0
|
6月前
|
Java Kotlin
开心档-软件开发入门之​Kotlin 条件控制
开心档-软件开发入门之​Kotlin 条件控制
19 0
|
6月前
|
Java Unix 编译器
开心档-软件开发入门之​Kotlin 使用命令行编译​
开心档-软件开发入门之​Kotlin 使用命令行编译​
|
6月前
|
Java iOS开发 Kotlin
开心档-软件开发入门之​Kotlin 基本数据类型​
开心档-软件开发入门之​Kotlin 基本数据类型​
|
11月前
|
Java Kotlin
开心档-软件开发入门之​Kotlin 基本数据类型
前言 本章将会讲解 Kotlin 基本数据类型 目录 Kotlin 基本数据类型 字面常量 比较两个数字 类型转换 位操作符 字符 布尔 数组 字符串 字符串模板
|
11月前
|
NoSQL MongoDB 数据库
开心档-软件开发入门之Kotlin 基础语法
前言 目录 Kotlin 基础语法 包声明 默认导入 函数定义 可变长参数函数 lambda(匿名函数) 定义常量与变量 注释 字符串模板 NULL检查机制 类型检测及自动类型转换 区间 实例测试 实例 本章将会讲解 Kotlin 基础语法 在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。
|
JSON 算法 安全
Kotlin协程入门食用指南
我们需要处理并发过程中的调度问题,使应用程序在这种操作过程中不至于阻塞,而造成应用崩溃。为此,官方推出了协程来编写非阻塞并发代码来解决以上需求,让我们对协程进行相关知识点学习
346 0
|
API UED Kotlin
Kotlin Flow 看这一篇 带你入门~
Kotlin Flow 看这一篇 带你入门~
1057 1
Kotlin Flow 看这一篇 带你入门~