Kotlin学习笔记(3)- 语法

来源:互联网 发布:ug8.0车床编程 编辑:程序博客网 时间:2024/06/05 20:37

系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正。如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN
Kotlin学习笔记(1)- 环境配置
Kotlin学习笔记(2)- 空安全
Kotlin学习笔记(3)- 语法
Kotlin学习笔记(4)- 流程控制
Kotlin学习笔记(5)- 类
Kotlin学习笔记(6)- 属性
Kotlin学习笔记(7)- 接口
Kotlin学习笔记(8)- 扩展
Kotlin学习笔记(8)- 扩展(续)
Kotlin学习笔记(9)- 数据类
Kotlin学习笔记(10)- 泛型
Kotlin学习笔记(11)- 内部类和嵌套类
Kotlin学习笔记(12)- 委托
Kotlin学习笔记(13)- 函数式编程
Kotlin学习笔记(14)- lambda

一、基础语法

  1. 在语句的结尾不用;

  2. 声明一个方法需要加关键字fun

  3. 如果函数是重载父类的方法,则需要加override关键字

  4. 方法中的参数格式为:形参名+冒号+形参类型

    fun a (str : String, num : Int)

二、定义类

  1. kotlin默认唯一构造器,暨类定义同时也是构造器

    class Person(name : String, age : int) {init{      // do some thing} } 翻译成java为:final public class Person {   public Person(String name, int age){       init();   }   private void init(){       // do some thing   }}
  2. 仔细看会发现,翻译成的java类定义前面有final修饰符,因为在kotlin中类默认为final的,也就是不可继承的。如果要继承,需要声明为open,或者abstract

    open class Person(name : Stringage : int) {init{      // do some thing} } 
  3. 如果init中没有操作,则可以省略

    class Person(name : Stringage : int)
  4. 如果连参数也没有,甚至可以这么写

    class Person

三、定义函数方法

  1. 函数方法要加fun关键字,方法的返回类型写在参数后

    fun sum (a : Int, b : Int) : Int {   return a+b}
  2. 如果像上面这样,函数内只有一条语句,则可以直接赋值

    fun sum (a : Int, b : Int) : Int = a+b
  3. kotlin编译器会自动根据返回值推测方法返回类型

    fun sum (a : Int, b : Int) = a+b
  4. 如果方法需要返回值,则返回Unit,类似java中的void,当然Unit也是可以忽略的

    fun printSum (a : Int, b : Int) : Unit = print(sum(a, b))//等价于fun printSum (a : Int, b : Int) = print(sum(a, b))

看到网上资料说,如果方法是public的,则必须要声明返回类型。但是我自己试验发现kotlin的方法默认是public的,同时上面说的几点都适用,也就是不是必须要明确声明返回类型。如有错误之处,欢迎随时拍砖指正。

四、定义变量

kotlin中将java中的变量演化成了两种:var表示变量,val便是常量(相当于java中用final修饰)

var a : Int = 1    // 定义一个普通变量var b = 2          // 和方法的返回类型一样,编译器也会根据值自动判断变量类型b = 3              // 普通变量可多次赋值val c = 1          // 定义一个常量,和普通变量一样,编译器也会自动判断类型c = 2              // 提示编译错误,无法运行。常量只能赋值一次val d : Int        // 如果常量在定义的时候没有赋值,则必须明确类型d = 1              // 赋值

五、使用泛型Array代替数组

例如最经典的main方法

Java:public static void main(String[] args){    // do some thing}Kotlin:fun main(args : Array<String>){    // do some thing}

六、条件语句

fun max(a: Int, b: Int): Int {    if (a > b)        return a    else        return b}//或者也可以把if语句作为省略方法体的方法fun max(a: Int, b: Int) = if (a > b) a else b

七、空值

在类型后面跟一个问号?表示可能为空,跟双感叹号!!表示一定不能为空。具体的请看我上一篇文章《Kotlin学习笔记(2)- 空指针》。

八、类型检测并自动转换

fun getStringLength (obj : Any) : Int? {    // 通过is关键字做类型判断    if(obj is String){        // 类型判断后,系统自动转型,这里自动将obj转为String类型        return obj.length    }    // 类型判断之外,obj依然是Any类型,没有被转型,所以不能调用length,会报编译错误    var length = obj.length    return null}
fun getStringLength (obj : Any) : Int? {    // 通过is关键字做类型判断,因为第一个判断条件已经通过并自动转型,    // 所以第二个判断时obj可以直接作为String类型使用    if(obj is String && obj.length > 0){        // 类型判断后,系统自动转型,这里自动将obj转为String类型        return obj.length    }    return null}

九、循环

  1. for循环,使用in关键字

    fun main(args : Array<String>) {   for(arg in args)       print(arg)   for(i in args.indices)       print(args[i])   for((index, value) in args.withIndex()){       println("index : $index, value : $value")   }}
  2. while循环,和java的基本一致

    fun main(args : Array<String>) {   var i = 0   while (i < args.size){       print(args[i++])   }   var j = 0   do{       print(args[j])   }while (++j<args.size)}

十、when表达式(类似于java中的switch)

when的特性与switch差不多,都是通过列举比对列举出来的条件进行匹配,满足条件的分支会被执行。when可以作为表达式,也可以作为声明。如果用作表达式的话,那么满足条件的分支就是总表达式。如果用做声明,不满足条件的分支的的的值会被忽略,只保留满足条件的分支,而且返回的值也是最后一个表达式的值。

  1. 传统用法

    var x = 3when (x) {   1 -> print(1)   2 -> print(2)   else -> print(5)}
  2. 作为表达式,满足条件的分支会被作为when的返回值

    var x = 3var result = when (x) {   1 -> 1   2 -> 2   else -> 5}
  3. 分支条件一致,如果有分支可以用同样的方式处理的话, 分支条件可以连在一起处理。

    when (x) {   0,1 -> print("x == 0 or x == 1")   else -> print("otherwise")}
  4. 使用任意表达式作为分支的条件

    when (x) {   parseInt(s) -> print("s encode x")   else -> print("s does not encode x")}when (x) {   in 1..10 -> print("x is in the range")   in validNumbers -> print("x is valid")   !in 10..20 -> print("x is outside the range")   else -> print("none of the above")}
原创粉丝点击