Kotlin 基本语法

Kotlin 程序是什么样子的?如果浏览过本书,你会看到许多例子。很有可能你觉得 Kotlin 语言有点古怪,充满了var field: String这样的语法。然而读完本章后,你将不再对这些语法感到陌生,甚至很可能喜欢上它们。 

1 变量

让我们来看一个很简单的程序。 

fun main(args: Array<String>) {
    var quantity = 5
    val price: Double = 20.3
    val name: String = "大米"

    println("单价:$price")
    println("数量:$quantity")
    println("产品:$name 总计:${quantity * price}")
}

上面的代码中,首先创建了一个名为quantity的变量用以表示产品的数量,并初始化为 5。
一个值为 20.3 的常量price,用来表示产品的单价。
一个表示产品名字的字符串常量name。 

通过这段代码我们可以看到,Kotlin 语言声明一个变量使用关键字var,声明一个常量使用val,声明时 Kotlin 语言是可以自动推测出字段类型的,例如上面代码中的var quantity = 5会被认为是Int类型,但如果你希望它是一个Double类型,则需要显示声明类型,例如var quantity: Double = 5

2 语句

2.1 in关键字的使用

判断一个对象是否在某一个区间内,可以使用in关键字 

//如果存在于区间(1,Y-1),则打印OK
if (x in 1..y-1) 
  print("OK")

//如果x不存在于array中,则输出Out
if (x !in 0..array.lastIndex) 
  print("Out")

//打印1到5
for (x in 1..5) 
  print(x)

//遍历集合(类似于Java中的for(String name : names))
for (name in names)
  println(name)

//如果names集合中包含text对象则打印yes
if (text in names)
  print("yes")

 2.2 when表达式

类似于 Java 中的 switch,但是 Kotlin 更加智能,可以自动判断参数的类型并转换为响应的匹配值。

fun cases(obj: Any) { 
  when (obj) {
    1       -> print("第一项")
    "hello" -> print("这个是字符串hello")
    is Long -> print("这是一个Long类型数据")
    !is String -> print("这不是String类型的数据")
    else    -> print("else类似于Java中的default")
  }
}

 2.3 智能类型推测

判断一个对象是否为一个类的实例,可以使用is关键字
与 Java 中的instanceof关键字类似,但在 Kotlin 中如果已经确定了一个对象的类型,可以在接下来的代码块中直接作为这个确定类型使用。

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

  //同时还可以使用!is,来取反
  if (obj !is String){
  }

  // 代码块外部的obj仍然是Any类型的引用
  return null
}

 2.4 空值检测

Kotlin 是空指针安全的,也就意味着你不会再看到那恼人的空指针异常。
例如这句代码 println(files?.size),只会在files不为空时执行。
以及,你可以这样写 

//当data不为空的时候,执行语句块
data?.let{
    //... 
}

//相反的,以下代码当data为空时才会执行
data?:{
    //...
}

 3 函数

3.1 函数的声明

函数使用关键字fun声明,如下代码创建了一个名为say()的函数,它接受一个String类型的参数,并返回一个String类型的值 

fun say(str: String): String {
    return str
}

 同时,在 Kotlin 中,如果像这种简单的函数,可以简写为 

fun say(str: String): String = str

 如果是返回Int类型,那么你甚至连返回类型都可以不写

fun getIntValue(value: Int) = value

 3.2 函数的默认参数

你也可以使用默认参数来实现重载类似的功能 

fun say(str: String = "hello"): String = str

 

这时候你可以调用say(),来得到默认的字符串 "hello",也可以自己传入参数say("world")来得到传入参数值。 

有时参数非常多的时候,也可以使用多行参数的写法,它们是相同的 

fun say(firstName: String = "Tao",
        lastName: String = "Zhang"){
}

 3.3 变参函数

同 Java 的变长参数一样,Kotlin 也支持变长参数

//在Java中,我们这么表示一个变长函数
public boolean hasEmpty(String... strArray){
    for (String str : strArray){
        if ("".equals(str) || str == null)
            return true;
    }
    return false;
}

