android开发语言——kotlin学习笔记(代码片段)

L_Hygen L_Hygen     2023-01-03     656

关键词:

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型数据。

小知识(tip)

此处还有一个Kotlin的函数的语法糖:
当函数中只有一行代码时,Kotlin函数允许我们不必编写函数体,可以直接将唯一的一行代码写在函数定义尾部,中间用等号连接即可。

fun largerNumber(num1 : Int,num2 : Int) = max(num1,num2)

程序逻辑控制

程序的执行语句主要分为三种:顺序语句条件语句循环语句

顺序语句

顺序语句很好理解,就是程序一行一行往下执行。

条件语句

条件语句主要有两种实现方式:ifwhen

if语句

此处有一个求两个数中较大值的函数如下

fun largerNumber(num1 : Int,num2 : Int): Int
    var value = 0
    if(num1 > num2)
    	value = num1
    else value = num2
    return value

varvalue的关键字是因为value是需要修改赋值的。
Kotlin中的if语句还有一个额外的功能,就是它是可以有返回值的。返回值就是if语句的每个条件中最后一行代码的返回值
因此此时我们可以将上面的函数简化成如下形式:

fun largerNumber(num1 : Int,num2 : Int): Int
    val value = if(num1 > num2)
    	num1
    else
    	num2
    return value

为什么这时value可以用关键字val了呢?因为if语句使用每一个条件最后一行代码作为返回值,并将值直接赋给了value变量,因此就没有重新赋值的情况了,因此就不需要var关键字了。
其实我们可以发现这个代码还可以优化。我们最后返回的是value,其实也就是if语句返回的值,那么我们就可以发现value其实也是一个多余的变量,我们可以直接将if语句返回,这样代码会更精简:

fun largerNumber(num1 : Int,num2 : Int): Int
    return if(num1 > num2)
    	num1
    else
    	num2

从函数的语法糖中我们可以将这段代码变得更加精简:

fun largerNumber(num1 : Int,num2 : Int) = if(num1 > num2) num1 else num2
when语句

Kotlin中的when语句有点类似于Java中的switch语句,但又远比switch语句强大的多。
Java的switch语句只能传入整型或短于整型的变量作为条件, JDK1.7之后增加了对字符串变量的支持,但是如果不是以上的几类变量,那么switch并不适合。
Kotlin中的when不仅解决了上述缺点,还增加了许多强大的新特性。
假设此时我们需要编写一个查询考试成绩的功能,输入一个学生的姓名,返回该学生考试的分数。

fun getScore(name : String) = if(name == "Tom") 
    86
 else if (name == "Jim") 
    77
 else if (name == "Jack") 
    95
 else if (name == "Lily") 
    100
 else 
    0

这个getScore()函数接收了一个学生姓名参数,然后通过if语句判断找到该学生的成绩并返回。但是if语句是否也太过冗余呢?

fun getScore(name : String) = when(name) 
    "Tom" -> 86
    "Jim" -> 77
    "Jack" -> 95
    "Lily" -> 100
    else -> 0

when语句和if语句一样都可以有返回值,因此我们同样可以使用单行代码的语法糖。
when语句允许传入任意一个类型的参数,然后可以在when的结构体中定义一系列条件,格式为:
匹配值 -> 执行逻辑。当执行逻辑只有一行代码时,可以省略。
除了精确匹配外,when语句还允许进行类型匹配,此时我们定义一个checkNumber函数:

fun checkNumber(num : Number) 
    when(num)
        is Int -> println("Number is Int")
        is Double -> println("Number is Double")
        else -> println("number not support")
    

上述代码中,is关键字就是匹配的核心,它相当于Java中的instanceof关键字。Number是一个Kotlin内置的抽象类,像IntDoubleLong等都是它的子类,因此此处就让checkNumber函数接收一个Number类型的参数,再进入判断。

fun main() 
    val num = 12
    checkNumber(num)

这里向checkNumber函数传入了一个Int型的参数,运行程序,结果如图:

when语句的基本用法就是这些。
when语句同样有不带参数的用法,虽然可能不太常用,但是有时候却能发挥很强的拓展性:

fun getScore(name : String) = when 
    name == "Tom" -> 86
    name == "Jim" -> 77
    name == "Jack" -> 95
    name == "Lily" -> 100
    else -> 0

虽然这种无参数的when语句可能会比较冗余,但是有些场景必须使用它才能实现。
例如,所有名字以Tom开头的名字,分数都是86分,这种情况用有参数的when语句是无法实现的,但是不带参数的when语句却可以解决。

fun getScore(name : String) = when 
    name.startsWith("Tom") -> 86
    name == "Jim" -> 77
    name == "Jack" -> 95
    name == "Lily" -> 100
    else -> 0

无论输入的是Tom还是Tomxx,输出都是86分

fun main() 
    val name = "Tom and Jerry"
    print(getScore(name))

kotlin基础学习(代码片段)

写在前面在刚开学的时候,买了一本《第一行代码Android》,但一直在上课没有机会看,这几天刚好写完了上一个项目,这段时间就对这本书进行了学习。在这本书中,由于谷歌大力推广kotlin语言,将其作为android开发的首推语言... 查看详情

字节+谷歌超全kotlin学习王炸笔记,kotlin入门教程+高级kotlin强化实战(附demo)(代码片段)

