Kotlin学习笔记(3)- 语法

系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正。如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!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 = 3
    when (x) {
       1 -> print(1)
       2 -> print(2)
       else -> print(5)
    }
  2. 作为表达式,满足条件的分支会被作为when的返回值

    var x = 3
    var 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")
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值