//在Kotlin中,使用关键字vararg来表示
fun hasEmpty(vararg strArray: String?): Boolean{
    for (str in strArray){
        if ("".equals(str) || str == null)
            return true 
    }
    return false
}

 3.4 扩展函数

你可以给父类添加一个方法,这个方法将可以在所有子类中使用
例如,在 Android 开发中,我们常常使用这样的扩展函数: 

fun Activity.toast(message: CharSequence, 
                duration: Int = Toast.LENGTH_SHORT) {
    Toast.makeText(this, message, duration).show()
}

 这样,我们就可以在每一个Activity中直接使用toast()函数了。 

3.5 将函数作为参数

Kotlin 中,可以将一个函数作为参数传递给另一个函数 

fun lock<T>(lock: Lock, body: () -> T ) : T {
        lock.lock()
        try {
            return body()
        }
        finally {
            lock.unlock()
        }
}

 上面的代码中,我们传入了一个无参的 body() 作为 lock() 的参数,

 4 小结

最后,我们用一段代码来总结本章内容,你能看懂吗?

fun main(args: Array<String>) {

    val firstName: String = "Tao"
    val lastName: String? = "Zhang"

    println("my name is ${getName(firstName, lastName)}")
}

fun hasEmpty(vararg strArray: String?): Boolean {
    for (str in strArray) {
        str ?: return true
    }
    return false
}

fun getName(firstName: String?, lastName: String? = "unknow"): String {
    if (hasEmpty(firstName, lastName)) {
        lastName?.let { return@getName "${checkName(firstName)} $lastName" }
        firstName?.let { return@getName "$firstName ${checkName(lastName)}" }
    }
    return "$firstName $lastName"
}

fun checkName(name: String?): String = name ?: "unknow"

 

Kotlin 是一种现代的静态类型编程语言,它设计用于在 Java 虚拟机上运行,并且与 Java 语言完全互操作。Kotlin语法简洁而富有表现力,使得开发者能够以更少的代码完成更多的工作。以下是 Kotlin 基础语法的一些关键点: ### 函数定义 函数在 Kotlin 中使用 `fun` 关键字来声明。例如,一个简单的函数可以这样定义: ```kotlin fun greet(name: String): Unit { println("Hello, $name") } ``` 在这个例子中,`greet` 是函数名,`name` 是参数,其类型为 `String`,返回类型为 `Unit`,这相当于 Java 中的 `void`。 ### 变量和不可变值 Kotlin 使用 `val` 和 `var` 来声明变量。`val` 用于不可变(只读)变量,而 `var` 用于可变变量。 ```kotlin val immutableValue = 10 // 不可变 var mutableValue = 20 // 可变 mutableValue = 30 // 允许改变 ``` ### 类型推断 Kotlin 支持类型推断,这意味着你通常不需要显式指定变量的类型,编译器会根据赋值自动推断出类型。 ### 控制流表达式 控制流结构如 `if-else`、`when`(类似于 switch-case)以及循环结构 `for`、`while` 都非常直观。 ```kotlin val number = 5 when (number) { in 1..10 -> println("Between 1 and 10") else -> println("Not between 1 and 10") } ``` ### 空安全 Kotlin 的设计有助于避免空指针异常。变量默认是不可为空的,如果你想让变量接受 null 值,需要在类型后面加上问号 `?`。 ```kotlin var nullableString: String? = null nullableString = "Hello" ``` ### 集合 Kotlin 提供了丰富的集合操作,包括列表、集合和映射等。 ```kotlin val list = listOf(1, 2, 3) val map = mapOf("one" to 1, "two" to 2) ``` ### Lambda 表达式 Kotlin 支持 lambda 表达式,这使得编写函数式风格的代码变得简单。 ```kotlin val sum = { a: Int, b: Int -> a + b } println(sum(5, 3)) // 输出 8 ``` ### 扩展函数 Kotlin 允许我们为已存在的类添加新的方法,而无需继承或修改它们。 ```kotlin fun String.lastChar(): Char = this[length - 1] ``` 以上只是 Kotlin 基础语法的一小部分。要深入学习 Kotlin,建议通过官方文档或者在线课程进行系统学习,实践是掌握任何编程语言的关键。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值