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

东月之神 东月之神     2022-12-07     567

关键词:

前言

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

1 基础语法

这里省略了很多一般的语言需要的语法,只简单介绍下开发时要用到的。

1.1 定义变量:

  • val: 不可修改的变量,类似final
val a: Int = 4 // 立刻赋值
val b = 8      // Int类型是自推导的
val c: Int     // 没有初始化器时要指定类型
c = 22         // 推导型赋值
  • var: 可修改的变量
var x = 20 

1.2 定义函数

一个a+b的函数,参数是a和b, 返回一个Int的结果

fun printSum(a: Int, b: Int): Int 
    println("sum of $a and $b is $a + b")

也可以写成,也即是单表达式函数

fun sum(a: Int, b: Int) = a + b

1.3 String模板:

使用$+变量名来获取对应的值用来字符串插值

var a = 1
var b = 2
var s1 = "sum of $a and $b is $a + b"
// $a, $b可以直接获取a和b的值
a = 3
b = 4
var s2 = "$s1.replace("is", "was"), but now sum is $a+b"

1.4 值检查以及自动转换

使用”is”操作符检查一个表达式是否是某个类型的实例,类似”instance”

fun getStringLength(obj: Any): Int? 
    // obj 将会在&&右边自动转换为 String 类型
    if (obj is String && obj.length > 0) 
        return obj.length
       
    return null

1.5 for循环

使用 in 操作符遍历items列表数据

val items = listOf("hello1", "hello2", "hello3")
for (item in items) 
    println(item)

1.6 ranges

  • 使用 in 操作符检查数值是否在某个范围内
val x = 10
val y = 9
if (x in 1..y+1) 
    println("fits in range")
  • 使用范围内迭代
for (x in 1..5) 
    print(x)
  • 使用步进
for (x in 1..10 step 2) 
    print(x)

for (x in 9 downTo 0 step 3) 
    print(x)

1.7 when表达式

fun describe(obj: Any): String =
when (obj) 
    1 -> "One"
    "Hello" -> "Greeting"
    is Long -> "Long"
    !is String -> "Not a string"
    else -> "Unknown"

2 常用

2.1 函数默认参数

fun foo(a: Int = 0, b: String = "")  ... 

其中a和b都有默认的构造函数,在创建对象的时候就不需要给它赋值了

2.2 过滤list

val positives = list.filter  x -> x > 0 
或者
val positives = list.filter  it > 0 

这里使用了lambda表达式,list的filter过略掉x>0的,当然不指定x的话,可以用it代替

2.3 实例检查

when (x) 
    is Long -> ...
    is String -> ...
    else -> ...

2.4 操作符 ?

表示这个对象可能为空

//在变量类型后面加上问号,代表该变量是可空变量  
var name: String? = "eastmoon"

这里的name后续可以赋值为空,

//在变量类型后面加上问号,代表该变量是可空变量  
var name: String = "eastmoon"

这里的name后续不可以赋值为空

2.5 操作符 ?.

如果不为空则… 的简写

val files = File("Test").listFiles()
println(files?.size)

2.6 操作符 ?. ?:

如果不为空…否则… 的简写

val files = File("test").listFiles()
println(files?.size ?: "empty")

2.7 操作符 ?.let

如果不为空执行某操作

val data = ...
data?.let
...//如果不为空执行该语句块

2.8 操作符 ?.let ?: let

如果不为空执行某操作,否则执行某操作

val data = ...
data?.let
...//如果不为空执行该语句块
 ?: let
...//如果为空执行该语句块

2.9 try-catch 表达式

fun test() 
    val result = try 
        count()
     catch (e: ArithmeticException) 
        throw IllegalStateException(e)
    
    // Working with result

2.10 符号::

得到类的Class对象

startActivity(Intent(this@MainActivity, TestActivity::class.java))

2.11 符号@

  • 限定this的类型
class User 
    inner class Test 
        fun getUser(): User 
            //返回User
            return this@User
        

        fun getTest(): Test    
            //返回Test
            return this@Test
        
    
  • 标签

跳出双重循环

val arrays = listOf(1, 2, 3, 4, 5)
loop@ for (i in 0..9) 
    for (itemB in arrays) 
        if (itemB > 2) 
            break@loop
        
        Log.d("Main", "itemB:$itemB")
    

android开发学习之路--kotlin之常用表达式及函数

中缀表达式只有一个参数,用infix修饰的函数infixfunshouldBe(name:String)thisshouldBe"666"if表达式看一个max函数,这里的if是有返回值的,也就是a>=b返回a,否则返回bfunmax(a:Int,b:Int)=if(a>=b)aelsebwhen表达式判 查看详情

