kotlin学习之基础语法

1. 函数定义
fun sum(x: Int, y: Int): Int {
      Log.e("x + y = ", (x + y).toString())
      val sql: (Int) -> Int = { a -> a * a }
      return sql(x) + (y)
}

kotlin定义函数的语法其实和iOS中swift的语法很类似,其中只有关键词不太一样,结构几乎是一模一样的。

上面的这个代码块中有一行是这样的

val sql: (Int) -> Int = { a -> a * a }

写过swift的人应该对这种写法很熟悉,这种写法就是lambda语法,这样定义之后可以用作函数一样的作用,这也叫做匿名函数。

2. 我们上边用到的函数定义方法其实只是最为规范的一种,其实真正的应用中还有很多种写法,如下
fun sum(a: Int, b: Int) = a + b //这么写省去了花括号以及返回值类型,这种情况会自动推断返回值类型。

public fun sum(a: Int, b: Int): Int = a + b   // public 方法则必须明确写出返回类型

对于无返回值的函数我们可以用Unit修饰符去修饰,当然也可以省略无论是带public还是不带都可以省略

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

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

在很多种语言中都有可变参数方法的定义方式,例如Object-C, swift,java等,在kotlin中也可以定义可变参数函数,例如

fun args(vararg v: Int) {
    for(vv i v) {
        print(vv)
    }
}

可以从以上代码看出我们用到了vararg这个关键词,这个关键词就是来修饰可变参数来用的。

4. 常量和变量的定义

在各种开发语言中基本上都会存在常量和变量的定义,那么在kotlin中也不例外同样也存在,常量和变量分别用关键词val和var来修饰。

定义方式如下:

val : 类型 = 初始值
var : 类型 = 初始值

常量和变量都可以省略类型的添加,但是常量如果不指定类型需要在定义的时候直接给上初始值且不可变,变量则不需要。常量和变量都可以不指定初始值,但在定义常量的时候需要指定其类型。

5. 注释的使用

kotlin中的注释和其它语言比如swift和java其实是大同小异,例如

// 这里是单行注释

/*
这里添加多行注释
多行
*/
6. NULL空值的检测

在swift中有一种写法是很不错的,算是swift的nil空值的判断,写法如下

var param: SomeObject?
//比如说SomeObject这个类中存在方法test

那么调用方式如果使用强制解包,如下
param!.test() //这种情况很有可能直接crash,因为param有可能为空的。

有一种可选性的调用,如下
param?.test() //这样写可以保证在param为nil的时候可以忽略方法的调用从而不导致crash。

还有一种可选默认值的写法
(param ?? SomeObject()).test() //这样用??这个操作符给与了一个nil值时的默认值可以保证我们需要的值不为空。

上面我们写的这段swift的代码,其实在kotlin中也有类似的用法,只不过写法不太一样,如下

//类型后面加?表示可为空
var age: String? = "23"
//抛出空指针异常
val ages = age!!.toInt() //这算是强制解包
//不做处理返回 null
val ages1 = age?.toInt() //可选调用
//age为空返回-1
val ages2 = age?.toInt() ?: -1 可选调用,添加默认值

上面的这段代码其实不用过多解释,可以对比上面提到的swift的那段代码,顺序一致

7.数据类型判断
fun getStringLength(obj: Any): Int? {
  if (obj is String) {
    // 做过类型判断以后,obj会被系统自动转换为String类型
    return obj.length 
  }

  //在这里还有一种方法,与Java中instanceof不同,使用!is
  // if (obj !is String){
  //   // XXX
  // }

  // 这里的obj仍然是Any类型的引用
  return null
}

判断类型的方法和swift中类型都是用is来做的关键词

0 0 vote
Article Rating
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x