Kotlin 基本要素:函数和变量

作者: WangJie0822 | 来源:发表于2017-11-07 14:57 被阅读50次
    image.png

    前言


    • 之前和大家讲解了 Kotlin 语言下的项目封装等等,其中也多少简单的讲解了 Kotlin 的基本语法,现在,就让我带大家一起系统的学习 Kotlin 语法吧。

    Hello World!


    • 学习一门语言,当然得从 Hellow World 开始,在 Kotlin 中,只需要一个函数:

        fun main(args: Array<String>) {
            println("Hello World!")
        }
      
    • 从这段代码我们能看出什么?

      1. 关键字 fun 用来声明一个函数。没错,Kotlin 编程有很多乐趣(fun)。
      2. 参数的类型写在名称后面,稍后会看到,变量的声明也是这样。
      3. 函数的定义可以直接放在最外层,不必一定都在类内部。
      4. 数组就是类,和 Java 不同,Kotlin 中没有声明数组类型的特殊语法。
      5. 使用 println 替代了 System.out.println,Kotlin 对很多 Java 标准库的函数提供了很多语法更简洁的包装。
      6. 省略了每行代码后的分号。

    函数


    • 我们已经看到了如何声明一个没有返回任何东西的函数,那么如果函数有返回值呢?类型应该在哪?

        fun max(a: Int, b: Int): Int {
            return if(a > b) a else b
        }
      
    • 没错,和变量一致,类型也是在最后面。

    在这里,我们可以看到 if 在 Kotlin 中与在 Java 中的不同。
    在 Java 中,if 是语句,而在 Kotlin 中 if 是表达式。
    和语句不同,表达式有值,并且能做另一个表达式的一部分使用。在 Kotlin 中,除了循环(for、do 和
    do/while
    )以外,大多数控制结构都是表达式,我们可以在后面看到。

    表达式函数体

    • 可以让前面的函数更简单,因为他的函数体是单个表达式

        fun max(a: Int, b: Int): Int = if(a > b) a else b
      
    • 甚至还可以简化,省略返回类型

        fun max(a: Int, b: Int) = if(a > b) a else b
      
    • 在这里,编译器能够分析表达式,并把它的类型作为函数的返回类型。这种分析通常被称作类型推导

    变量


    • 在 Java 中声明变量会以类型开始。但是在 Kotlin 中不行,Kotlin 中变量的类型在很多情况下都是可以省略的。

    • 所以,在 Kotlin 中声明对象通常以关键字开始,然后是变量名,再然后是类型(不加也可以)。

        val str = "qwerdf"
        val i = 42
      
    • 这里省略了类型声明,就和表达式函数体一样,编译器能过分析出赋给变量的初始值,并把它的类型作为变量的类型,如果需要,你也可以显示地指明类型。

        val str: String = "qwerdf"
      
    • 如果变量没有初始值,那么就必须显示指明类型。

        val i: Int
        i = 42
      

    Kotlin 中声明变量的关键字有两个:

    • val 不可变引用,初始化后不能再次赋值。与它对应的是 Java 中的 final 变量。
    • var 可变应用,这种变量的值可以被改变,与它对应的是 Java 中的普通变量。
    • 默认情况下,Kotlin 是推荐使用 val 关键字来声明变量的,仅在必要的时候使用 var 关键字。

    • 在定义了 val 变量的代码块执行期间,变量只能进行唯一一次初始化,但是如果能够保证只有唯一一条初始化语句能被执行,可以根据条件使用不同的值来初始化它。

        val msg: String
        if(isSuccess) {
            msg = "success"
        } else {
            msg = "failed"
        }
      
    • 同时,因为 if 是表达式,所以你可以这样:

        val msg = if(isSuccess) {
            "success"
        } else {
            "failed"
        }
      
    • 表达式中,最后一行作为返回值。

    • 另外 var 变量虽然值是可变的,但是类型不可变。

    字符串模版


    • 接下来向大家介绍 Kotlin 的一个新特性,就是字符串模版

    • 在代码中声明了一个变量 name,如果在字符串中使用到了它,那么 Java 中的字符串拼接:

        ("Hello, " + name + "!")
      
    • Kotlin 会怎么做?

        ("Hello, $name !")
      
    • 这样效率一样,但是更紧凑,编译器会对表达式进行检查,如果你引用的变量不存在,就无法通过编译。

    • 同样的还有 ${},你可以在大括号中写代码,调用方法,使用双引号等等。

    • 这里引用了KotlinTest 项目中网络拦截部分拼接字符串的代码:

        val logStr = StringBuilder()
        val json = buffer.clone().readString(charset)
        val jsonFormat = json.jsonFormat()
        logStr.append("$json\n${
                        if (jsonFormat.length > 200)
                            "${jsonFormat.substring(0, 100)}\n\n The Json String was too long...\n\n ${
                                jsonFormat.substring(jsonFormat.length - 100)}\n"
                        else
                            "$jsonFormat\n"}"
                      )
      
    • 这里面还用到了 ${} 的两层嵌套。

    最后


    • 今天就带大家先了解这么多,后面我们接着学习 Kotlin 的 类和属性
    • 有疑问欢迎在评论区提问,欢迎关注~

    相关文章

      网友评论

        本文标题:Kotlin 基本要素:函数和变量

        本文链接:https://www.haomeiwen.com/subject/rfqjmxtx.html