Kotlin基础语法

目录

1.类定义

2.方法定义

3.变量与常量

4.注释

5.字符串模板

6.NULL检查机制

7.类型检测及自动类型转换

8.区间


1.类定义

class MainActivity : AppCompatActivity() {
    ...
}

MainActivity是当前类的名称,AppCompatActivity是该类继承的父类。

我们可以看到,这就是我们新建的Activity类的写法。

2.方法定义

方法定义有如下几种定义方式,我们可以依据示例来看一下。

<1>常规写法定义方法

fun sum(a:Int,b:Int):Int{
    return a+b;
}

a,b是Int类型的入参,方法的返回值也是Int类型。在方法体最后我们要编写return语句返回返回值。

<2>表达式作为函数体定义方法(其一)

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

与上面的方法含义是一致的,但并没有指明返回类型,由系统自动判断。

<3>表达式作为函数体定义方法(其二)

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

同样是表达式作为函数体,但用public修饰符,则必须指明返回类型。

<4>定义无返回值的方法

fun printSum(a:Int,b:Int):Unit{
    print(a + b)
}

当然,如果返回Unit类型,则可以省略,public方法也是一样,如下:

public fun printSum(a:Int,b:Int){
    print(a + b)
}

<5>可变长参数函数

fun vars(vararg v:Int){
    for(vt in v){
        print(vt)
    }
}

调用时

 vars(1,2,3,4,5)

输出:12345

可变长参数这里用vararg进行了修饰,则可传入多个同类型入参。

使用for(vt in v)可进行可变长参数的循环。

<6>lambda表达式

val sumLambda:(Int,Int) -> Int = {x,y -> x+y}

当我们调用sumLambda(1,2)时,返回的结果为3。这里可以理解为,入参类型与形参对应,返回类型与表达式对应。

3.变量与常量

<1>可变变量定义

var <标识符> : <类型> = <初始化值>

<2>不可变变量定义

val <标识符> : <类型> = <初始化值>

不可变变量是只能赋值一次的变量,类似Java中final修饰的变量。

<3>自动类型判断

  • 常规写法
val a : Int = 1
  • 系统自动推断变量类型为Int
val b = 1
  • 如果不在声明变量时赋值,则必须提供变量类型
val c:Int

       之后再明确赋值

c = 1
  • 声明变量,并由系统自动判断类型
var x = 5

由于是可变变量,所以之后可以修改

x+=1

4.注释

//单行注释

/*多行

注释*/

Kotlin注释允许块注释嵌套

5.字符串模板

$varname 表示一个变量值

${varName.fun()} 表示变量的方法返回值

示例

var a = 1
val s1 = "a is $a"
a = 2
val s2 = "${s1.replace("is", "was")}, but now is $a"

s2的值为:a was 1,but now is 2

6.NULL检查机制

<1>声明一个可为空的参数

 var age : String? = "23"

此时表示age变量可为空

<2>在使用这种变量时我们要进行空判断处理,一种时像Java一样抛出空异常

 val ages = age!!.toInt()

<3>另一种是字段后加?可不做处理返回值为null或配合?:做空判断处理

//不做处理返回null
val ages1 = age?.toInt()
//age为空返回-1
val ages2 = age?.toInt()?:-1

<4>如何使用一个返回值可为null的函数

fun parseInt(str:String):Int?{
    return str.toIntOrNull()
}

fun printProduct(arg1:String,arg2:String){
    val x = parseInt(arg1)
    val y = parseInt(arg2)
    //由于x,y可为null,所以要进行非空判断
    if (x!=null && y != null){
        Toast.makeText(this,(x*y).toString(),Toast.LENGTH_SHORT).show();
    }else{
        Toast.makeText(this,"'$arg1' or '$arg2' is not a number",Toast.LENGTH_SHORT).show();
    }
}

当我们调用方法时

 printProduct("2","3")

7.类型检测及自动类型转换

我们可以使用is运算符检测一个表达式是否是类型的一个实例,类似于Java中的instanceof关键字。

fun getStringLength(obj:Any):Int?{
    if (obj is String){
        return obj.length
    }
    return null
}

fun getStringLength(obj:Any):Int?{
    if (obj !is String)
        return null
    return obj.length
}

fun getStringLength(obj:Any):Int?{
    if (obj is String && obj.length > 0)
        return obj.length
    return null
}

8.区间

<1>

 for (i in 1..4) print(i)

输出1234

<2>

for (i in 4..1) print(i)

什么都不输出

<3>

var i = 2
if(i in 1..10){
    Toast.makeText(this,i.toString(),Toast.LENGTH_SHORT).show();
}

等同于1<=i && i<=10

<4>

for(i in 1..4 step 2) Log.i("aaaaaaa",i.toString())

输出13

<5>

for(i in 4 downTo 1 step 2) Log.i("aaaaaaa",i.toString())

输出42

<6>

for(i in 1 until 10){
    Log.i("aaaaaa",i.toString())
}

这个其实是i in[1,10), 排除了10。

输出123456789

你可能感兴趣的:(Kotlin菜鸟教程学习笔记,kotlin)