kotlin官方学习教程之基础语法

Google在今天的举行了I/O大会,大会主要主要展示内有容AndroidO(Android8.0)系统、GoogleAssistant语音助手、Google智能音箱、人工智能、机器学习、虚拟现实等。作为一个Android开发者,我关心的当然是AndroidO(Android8.0)系统了,那么... 查看详情

android开发学习之路--kotlin之类及对象

前言1类和继承1.1类classMyClass1.2构造函数一个主构造函数以及多个二级构造函数classPersonconstructor(firstName:String)//也可以省略constructor,写成:classPerson(firstName:String)在@Inject的时候不能省略constructorclassPerson@In 查看详情

golang学习之路

Golang基础Golang基础之包概念Golang基础之数据类型Golang基础之流程控制Golang基础之数组Golang基础之切片Golang基础之mapGolang基础之函数Golang基础之指针Golang基础之结构体Golang基础之接口GolangWeb开发Golang其它算法 查看详情

android开发学习之路--网络编程之xmljson

  一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的。常用的就是xml和json了。在此先要搭建个简单的服务器吧,首先呢下载xampp,然后安装之类... 查看详情

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

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

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

Kotlin本Blog是我学习《Android第一行代码-第三版》的学习笔记,将会不定期断更持续更新。(默认大家都和我一样学过C++或Java的基础语法)。Kotlin简介在Android诞生的前几年中,Java一直是Android的主要开发语言。在2017年&#... 查看详情

android开发学习之路--插件化基础动态代理hook

插件化中需要使用到hook技术,这里先了解下hook技术,以方便继续看代码,既然是代理,那就先来了解下代理设计模式吧。1代理代理,或者称为Proxy,简单理解就是事情我不用去做,由其他人来替我完... 查看详情

kotlin基础学习(代码片段)

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

java学习之路之javase基础2

java学习之路之javaSE基础2所有的代码都是引用他人写的。1、逻辑运算符1//&,|,^,!2//intx=10;3//5<x<154//x>5&x<155//逻辑与&并且and遇false则false6inta=10;7intb=20;8intc=30;9/*System.out.println(a<b&b<c);//tr 查看详情

java学习之路之javase基础1

<h2>java学习之路之javaSE基础1</h2><div>###01.01_计算机基础知识(计算机概述)(了解)*A:什么是计算机?计算机在生活中的应用举例 *计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行,自动、高速处... 查看详情

go语言之路—博客目录

Go语言介绍为什么你应该学习Go语言?开发环境准备从零开始搭建Go语言开发环境VSCode配置Go语言开发环境Go语言基础Go语言基础之变量和常量Go语言基础之基本数据类型Go语言基础之运算符Go语言基础之流程控制Go语言基础之数组Go... 查看详情

java学习之路之javase基础3

所有代码都未经测试。。1:for循环的格式? for循环格式: for(初始化表达式;条件表达式;循环后的操作表达式){ 循环体; } 执行流程: *a:执行初始化语句 *b:执行判断条件语句,看其返回值是true还是false *如果是true,就继续执行 ... 查看详情

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

...初学Kotlin,如有错误,请帮忙指出,持续更新Android:Kotlin详细入门学习指南-高阶函数-基础语法(七)建议先看看前面的文章Android:Kotlin详细入门学习指南-基础语法(一)Android:Kotlin详细入门学习指南-基本类... 查看详情

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

...初学Kotlin,如有错误,请帮忙指出,持续更新Android:Kotlin详细入门学习指南-类和对象-基础语法(四)建议先看看前面的文章Android:Kotlin详细入门学习指南-基础语法(一)Android:Kotlin详细入门学习指南-基本类... 查看详情

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

...初学Kotlin,如有错误,请帮忙指出,持续更新Android:Kotlin详细入门学习指南-类和对象(下)-基础语法(五)建议先看看前面的文章Android:Kotlin详细入门学习指南-基础语法(一)Android:Kotlin详细入门学习指南-基... 查看详情

kotlin开发基础从0开始

为什么学习kotlinkotlin在今年的GoogleIO上正式被确认为Android的官方开发语言,想必原因大家也能猜到一二,一是Google与oracle关于Java相关的版权相关的问题,二是kotlin语言很简洁,不罗嗦,支持很多的新特性。由于Google都已经官方... 查看详情

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

...初学Kotlin,如有错误,请帮忙指出,持续更新Android:Kotlin详细入门学习指南-函数-基础语法(六)建议先看看前面的文章Android:Kotlin详细入门学习指南-基础语法(一)Android:Kotlin详细入门学习指南-基本类型-基... 查看详情