Kotlin!从小白角度的完全感性认知

不太想用 “学Kotlin” 这样的字眼,因为热爱的想用的语言本身就是用着用着就熟悉了。

但所有人在入坑之前,大抵都会问这样的问题:“为什么要学这个(Kotlin)?”。还在观望的人哟,答案不是因为Kotlin成为了安卓的官方语言 ,也不是因为 “避免被时代淘汰所以要更新自己的知识库” 这样的混理由。

这篇文章写给观望Kotlin的朋友,想要 从小白角度说一下对Kotlin这门语言的直观感受,应该可以给出答案,帮助建立最感性的认知吧~
楚门的世界

如果可以开心地敲代码

1. have fun

第一个感性的认知是函数,Koltin的函数形如

fun sayHello(){
    Log.d(TAG, "Hello, Kotlin~!")
}

Kotlin 函数用的是fun关键词,巧妙指代function的意思,但总感觉有funny的意思。每敲一遍函数好像就会更快乐一些,对!就是这么不讲证据。
A梦
事实上,Kolin的快乐确实已深入骨髓地流淌在它的血液中,你可以在任何地方发现它。

举一些细小的栗子吧:

① 比如,你一定在Java中犯过字符串==错误

在java中,==是对比字符串地址

String a = "hello";
String b = "Kotlin";
String c = "helloKotlin";
String f = a + b;

//Java中, result为false
boolean result = (c == f);

而在kotlin中更符合我们理解的习惯,==等同于.equls(..),仅===代表比较对象地址。

//kotlin中, result为true
val result = (c == f)

此外,你可以$拼接字符串和属性,再也不用 + 这种笨方式了

//java
Log.d(TAG, "My Name is " + user.getName());

//kotlin
Log.d(TAG, "My Name is ${user.name}")
② 比如,对集合的操作变得如此容易

Kotlin集合中的Lamda实在太多,只有列举几个简单的展示Kotlin的风采啦

//kotlin中, 遍历每一个元素
list.forEach {
		//it为遍历时的当前子元素
        Log.d(TAG, "value is $it")
     }

//kotlin中, 找出满足条件的元素
val positiveNumbers = list.filter { it > 0 }

//kotlin中, 把集合的元素全部乘以2
val newList = list.map{it * 2}

....
③ 再比如,更多的Lamda的书写方式

Kotlin的甜度不单单在集合,来爱上更多Lamda语法吧

//kotlin的类库对唯一参数的方法进行了优化,如绑定监听时
view.setOnClickListener{
	//do your things!
	...
}


//避免对象的重复样板代码,如用with(obj){..}的方式
with(bean){
	/*
	* 在adapter中通过对象提供显示数据的场景
	* this.title等同于bean.title
	* this可省略
	*/
	titleTv.text = this.title
	titleTv.textSize = this.titileFontSize
	contentTV.text = this.content
	contentTV.textSize = this.contentFontSize
}

...

语法糖的作用,与其说为了增加工作效率,不如说是让我们编码更加开心。是真甜呀,毕竟大段冗长的代码就像 * 一样的存在,爱了爱了。
害羞


2. 我想“惜码如金”

继续说

我相信每一个工程师都会对代码简洁有严重的偏执,类似于孩童的一种情绪,如果能极简地编写逻辑,一定会有一种“高级感”油然而生。

Kotlin的极简除了各类的语法糖外,还在与引入 特殊类data classobject单例身上

① 想要Bean类?写一个data class就好了

以下这一行代码,等同于 一字不落地创建Java中的bean类

/*
 使用一行代码创建一个包含 getters、 setters、 
 `equals()`、 `hashCode()`、 `toString()` 以及 `copy()` 的bean类
*/
data class Customer(val name: String, val email: String, val company: String)
② 想要单例?创建一个 object 就可以了
// 创建一个object
object Singleton {
    val companyName: String = "JetBrains"
}

在Java中调用Kotlin的 object 是这样的:Singleton.INSTANCE

这既证明了object 是不择不扣的单例,也说明了与Java良好的互通性。


3.Coding的更多的可能

除了 “更好的Java” 思想外,在设计上,Kotlin就已经与Java有明显的区别:

① 这是一个空安全的世界
i. 剔除null的对象

我们需要一些前置的知识,在Kotlin中,默认类型是非空的,而 可空类型 则需要在类型后加?。如:

//name是一个非null字符串,后续也不能再赋予null值
var name : String = "JetBrains"

//companyName是一个可空字符串,可赋值为null
var companyName : String? = null

非空对象赋值为null时会报错:
非空对象赋为null
可空对象的方法/属性直接调用也会报错:
调用可空函数的对象
Kotlin承诺: 对于非空类型不管如何使用都不会产生空安全问题,对于可空类型则拒绝直接调用其属性或方法,所以Kotlin是空安全的。

这样,我们终于逃脱了每次使用前都需要判断非空的地狱。

😡😠

ii. 可空对象的操作

对于可空类型的操作(为了兼容Java,避免不了Null的引入),Kotlin的处理也可以说非常优雅。

(1) ?.空不受理

//当companyName为null时, 不执行.后的内容,返回为null
companyName?.length

(2)!!非空断言

//自信断言companyName一定不为null, 为null则抛出异常
companyName!!.length

