Kotlin学习(一)基础语法

xiaoxiao2021-02-28  49

玩了一整天的kotlin,发现根本停不下来,语法写的好痛快。今天就来写写Kotlin那些基本语法,其实跟Java有些一样又有些不一样,我们来看看:

函数

首先看一个基本的函数:

基本函数 fun add(a: Int, b: Int): Int { return a + b } 简易写法 fun add(a :Int,b :Int) = a+b; fun showString(strOne :String):String = strOne; 没返回值函数 fun showString(strOne: String, strTwo: String): Unit{ println(strOne + "and" + strTwo); } 没返回值的函数 Unit可以省略不写 fun showString2(strOne: String, strTwo: String){ println(strOne + "and" + strTwo); }

还有一种提供默认参数的写法:

//默认参数的函数,可以当java的重载使用,如果有默认参数,调用函数时不传参数也一样可以使用 fun show(str : String = "hello",str2:String = "world"){ println(str +" "+str2); } 接下来是可变参数函数的写法:

可变参数,用 vararg 关键字 fun test(vararg strArray: String?): String{ for (str in strArray){ if("hello".equals(str)) return "has hello" } return "not"; }

常量变量

接下来我们看看Kotlin里面常量和变量的定义:

常量变量 fun test(){ val a : Int = 10;//val 表示的是常量,声明时必须初始化,加上 “:Int”是指定了常量的类型,没加的话则会自动推断类型 val b = 10;//自动推断常量 b 为Int类型 val c :Int;//如果不初始化常量,必须先指定常量类型 a = 15;//常量初始化之后不能修改,这里会报错 var A : Int = 11;//var 表示的是变量,加上 “:Int”是指定了常量的类型,没加的话则会自动推断类型 var B = 11;//自动推断变量 B 为Int类型 var C :Int;//如果不初始化变量,必须先显式指定变量类型 C = 15; C = 20;//变量可以修改值 }常量和变量需要区分的是,常量是用val修饰,而变量是var修饰,常量赋值之后无法修改,这点跟java一样。

常见表达式:

条件表达式:

fun max(a :Int,b :Int){ if(a > b){ println(a); }else{ println(b); } } //简易写法 fun max2(a :Int,b :Int) = if(a > b ) println(a) else println(b); 循环表达式:for

fun forTest(){ var arr = arrayOf("A","B","C","D","E","F"); for(i in arr.indices){//根据下标取值 println(arr[i]); } for(value in arr){//根据值打印 println(value); } } while:

//while循环 fun whileTest(){ var i = 0; while(i < 10){ println("i:"+i); i++; } }

while的话跟java的while循环基本一样。

接下来我们看看when表达式,其实就是java中的switch表达式,只不过功能上比switch强的太多太多:

fun whenTest(){ var arr = arrayOf("A","B","C","D"); for(value in arr){ when(value){ "A" -> println("是A");//直接根据值判断,没用到 is 、in 等字段 "B" -> println("是B"); "C" -> println("是C"); "D" -> println("是D"); } } }这是一个最基本的when表达式。接下来我们看看无自变量的when,通过这种写法,我们可以通过when的检查然后在左边为我们的字段赋值:

fun whenTest2(){ var x = 15; var s = "hello world"; var a = when { x in 1..10 -> "在这范围内";//如果这句执行了,下面就不会执行了,相当后面隐藏了break; s.contains("hello") -> "welcome to china" else ->"" } println(a); }when表达式还可以根据任何类型进行判断:

fun whenTest3(obj :Any){ when(obj){//比switch好处,switch 只能判断固定的类型 "字符串" -> println("字符串"); 1 -> println("第一名"); is String -> println("这个是字符串类型"); is Long -> println("这个是Long类型"); !is String -> println("这个不是String类型"); else -> println("这个相当于java switch 的default") } }这个是判断View是属于那些布局 fun whenTest4(v :View){ when(v){// is TextView -> println("这是TextView"); is LinearLayout -> println("这是LinearLayout"); is Button -> println("这是Button"); is RelativeLayout -> println("这是RelativeLayout"); } }

接下来我们看看in 字段的范围判断:

//in 范围判断 fun inTest(){ var y = 10; var x = 8; if(x in 1..y-2){//代表x 在 1 - 8 这个区间内 println("在这范围内"); } for (x in 1..10){//打印1到10 println(x); } } Kotlin相比java最明显的还是它致力于消除空指针,空引用带来的危害,所以它有了可空引用类型,非空引用类型,一般的写法是在变量类型后面加上问号则是可空类型:

var a :String     : 代表不可空       var  a :String?    :代表可空类型。我们看看代码:

//可空类型 fun nullTest(){ var num :Int? = 10; //在变量类型后面加上“?”表示类型为可空的 num = null;//类型为可空,所以不会报错 var name :String = "Jack"; name = null;//类型不为可空,所以报错 } //允许返回值为null fun getStr(str :String) :String?{ return null; } //没有标注返回值可空,所以不能返回null fun getStr2(str :String) :String{ return null;//这里会报错 } Kotlin还给我们提供空值检测:

//空值检测 fun nullTest2(){ var a :String? = "hello"; println(a?.length);//a?.length 这句的 .length 在a不为null的时候才调用,为null的时候只打印 null var b :String? = "hello kotlin"; b?.let { println("我是b不为空时才调用"); } b = null; b?:let{ println("我是b为空时才调用,跟 .let 相反"); } } 这些函数相比java在应用开发中对我们的效率提升了很多,也便利了许多,不愧是亲儿子。

转载请注明原文地址: https://www.6miu.com/read-53670.html

最新回复(0)