logo头像
从未如此简单有趣

Kotlin学习笔记一

Kotlin简介

Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以同时用在一个项目中。

下载地址

下载地址

在线练习平台

1.Kotlin的基本类型

基本数据类型位数

Type Bit width
Double 64
Float 32
Long 64
Int 32
Short 16
Byte 8

与Java基本数据类型对比

Java Type Kotlin Type
byte kotlin.Byte
short kotlin.Short
int kotlin.Int
long kotlin.Long
char kotlin.Char
float kotlin.Float
double kotlin.Double
boolean kotlin.Boolean

复杂类型的对比:

Java Type Kotlin Type
java.lang.Object kotlin.Any!
java.lang.Cloneable kotlin.Cloneable!
java.lang.Comparable kotlin.Comparable!
java.lang.Enum kotlin.Enum!
java.lang.Annotation kotlin.Annotation!
java.lang.Deprecated kotlin.Deprecated!
java.lang.Void kotlin.Nothing!
java.lang.CharSequence kotlin.CharSequence!
java.lang.String kotlin.String!
java.lang.Number kotlin.Number!
java.lang.Throwable kotlin.Throwable!

集合类型的对比:

Java Type Kotlin Type Kotlin mutable type Loaded platform type
Iterator Iterator MutableIterator (Mutable)Iterator!
Iterable Iterable MutableIterable (Mutable)Iterable!
Collection Collection MutableCollection (Mutable)Collection!
Set Set MutableSet (Mutable)Set!
List List MutableList (Mutable)List!
ListIterator ListIterator MutableListIterator (Mutable)ListIterator!
Map<K, V> Map<K, V> MutableMap<K, V> (Mutable)Map<K, V>!
Map.Entry<K, V> Map.Entry<K, V> MutableMap.MutableEntry<K, V> (Mutable)Map.(Mutable)Entry<K, V>!

数组类型的映射:

Java Type Kotlin Type
int[] kotlin.IntArray!
String[] kotlin.Array<(out) String>!

2.函数的使用

定义函数使用fun关键字

fun sub(a: Int, b: Int): Int {
    return a - b
}

上面定义一个名为sub的函数,该函数有两个Int类型参数,有一个Int型的返回值,在Kotlin中,一句代码结束可以不用加分号(;)结束,加分号也没问题。在Kotlin中可以对函数进行简写如下:

fun sub(a: Int, b: Int) = a - b;

上面fun未显示的给出返回值则Kotlin会自动推测出返回值类型。

fun prin(a: Int, b: Int): Unit {//没有返回值可以显示的用Unit表示返回
    println(a - b) 
}

fun prin(a: Int, b: Int) {//也可以不写出返回值
    println(a - b)
}

3. 定义常亮和变量

在Kotlin中使用val声明一个常量(只读属性),而使用var声明一个变量。

fun mytest() {
    //使用val关键字声明的常量,和Java中static final一致,声明时需要赋值
    val a: Int = 1 //定义时指明常量类型
    val b = 2 //自动推测类型
    val c: Int //声明一个未赋值的常量时,必须指明类型
    // a = 3  //常量值不可修改

     //使用var关键字声明一个变量,变量的值可以修改    var year: Int = 2016 //显式指定变量的类型    var month = 5 //自动推断变量类型    var day: Int //声明一个不初始化的变量,必须显式指定类型    month = 6 //变量值可以被修改
}

4. 注释

fun comments() {
//    注释一行代码
//    var s = "hello world"
    /*注释一段代码
    var a = 8
    a++
    a--*/
}

5. 条件表达式

//正常写法
fun max(a: Int, b: Int): Int {
    if (a > b) 
        return a
    else 
        return b
}

//在kotlin中可以简写为:
fun max1(a: Int, b: Int) = if (a > b) a else b

6. 可空类型

在声明变量时在变量类型后加一个问好?表示该变量是可空变量,其值可以为空,在调用时需注意非空判断

var name: String? = "mytest"
name = null
var sex: String = "male"
//sex = null //这句会报错,因为sex是不可空类型

返回值也可以为可空类型

fun mytest(s: String): Int? {
    if (s == null) {
        return null
    }
    return Integer.parseInt(s)
}

7. 类型检查和自动类型转换

在Kotlin中使用is进行类型检查,在检查后不需要显示转换,可直接按检查的类型使用

fun getStringLength(n: Any): Int?{
    if (n is String) {
        return n.length
    }
    return null
}

8. 循环

//for循环
fun myfor() {
    var arr = listOf(1,2,3,4)
    for (i in arr.indices) {//索引方式
        println(arr[i])
    }
    for (num in arr) {//直接使用list中对象
        println(num)
    }
}

fun mywhile() {
    var i = 0
    while (i < 10) {
        println ("$i")
        i++
    }
    i = 0
    do {
        println(i)
    } while (i < 10)
}

9. when表达式

when类似Java中的switch,是一个多分支选择的表达式

fun main(args: Array<String>) {
    testCase("hello world")
}

fun testCase(obj: Any) {
    when(obj) {
        is String -> {
            print("this is string")
        }
        is Int -> {
            print("this is integer")
        }
        else -> {
            print("unkown value")
        }
    }
}

10. ranges的使用

(1) 使用in操作符检查一个数是否在某个范围内,!in表示是否不在某个范围内

/*
判断分数是否大于等于90,小于等于100
 */
fun isGood(score: Int) {
    if(score in 90..100) //ranges是闭区间
        println("very good")
    else
        println("not so good")
}

(2) 检查索引是否越界

/*
检查index是否在数组arr的索引范围内
 */
fun checkIndex(index: Int, arr: Array<Int>) {
    if(index in 0..arr.lastIndex) //arr.lastIndex返回的是数组的最后一位的下标
        println("index in bounds")
    else
        println("index out of bounds")
}

(3) 遍历一个范围

for (i in 1..5) {
    println(i)
}

//也可以使用in遍历一个集合
fun test(arr: Array<String>) {
    for (str in arr) {
        println(str)
    }
}

这些都是Kotlin的一些基本语法知识,对于入门Kotlin来说需要学的还有很多,Kotlin在简化代码方面做 了很多努力,现在Google官方也宣布Android官方支持的语言是Kotlin,所以未来Kotlin肯定会有很好的发展。

上一篇