美文网首页
Kotlin学习(一)——函数、常量与变量、数据类型

Kotlin学习(一)——函数、常量与变量、数据类型

作者: b77535296c81 | 来源:发表于2017-05-27 20:58 被阅读222次

    一、函数

    Kotlin中,使用关键字fun来申明函数,fun 后面紧跟着的是函数名,函数形式参数,返回值,函数体
    例如:
    函数名:sun
    形参:有a、b两个,都是Int类型,
    返回值:以:申明后面跟着的是具体的返回值类型,如需要返回无意义的值(java的void)时可以不写或者用Unit<br />

    fun sum(a: Int, b: Int): Int {
          return a + b
    }
    

    无返回值

    fun printSum(a: Int, b: Int):Unit {
    println("sum of $a and $b is ${a + b}")
    }
    

    或者不写Unit

    fun printSum(a: Int, b: Int):Unit {
    println("sum of $a and $b is ${a + b}")
    }
    

    <br />

    Main函数
    fun main(args: Array<String>) {
    println("hello world");//在kotlin中,对;结束标识符没有作严格要求,可写可不写,println是kotlin种的打印语句相当于java的System.out.println
    }
    

    二、常量与变量

    kotlin中常量和变量的定义分别用val、var来定义,定义常量和变量分别有以下几种形式:

    常量的定义(使用val关键字)

    val a: Int = 1  // 立即赋值
    val b = 2   // 自动推断出 `Int` 类型
    val c: Int  // 如果没有初始值类型不能省略
    c = 3       // 明确赋值
    

    变量的定义(使用var关键字)

    var x = 5 // 自动推断出 `Int` 类型
    x += 1
    

    三、数据类型

    在 Kotlin 中,所有东西都是对象,在这个意义上讲所以我们可以在任何变量上调用成员函数和属性。有些类型是内置的,因为他们的实现是优化过的。但是用户看起来他们就像普通的类。本节我们会描述大多数这些类型:数字、字符、布尔和数组。<br />

    1.数字类型

    Kotlin 提供了6种类型来表示数字(与 Java 很相近):Double、Float、Long、Int、Short、Byte<br />
    注意在 Kotlin 中字符不是数字<br />
    kotlin中数字类型的字面值有个特性,就是支持下划线使得数字更有阅读性(从kotlin以后1.1)<br />
    例如:

    val oneMillion = 1_000_000
    val creditCardNumber = 1234_5678_9012_3456L
    val socialSecurityNumber = 999_99_9999L
    val hexBytes = 0xFF_EC_DE_5E
    val bytes = 0b11010010_01101001_10010100_10010010
    

    值常量字面值有以下几种:

    十进制: 123<br />
    Long 类型用大写 L 标记: 123L<br />
    十六进制: 0x0F<br />
    二进制: 0b00001011<br />
    注意: 不支持八进制<br />
    Kotlin 同样支持浮点数的常规表示方法:<br />
    默认 double:123.5、123.5e10<br />
    Float 用 f 或者 F 标记: 123.5f<br />

    2.类型转换

    • 隐式转换,不需要书写格外代码,由系统自动实现类型转换,Kotlin中如果定义变量明确指定了数字类型,那么就不能进行隐式转换了,如下面的代码就不被支持

        val a: Int? = 1 // 一个装箱的 Int (java.lang.Integer)
        val b: Long? = a // 隐式转换产生一个装箱的 Long (java.lang.Long) 
      
        正确的转换代码:
        val a:Int? = 1
        val b:Long? = a.toLong
      
    • 显示转换,需要使用格外的代码,如需要把一个Int类型转换成Long类型,需要使用Int.toLong

        每个数字类型支持如下的转换:
        toByte(): Byte
        toShort(): Short
        toInt(): Int
        toLong(): Long
        toFloat(): Float
        toDouble(): Double
        toChar(): Char
      

    3.布尔

    布尔用 Boolean 类型表示,它有两个值:true 和 false。

    若需要可空引用布尔会被装箱。

    内置的布尔运算有:

    || – 短路逻辑或
    && – 短路逻辑与
    ! - 逻辑非

    4.数组

    数组在 Kotlin 中使用 Array 类来表示,它定义了 get 和 set 函数(按照运算符重载约定这会转变为 [])和size 属性,以及一些其他有用的成员函数:

    class Array<T> private constructor() {
    val size: Intoperator fun get(index: Int): Toperator fun set(index: Int, value: T): Unitoperator fun iterator(): Iterator<T>// ……
    }   
    

    我们可以使用库函数 arrayOf() 来创建一个数组并传递元素值给它,这样 arrayOf(1, 2, 3) 创建了 array [1, 2, 3]。 或者,库函数 arrayOfNulls() 可以用于创建一个指定大小、元素都为空的数组。
    另一个选项是用接受数组大小和一个函数参数的工厂函数,用作参数的函数能够返回 给定索引的每个元素初始值:
    Kotlin 也有无装箱开销的专门的类来表示原生类型数组: ByteArray、 ShortArray、IntArray 等等。这些类和 Array 并没有继承关系,但是 它们有同样的方法属性集。它们也都有相应的工厂方法:

        val x: IntArray = intArrayOf(1, 2, 3)
        x[0] = x[1] + x[2]
    

    数组的使用Demo

        fun testArray() {
        //数组的定义
        var arrays: Array<Int> = arrayOf(12, 21, 33, 44, 55);//定义一个Int类型数组,直接赋值
        var arrays2: Array<Int?> = arrayOfNulls<Int>(arrays.size)//定义一个长度和arrays一样的空数组,后赋值
        //遍历arrays数组,并且给arrays赋值
        for (c in 0..arrays.size-1){
            println("arrays的值遍历:${arrays[c]}");
            arrays2.set(c,arrays.get(c)+1)
        }
        //遍历arrays2数组
        for (c in arrays2) {
            println("arrays2:$c   ");
        }
    }
    

    5.字符串

    字符串用 String 类型表示。字符串是不可变的。 字符串的元素——字符可以使用索引运算符访问: s[i]。 可以用 for 循环迭代字符串:

        for (c in str) {
            println(c)
        }
    

    字符串字面值<br />
    Kotlin 有两种类型的字符串字面值: 转义字符串可以有转义字符,以及原生字符串可以包含换行和任意文本。转义字符串很像 Java 字符串:

    val s = "Hello, world!\n";//转义采用传统的反斜杠方式
    

    原生字符串 使用三个引号(""")分界符括起来,内部没有转义并且可以包含换行和任何其他字符:

    val text = """
    for (c in "foo")
    print(c)"""
    

    也可以类似Java中通过 trimMargin() 函数去除前导空格:

    val text = """|Tell me and I forget.|Teach me and I remember.|Involve me and I learn.|(Benjamin Franklin)""".trimMargin()
    

    默认 | 用作边界前缀,也可以选择其他字符并作为参数传入,比如 trimMargin(">")。

    6.字符串模板

    字符串可以包含模板表达式 ,即一些小段代码,会求值并把结果合并到字符串中。 模板表达式以美元符($)开头,由一个简单的名字构成:

    val i = 10
    val s = "i = $i" // 求值结果为 "i = 10"

    相关文章

      网友评论

          本文标题:Kotlin学习(一)——函数、常量与变量、数据类型

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