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

2017-05-27  本文已影响222人  b77535296c81

一、函数

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.类型转换

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"
上一篇下一篇

猜你喜欢

热点阅读