...们为什么要尝试Kotlin?Google发布申明,目前已经有35%的Android专业开发人员使用kotlin(爆发式增长)Google与Oracle源于Android的恩怨持续已久,也一直想要找一种语言代替JavaJava以后要开始收费了,可能导致一部分公... 查看详情

kotlin语言学习笔记

1funmain(args:Array<String>){2println("Hello,World!")3}  查看详情

android开发学习之路--kotlin之基础语法

...a代码写久了自然会想换个语言玩一下,而且kotlin作为android的官方语言,总是要学习下的,故这里先来学习下一些基本语法吧,打个小基础,后面才能游刃有余地开发。1基础语法这里省略了很多一般的语言需... 查看详情

(笔记)(代码片段)

探究新语言,快速入门Kotlin编程1.Kotlin1.1Kotlin在Android的地位在Android诞生以来,一直都是只提供Java这一种语言来开发应用程序的在2017年的I/O大会上,Google宣布了Kotlin作为Android的一级开发语言,和Java平起平坐在2019... 查看详情

(笔记)(代码片段)

探究新语言,快速入门Kotlin编程1.Kotlin1.1Kotlin在Android的地位在Android诞生以来,一直都是只提供Java这一种语言来开发应用程序的在2017年的I/O大会上,Google宣布了Kotlin作为Android的一级开发语言,和Java平起平坐在2019... 查看详情

androidgradle学习笔记语言和命令(代码片段)

...是使用Kotlin来写还是Groovy来写。不一定说你是KotlinAndroid开发者就一定要用Kotlin来写Gradle,我们得判断哪种写法更适合项目、更适合开发团队人群(学习成本)。所以下面来学习一下这两种语言的差异。1 查看详情

2019年度计划

...生态,而且还可以对前端开发如html,js,css等有个认识2Android开发语言kotlin,目标是能对新的工程完全进行kotlin开发以代替java语言  kotlin作为google官方所推的语言,相比较java其本身也有很强的性能,协程,多平台代码复用(... 查看详情

kotlin基础语法学习笔记(代码片段)

...in是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作ÿ... 查看详情

字节内部超全kotlin学习笔记,快速上手kotlin开发,基础+实战+源码,手把手带你吃透kotlin语法与协程。(代码片段)

...0个应用程序中有80%以上使用Kotlin。这也意味着,对于Android应用开发者来说,仅仅掌握Java是不够的,你还应该学习Kotlin,才能追上技术发展趋势,在工作中更加游刃有余。高效掌握Kotlin的方法Kotlin是门典型的... 查看详情

了解kotlin,看这个就够了

在这本书中,我会使用Kotlin作为主要的语言来开发一个android应用。方式是通过开发一个应用来学习这门语言,而不是根据传统的结构来学习。我会在感兴趣的点停下来通过与Java1.7对比的方式讲讲Kotlin的一些概念和特性。用这种... 查看详情

android:kotlin详细入门学习指南-基础语法(代码片段)

Android:Kotlin详细入门学习指南-基础语法(一)本人也是在初学Kotlin,如有错误,请帮忙指出,持续更新Kotlin被Google官方认为是Android开发的一级编程语言自2019年GoogleI/O以来,Kotlin就成为了Android移动开发的首选。... 查看详情

想要了解kotlin,看这个就够了

在这本书中,我会使用Kotlin作为主要的语言来开发一个android应用。方式是通过开发一个应用来学习这门语言,而不是根据传统的结构来学习。我会在感兴趣的点停下来通过与Java1.7对比的方式讲讲Kotlin的一些概念和特性。用这种... 查看详情

kotlin学习资料

...一些最新最潮的技术文章2017-5-18GoogleI/O大会指定Kotlin成为Android的官方开发语言本项目地址:https://github.com/kotlinandroid/kotlin-for-android欢迎大家??????以下是收集整理的Kotlin资料Kotlin官方资料Github地 查看详情

android学习笔记-service(kotlin实现)(代码片段)

...vice简介service和activity、contentProvider、BroadcastReceiver并称为Android四大组件,其地位不言而喻,在使用中也确实举足轻重。service的直接翻译为服务,它是一种在后台执行长时间 查看详情

androidgradle学习笔记语言和命令(代码片段)

...是使用Kotlin来写还是Groovy来写。不一定说你是KotlinAndroid开发者就一定要用Kotlin来写Gradle,我们得判断哪种写法更适合项目、更适合开发团队人群(学习成本)。所以下面来学习一下这两种语言的差异。1.Groovy和Kotlin的... 查看详情

别扯了,kotlin真是项目开发必备吗

...势是什么?你是否考虑过切换到Kotlin,它是支持Android开发的热门语言。它在开发人员中迅速普及背后的原因是什么?一、简介Kotlin是一种在Java虚拟机上运行的静态类型编程语言。它主要是JetBrains开发团队所开发出来... 查看详情

《第一行代码》第三版-第二章(笔记)(代码片段)

探究新语言,快速入门Kotlin编程1.Kotlin1.1Kotlin在Android的地位在Android诞生以来,一直都是只提供Java这一种语言来开发应用程序的在2017年的I/O大会上,Google宣布了Kotlin作为Android的一级开发语言,和Java平起平坐在2019... 查看详情