Kotlin 语法学习(一)

基础语法

定义函数

  • java
public int method(int a,int b){
    // todo
    return a+b;
}
复制代码
  • kotlin
fun method(a:Int,b:Int):Int{
    return a+b
}
复制代码
  • 在kotlin中所有东西都是对象,所以java中的基本数据类型(int,long,boolean,double,short,float,byte)在kotlin中都要使用其对应的封装的类(Int,Long,Boolean,Double,Short,Float,Byte)。 注意:1、在kotlin中数字类型不能隐式的装换(例如:java中int转换为long类型)2、当kotlin函数无返回值时,将Int替换为Unit,或者将其省略

定义变量

  • java
private final int a;
public int b=1;
String c;
复制代码
  • kotlin
private val a:Int?=1
public val b=1
lateinit var c:String
private val d:Int by lazy { 1 }
复制代码
  • 在kotlin中用var和val声明变量与常量
  • 注意:1、在声明时正常情况下必须要初始化变量 2、若想变量可为null则需在声明的类型后加‘?’ 3、若不想在声明时初始化,可以在var之前添加关键字lateinit(val不支持lateinit) 4、val可以使用by lazy 关键在延迟初始化时间(在其第一次调用时初始化)

使用可空值及 null 检测

  • java
String a=null;
if(a!=null){
    int size=a.length();
}
复制代码
  • kotlin
var a:Strng?=null
var size=a?.length
var size2=a!!.length
复制代码
  • 在kotlin中使用可能为空的参数时,需要通过‘?’判断当前参数是否为空,若为空‘?’之后的逻辑就不会执行。还可以使用‘!!’来判断是否为空,但参数为空时其会直接抛出空指针异常。

使用类型检测以及自动转换

  • java
public String get(Object obj){
    if(obj instanceof String){
        String s=(String)obj;
        return s;
    }
    return null;
}
复制代码
  • kotlin
fun get(obj:Any):String?{
    if(obj is String){
        return obj
    }
    return null
}
复制代码
  • kotlin中通过is来判断前面类型是否为后面类型的实例 ; 若某个不可变的局部变量或属性已经判断出为某类型,那么检测后的分支中就可以直接当做该类型使用,无需显示转换,例如 : 上述代码的obj.
  • 注意:kotlin中Any相当于java中的Object是所有类的父类。

for循环的使用

  • java
public void test(List<Stirng> list){
    int size=list.size;
    for(int i=0;i<size;i++){
        System.out.println("list 第"+i+"个数据:"+ list.get(i));
    }
}
复制代码
  • kotlin
fun test(list:ArrayList<String>){
    for(item in list){
        println("list item:$item")
    }
    
    for(item in list.indices){
        println("list 第$item 个数据:${list[item]}")
    }
    
    for((index,item) in list.withIndex()){
            println("list 第$index 个数据为:$item")
        }
}
复制代码
  • kotlin 通过in关键字遍历数据,上述代码,第一个for循环直接取出list中的数据;第二个for循环是取出list索引可以通过索引取出数据;第三个for循环可以同时取出索引和数据进行遍历。

when表达式的使用

  • java
public void test(int a){
    switch(a){
        case 1:
        // todo
            break;
        case 2:
        // todo
            break;
        default:
        // todo
            break;
    }
}
复制代码
  • kotlin
fun test(a:Int){
    when(a){
        0,1->{
            //todo
        }
        2->{
            //todo
        }
        in 3..10->{
            //todo
        }
        else{
            //todo
        }
    }
}
复制代码
  • kotlin中的when表达式与java的switch类似。
  • 多个条件执行相同的逻辑时,可以使用逗号将其隔开;
  • 对于范围条件可以使用in 关键字,在in 前加上'!'则表示取反;

(range)区间

  • kotlin
fun test(a:Int){
    //检测一个数是否在某个范围
    if(a in 1..10){
        println(x)
    }
    
    //检测某个数是否在区间之外
    var list=listOf(2,3,4,5)
    if(-1 !in 0..list.lastIndex){
        println("-1 不在 list范围内!")
    }
    
    //区间迭代
    for(x in 1..10){
        println(x)
    }
    
    for(x in 1..10 step 2){
        prinlnt(x)
    }
    
    for(x in 9 downTo 0 step 3){
        println(x)
    }
    
}
复制代码
  • kotlin中区间可以使用x..y表示,其含义是x到y之间的数包括x和y且x<y,若x>y则使用downTo;
  • step x表示每次迭代需要加或减x个数;

集合与数组

  • 声明
//声明空数组
var list= arrayOfNulls<Any>(2)
//声明有初始值的数组
var list1= arrayOf(1,2,3,4)

//声明List
var list=ArrayList<String>()
//声明List并且初始化 
var list3= listOf(1,2,3)

复制代码

转载于:https://juejin.im/post/5d06eb146fb9a07ed36ea985

猜你喜欢

转载自blog.csdn.net/weixin_33725807/article/details/93180023