Kotlin入门语法

Kotlin的基础语法,开始学习Kotlin,可以类比Java语言,但不能被Java的思维模式固定。

1. 导包

和java一样,导包都是在文件的顶部

package my.demo

import java.util.*

2.定义功能函数

  • 带Int类型返回值的函数
fun sum(a: Int, b: Int): Int {
    return a + b
}

执行结果:调用传入3和5,返回8

  • 表达式作为函数体,返回值类型根据自动判断
fun sum(a: Int, b: Int) = a + b

执行结果:调用传入3和5,返回8

  • 为返回值函数
fun printSum(a: Int, b: Int): Unit {
    println("sum of $a and $b is ${a + b}")
}

执行结果:sum of -1 and 8 is 7
相信你也看到了,$类似java中的字符串拼接符,但可读性更高

  • 同意像java一样无返回值的时候Unit可以省略不写
fun printSum(a: Int, b: Int) {
    println("sum of $a and $b is ${a + b}")
}

执行结果:sum of -1 and 8 is 7
3.变量的声明

  1. 常量

java中声明常量需要用到final,而Kotlin中只需要用到val,同意的只能赋值一次

val a: Int = 1  // 声明的同时赋值
val b = 2   // 自推断数据类型为Int
val c: Int  // 当不提供初始值时,需要指定数据类型
c = 3       // 声明之后赋值
  1. 变量

可以多次赋值

var x = 5 // 自推断数据类型为Int
x += 1

4.注释
和java中没有区别

   /**
     * 文档注释
     * @param a
     */
    fun add(a: Int) {
        /*
        多行注释
         */
        println("测试")
        //单行注释
        var a=2
    }

5.使用字符串模板
还记的java中的字符串拼接吗?对于程序员来说阅读和书写都有一定的麻烦,Kotlin完全解决了这种问题使用$

var a = 1
// 定义一个字符串变量,模板表示一个变量
val s1 = "a is $a" 

a = 2
// 使用模板表示一个表达式,
val s2 = "${s1.replace("is", "was")}, but now is $a"

输出:a was 1, but now is 2
需要拼接变量直接跟变量名称,拼接表达式需要用{},字符串中会获取具体的值。

6.使用条件表达式
和java相同的地方

var max = a 
if (a < b) max = b

// 带 else 
var max: Int
if (a > b) {
    max = a
} else {
    max = b
}

和java不同的就是,可以作为一个表达式,来给变量或者方法赋值

//变量赋值
fun maxOf(a: Int, b: Int) = if (a > b) a else b
//变量赋值
var max=if (a > b) a else b

7.使用可空值

//如果这样直接给一个不能为空的值赋值为空,是不能通过编译的
var a:Int
a=null

//使用数据类型?后可以,表示,结果可以为空
var a:Int?
a=null

同样对于方法也是可以的
如:

/**
*返回值可以为空
*/
fun parseInt(str: String): Int? {
    // ...
}
//使用上面的解析方法
fun printProduct(arg1: String, arg2: String) {
    val x = parseInt(arg1)
    val y = parseInt(arg2)

    // Using `x * y` yields error because they may hold nulls.
    if (x != null && y != null) {
        // x and y are automatically cast to non-nullable after null check
        println(x * y)
    }
    else {
        println("either '$arg1' or '$arg2' is not a number")
    }    
}

8.类型检查和自动转换
在java中使用instance关键字来判断一个对象是否属于一个类或者接口,在Kotlin中使用is,并且检查之后的类型会自动转换为该类型

fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        // 对象obj,在这个分支内,会自动转换为String类型
        return obj.length
    }

    //分支外,obj对象依旧是Any类型 
    //返回值Int,可以为空
    return null
}

或者下面的形式

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

    // 对象obj,在这个分支内,会自动转换为String类型
    return obj.length
}

或者下面的形式

fun getStringLength(obj: Any): Int? {
    //在'&&'右边的obj对象也会自动转换为String类型
    if (obj is String && obj.length > 0) {
        return obj.length
    }

    return null
}

可以说当使用is关键字判断一个对象是否属于某种类型的时候,如果是,该对象会自动转换为对应类型。

9.使用for循环
for循环遍历任何提供迭代器的东西。语法如下所列

//一个list集合
var list = listOf<String>("你好","不好","很好")
//for循环 ,语法用in关键字
for (str in list)
//输出每次取出的结果
println("value = $str")

和java中一样,当只有一条循环语句的时候,可以省略大括号,否则不省略

var list = listOf<String>("你好","不好","很好")
for (str in list){
       println("value = $str")
       println(str)
}

如果你想遍历集合或者数组的下标索引,可以用下面的方法

var list = listOf<String>("你好","不好","很好")
        for (str in list.indices){
            println("value = $str")
        }

输出结果:
value = 0
value = 1
value = 2
如果想同时遍历下标和值,可以这样:

var list = listOf<String>("你好","不好","很好")
        for ((index,str) in list.withIndex())
            println("index = $index ,value = $str")

输出结果
index = 0 ,value = 你好
index = 1 ,value = 不好
index = 2 ,value = 很好

10.while 和 do…while
和java中的用法一样

while (x > 0) {
    x--
}

do {
    val y = retrieveData()
} while (y != null) // y is visible here!

11.when表达式
Kotlin中取消了switch语句,用when来表达最简单的开关语句

//函数功能,根据传递的内容,返回某个值
fun describe(obj: Any): String =
when (obj) {
    1          -> "1"
    "Hello"    -> "问候语"
    is Long    -> "Long类型数据"
    !is String -> "不是String类型数据"
    else       -> "未知"
}

is用来判断对象类型,相当于java中的instance。可以看到when同样可以和if语句进行转换

同样可以进行多个匹配条件,不同条件之间用逗号隔开

when (x) {
    0, 1 -> print("x == 0 or x == 1")
    else -> print("otherwise")
}

匹配条件也可以是一个函数

when (x) {
    parseInt(s) -> print("s encodes x")
    else -> print("s does not encode x")
}

匹配条件也可以是某个范围的值

when (x) {
    in 1..10 -> print("x is in the range")
    in validNumbers -> print("x is valid")
    !in 10..20 -> print("x is outside the range")
    else -> print("none of the above")
}

12.使用范围
表示范围关键字用.. ;要判断一个数是否属于某个范围,用in关键字

val x = 4
if (x in 1..10) {
    println("fits in range")
}

判断一个数不在某个范围

val x = 4
if (x !in 1..10) {
    println("not in range")
}

Kotlin默认遍历是升序,想倒序可以:

for (i in 4 downTo 1) print(i) // prints "4321"

Kotlin默认递增递减是1,可以使用 step来设置:

for (i in 4 downTo 1 step 2) print(i) // prints "42"

如果想表示范围不包括最后的一个值,用 until 表示

for (i in 1 until 10) { // i in [1, 10), 10 不包括在内
     println(i)
}

翻译的不好,请见谅。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值