(3)?:空则赋值

//当companyName为null时, 赋值为"JetBrains"
companyName?:"JetBrains"

//甚至可以这样写,抛出异常
companyName?:throw NullPointerException("companyName is null")
② 函数大行其道

函数编程无疑是更火热和具有可能性的存在,这一点Kotlin也进行了很好的支持。

i.函数作为参数传递
fun sayHello(){
    Log.d(TAG, "Hello, Kotlin~!")
}

//参数为一个 无参且返回值为Unit的函数,如sayHello()
fun doSomething(dothing: () -> Unit) {
	//执行传入的函数
    dothing()
}

---
//函数doSomething的调用方式
doSomething(this::sayHello)

在上述代码中,doSomething传入一个无参且返回值为Unit的函数,并执行该函数

我们甚至可以在调用时再新定义所需的函数,如

//这是一个Lamda表达式,等价于doSomething({...})
doSomething{
    Log.d(TAG, "Hello, Kotlin~!")
}

可见,函数的大行其道无疑给Coding带来了更多可能性。

ii.扩展函数的使用

拓展函数完成 轻简地给某一既定类型添加方法 的实现

MutableList<Int>为例,我们给它写一个常用的 exchange/交换 方法

//原本MutableList<Int>是没有exchange方法的,现在给它拓展一个
fun MutableList<Int>.exchange(fromIndex:Int, toIndex:Int){
	val temp = this[fromIndex]
	this[fromIndex] = this[toIndex]
	this[toIndex] = temp
}

----
//我们就可以很方便对该函数进行调用了
val list = mutableListOf(1,2,3) 
//调用MutableList<Int>的扩展函数
list.exchange(1,2)

这样,我们重新理解了开闭原则,再也不用在强行继承和苦涩扩展的漩涡里打转。
害羞

以上…


未来的事情

相信你已经建立了感性的认知!

对Kotlin的认知可以用三个词语概括:快乐、实用、匹配。 快乐是无处不在的语法糖,实用是因为简明的特殊类和类型扩展等语法,匹配指与Java的完全兼容,与安卓开发需求所吻合的设计。

期待你寻找Kotlin的宝藏!

目前 Kotlin 和 Flutter 是安卓世界里最热门的两个话题,前者是Google推行的安卓官方语言,后者是跨平台的UI框架。
.
对Kotlin 和 Flutter 不太熟悉的同学,附上其他大牛博主的文章:
郭霖 - Kotlin vs Flutter,我到底应该怎么选?
恋猫de小郭 - 未来Android的从业方向
恋猫de小郭 - 谁告诉你 Flutter 会干掉原生开发?

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kotlin 是一种现代的静态类型编程语言,可以运行在 Java 虚拟机上,也可以编译成 JavaScript。它是由 JetBrains 开发的,并于2016年首次公开发布。Kotlin 最初是设计用于解决 Java 语言的一些问题,如繁琐的样板代码、空指针异常等。现在,Kotlin 已经成为一种流行的编程语言,被广泛用于 Android 开发、服务器端开发和其他应用程序。 "!!" 是 Kotlin 中的一个非常重要的操作符,称为 "非空断言运算符",可以将一个可空类型的变量转换为非空类型。但是使用该操作符需要非常谨慎,因为如果变量为 null,则会抛出 NullPointerException 异常。 ### 回答2: Kotlin的"!!"是一种语言特性,表示对一个对象进行非空断言。它的作用是告诉编译器,我确定这个对象一定不为空,不需要进行空检查。 在Kotlin中,对象可以分为可空类型和不可空类型。如果我们使用可空类型的对象调用一个方法或属性,编译器会强制我们进行空检查,以防止空指针异常的发生。但是有时候我们明确知道一个对象不可能为空,可以使用"!!"操作符来告诉编译器不需要空检查。 然而,使用"!!"操作符需要谨慎,因为如果我们错误地对一个为空的对象使用"!!",就会导致空指针异常的发生。因此,在使用"!!"操作符时,我们需要确保对象一定不为空,否则会抛出运行时异常。 总结来说,Kotlin中的"!!"是一种用于对不可能为空的对象进行非空断言的语言特性。它可以帮助我们避免不必要的空检查,但同时也需要我们谨慎使用,确保对象一定不为空。 ### 回答3: "kotlin !!" 是 Kotlin 编程语言中的一种运算符的写法。 在 Kotlin 中,"!!" 表示非空断言(Non-null Assertion)运算符。当我们在代码中使用 "!!" 运算符时,它的作用是告诉编译器一个承诺,即该对象不会为 null,可以放心地调用其属性或方法。 使用 "!!" 运算符需要注意,如果对象为 null,那么在运行时会抛出 KotlinNullPointerException 异常。因此,在使用 "!!" 运算符之前,需要确保该对象不为 null,否则会导致程序崩溃。 非空断言运算符 "!!" 的使用场景通常是在代码已经判断了对象不为 null 的情况下,为了更方便地调用对象的属性或方法,可以使用该运算符来省略不必要的空检查代码。 总之,"kotlin !!" 是 Kotlin 编程语言中的一个运算符,表示非空断言,用于告诉编译器对象不为 null,可以安全地调用其属性或方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值