Android开发语言——Kotlin学习笔记

Source

Kotlin

本Blog是我学习《Android第一行代码-第三版》的学习笔记,将会不定期断更持续更新。(默认大家都和我一样学过C++或Java的基础语法)。

Kotlin简介

在Android诞生的前几年中,Java一直是Android的主要开发语言。在2017年,Google在I/O大会上宣布,Kotlin正式成为Android的一级开发语言,与Java平起平坐,同时Android Studio也对Kotlin进行了全面的支持。
2019年,Google在I/O大会上宣布,Kotlin已成为Android的第一开发语言,Java虽然可以继续使用,但是Google更推荐开发者使用Kotlin编写Android应用程序,并且未来提供的官方API也会优先考虑Kotlin版本。

Kotlin语言的优点

  1. Kotlin语法更加简洁。对同样的功能,Kotlin开发的代码量可能会比Java开发的减少50%甚至更多。
  2. Kotlin语法更加高级。相比于Java较为老旧的语法,Kotlin增加了许多现代高级语言的语法特性,大大提高了开发效率。
  3. Kotlin在语言安全性方面下了很多功夫。几乎杜绝了空指针这个全球崩溃率最高的异常。
  4. Kotlin与Java语言100%兼容。Kotlin可以直接调用使用Java编写的代码,也可以无缝使用Java的第三方开源库。因为Java和Kotlin编译后都生成.class文件,然后由Java虚拟机进行识别运行。

如何运行Kotlin代码

  1. 使用IDEA。IDEAyyds。
  2. 在线运行Kotlin代码。JetBrains同样提供了在线运行Kotlin代码的网站。
  3. 使用Android Studio。Android Studio不能单独创建Kotlin项目,只能创建Android项目,然后在项目中编写一个Kotlin的main()函数这样就可以独立运行Kotlin代码了。

Kotlin语法

细节

  • Kotlin每一行代码的结尾是不用加分号的。

变量

在Kotlin中定义一个变量,只允许在变量前声明两种关键字:val(value)和var(variable)。
val : 声明一种不可变的变量,这种变量在初始赋值之后便不能再重新赋值,对应Java中的final变量
var:声明一个可变的变量,这种变量在初始赋值之后仍可以再被重新赋值,对应Java中的非final变量
那么就有一个疑问了,这个声明只说了该变量是可变的还是不可变的,如果知道它的数据类型呢?这就是Kotlin比较有特色的一点了,它有出色的类型推导机制(这点感觉和python有点像)。你第一次给它赋的值就是这个变量的数据类型。
假如写一个函数:

fun main() {
    
      
    val a = 10
    println("a = " + a)
    val b = "abc"
    println("b = " + b)
}

类型推导机制
但是自动推导类型只有在初始时就赋值的情况下才会进行,如果刚开始只是声明不赋值的话,这么写就会报错。

// 错误示范
fun main() {
    
      
    val a
    a = 10
    println("a = " + a)
}

报错
这时我们就需要显式地声明a的数据类型。

// 正确示范
fun main() {
    
      
    val a : Int
    a = 10
    println("a = " + a)
}

正确
如果和学过Java的话就会发现,Java的变量名都是首字母小写的,例如:int,double,boolean,char,但是Kotlin中的变量首字母却都是大写的,例如Int,Double,Boolean,Char等等。这意味着Kotlin已经完全抛弃了Java的基本数据类型,全部使用了对象数据类型(类似于Java的String),在Java中的int是关键字,而在Kotlin中Int变成了一个类,它拥有自己的方法和继承结构。

原则上我们优先使用val来声明一个变量,而当val无法满足需求时再使用var,这样写出来的程序会更加健壮,更加高质量。

函数

函数是用来运行代码的载体,当调用这个函数时,这个函数里面的代码都会运行,main()函数就是程序入口函数。
Kotlin同样允许自定义函数,语法规则如下:

fun methodName(param1 : Int,param2 : Int) : Int{
    
      
	return 0
}

语法解释

首先,fun是定义函数的关键字,无论定义什么函数,都要用fun来声明。
紧跟在fun之后的是函数名, 这个就没什么要求了,可以根据自己喜好起任意函数名(有意义的为佳)
函数名后接一对括号,里面声明该函数接受什么参数,上述示例中就是两个Int型参数。参数的声明格式是:参数名:参数类型,其中参数名也是可以任意定义的,如果不想接受任何参数,则保留空括号即可。
参数括号后面那部分是可选的,用于声明该函数的返回值类型,上面实例就表示函数会返回一个Int型数据。