Kotlin速记-基础语法

基础语法

常量和变量

  • 可变变量定义:var
  • 不可变变量定义:val,只能赋值一次的变量(如Java 中 final 修饰的变量)

常量与变量可没有初始化值,在引用前必须初始化
编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断

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

var x = 6       // 系统自动推断变量类型为Int
x += 1          // 变量可修改
val a: Int = 1
val b = 1       // 系统自动推断变量类型为Int
val c: Int      // 如果不在声明时初始化则必须提供变量类型
c = 1           // 明确赋值

非空判断

Java中比较多的判空:

// 方法调用
if (a != null) {
    a.b();
}
// 变量赋值
String b = "";
if (c != null) {
    b = c.d();
}

Kotlin可以大幅度的省略这部分代码

  • 类型非空
var temp: String? = null

当一个变量申明时,如果变量类型后面携带了?,或者类型推导时发现内容可能为null,那么就会在调用时直接报错或者发出警告。提示你对象可能为null,怎么调用这些可能为null的对象,是下一个标题的内容。

相反的,如果申明时没有携带?,那么它就认为这个变量是不能赋值为null的,如果你在后续的赋值中,赋值了null,就会自己报错,连编译都过不了,就算侥幸骗过了编译,也会在运行时赋值为null的时候直接报错。
这样可以一定程度上避免代码单元内的空指针问题,也可以一定程度尽早发现空指针问题,同样,也少了很多的非空判断。

  • 空判定
    一个可能为null的对象怎么使用?加if?不用,可以直接这样写:

下面列举了三种常见的场景。
对于对象的方法调用,直接加上一个?即可,等价于上面的if中调用。
对于参数的赋值,可以在后面添加默认值,使用的是?:。
对于方法内的参数判断,可以直接使用像是赋值一样的写法,然后执行return操作。

// 方法调用
a?.b();
// 变量赋值
val b = c?.d()?:"";
// 参数判断
fun test(a: A?) {
    a?:return
    ...
}

字符串模板

  • $ 表示一个变量名或者变量值
  • $name表示变量值
  • ${name.fun()} 表示变量的方法返回值
var a = 1
val str = "a is $a" 

a = 2
val str2 = "${str.replace("is", "was")}, but now is $a" 

print str2
a was 1,but now is 2

类型检测与自动类型转换

is 运算符检测表达式是否某类型的一个实例 (如 Java 中的 instanceof 关键字)

val a = "This is a"
if (a is String) {
    print("that is true")
} else {
    print("that is false")
}

区间

区间表达式由具有操作符形式 … 的 rangeTo 函数辅以 in 和 !in 形成

for (x in 1..10 step 3) {
    print(x+" ")
}
1 4 7 10

函数定义

// 函数定义格式:  fun,参数格式为:参数 : 类型 
fun sum(a: Int, b: Int): Int {   // Int 参数,返回值 Int
    return a + b
}

// 表达式作为函数体,返回类型自动推断:
fun sum(a: Int, b: Int) = a + b
public fun sum(a: Int, b: Int): Int = a + b   // public 方法则必须明确写出返回类型

// 无返回值的函数(类似Java中的void):
fun printSum(a: Int, b: Int): Unit { 
    print(a + b)
}

// 如果是返回 Unit类型,则可以省略(对于public方法也是这样):
public fun printSum(a: Int, b: Int) { 
    print(a + b)
}

lambda(匿名函数)

fun main(args: Array<String>) {
    val lambdaExample: (Int, Int) -> Int = {x,y -> x - y}
    println(lambdaExample(3,1))  // print 2
}

可变参数长度

变长参数可用 vararg 关键字标识

fun example(vararg v:Int){
    for(i in v){
        print(i)
    }
}

fun main(args: Array<Int>) {
    example(1,2,3,4,5,6,7)  // 输出1234567
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值