Kotlin 基本要素:函数和变量

image.png

前言


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

Hello World!


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

      fun main(args: Array) {
          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 基本要素:函数和变量)