zoukankan      html  css  js  c++  java
  • kotlin-30分钟快速入门

    1.定义变量

    在kotlin中,通过var 或者 val 来定义,区别就是 val定义的变量只能读不能修改,var则可以修改。

    val a:Int = 1
    //等价于java: final int i = 10;
    a = 2 // 错误,变量a是只读
    var b:Int = 2
    b = 15 // ok

    kotlin中定义的变量的格式

    [变量名]:[变量类型]

    另一方面,kotkin中的整形既不是用int或Integer,而是使用Int,这里简单介绍一下kotlin中的基本类型:数字、字符、Boolean、数组和字符串

    kotlin关键字对应java关键字说明
    Double Double 64位
    Float Float 32位
    Long Long 64位
    Int Integer 32位
    Short Short 16位
    Byte Byte 8位
    Arrya Object[]  
    Boolean Boolean  
    String String  
    Any Object kotlin中使用Any来达到java中Object的作用

    看来除了Int类型,其他的好像也和java中的差不多。这里只是简单与java中对比介绍一下,后面会专门介绍这些基本类型与java中的异同。

    变量类型可以省略

    对于在定义的时候同时初始化的变量,可以省略变量类型,kotlin会根据初始化的值进行变量类型推断

    val a = 1       // a是Int类型,Long在则在后面加上L,如 10L
    val b = 1.2     // b是Double类型,Float在后面加上f/F,如1.2f
    val c = "test"  // c是String类型

    2.定义方法(function)

    fun sum(a: Int, b: Int): Int {
        return a + b
    }
    
    fun myPrint(a: Int) {
        print(a)
    }
    
    fun main(args: Array<String>) {
        print("sum of 3 and 5 is ")
        println(sum(3, 5))
    }

    注意的是

    • kotlin中任何东西都是对象,包括方法,所以方法的定义和变量类似

    [方法定义]:[返回类型]{方法体}

    • 如果没有返回,则可以省略返回类型(或者使用Unit)
    • 参数传递过来的变量是只读的(val修饰)
    fun someCall(a:Int){
        a = 2 //error
    }

    3.null检查

    在kotlin中,默认定义一个变量是不能为null

    var a:Int = null        //compile error
    
    var a:Int = someCallReturnNull()  // runtiem excetion:KotlinNullPointerException

    那如果允许空,则需要在变量类型后加上'?'例如

    var a:Int? = null

    方法的类似,如果定义方法

    fun someCall(): Int {
        return null //compile error
    }

    因为返回的类型为Int,是不允许为空的,如果要返回空怎么办呢,一样加上'?'

    fun someCallWillReturnNull(): Int? {
        return null //ok
    }

    如果我们定义了不能为空的类型,去接受可能返回空的函数怎么办,这个使用要用到另外一个符号'!!'

    var a:Int = someCallWillReturnNull() //compile error
    var b:Int = someCallWillReturnNull()!!
    //变量也是同理
    
    var c:Int? = null
    var d:Int = c!! //当然这里肯定会跑出NPE,至少在编译到时候不会报错

    其实可以简单理解,使用!!修饰的变量,如果为null就会跑出NPE.例如a!! 可以理解

    if(a==null){
        throw new NullPointExcetion();
    }

    空检测是kotlin的一个特点,他规定如果某些方法会返回null则在处理这些返回时需要注意,否则认为是null安全的(即不用检测null)

    4.字符串模板

    如果要在java中找个对应功能,可能就是String.format(),但是kotlin中的字符串模板更强大一点

    var a = 1
    // 简单的变量替换
    val s1 = "a is $a" 
    
    a = 2
    // 在字符串模板中使用一些字符串方法
    val s2 = "${s1.replace("is", "was")}, but now is $a"

    5.条件表达式

    if表达式

    常规的用法和java中类似

    fun max(a: Int, b: Int):Int{
        var max: Int
        if (a > b) {
            max = a
        } else {
            max = b
        }
        return max
    }

    但是kotlin提供的一些语法糖,例如上面max等于a和b中的最大者,可以这样写

    val max =if (a > b) { a} else { b }
    

    注:kotlin总没有  ? : 三元运算符

    进一步,如果方法返回a和b中的最大者

    fun max(a: Int, b: Int) = if (a > b) {a} else {b}

    可见变量和方法其实有很共性的(其实对于kotlin都是对象)

    when表达式

    取代java中switch,

    when(x){
        1 -> someCall1(x)
        2,3 -> someCall2(x)
        else -> someCall3(x)
    }

    6. 类型检查和转换

    在java中,我们常常强转一个类型会这么写

    if(obj instance MyObj){
        MyObj myObj = (MyObj)obj;
        myObj.someCall()
    }

    是不是感觉很冗余,kotlin抓住了这个痛点

    if(obj is MyObj){
        obj.someCall() //已经转换位MyObj类型
    }

    或者也可以这样

    if(obj !is MyObj){
       //do something
    }
     obj.someCall() //已经转换位MyObj类型

    7.数字序列

    kotlin中提供遍历一组数字序列,例如 1到100 可以表示为 1..100

    for (i in 1..100) { ... }

    8.集合操作

    遍历

    for (item in items) {
        println(item)
    }

    kotlin遍历list或者map十分方便

    //遍历list
    val items = listOf("apple", "banana", "kiwi")
    for (item in items) {
        println(item)
    }
    //遍历map
    for ((k, v) in map) {
        println("$k -> $v")
    }

    检查某个对象是否在集合中

    when {
        "orange" in items -> println("juicy")
        "apple" in items -> println("apple is fine too")
    }

    使用lambda进行集合操作

    这个有点类似java8中的stream

    lists
    .filter { it.startsWith("a") }
    .sortedBy { it }
    .map { it.toUpperCase() }
    .forEach { println(it) }
    

      

    注:如果lambda的参数一个,可以省略,并且使用it来代替

    小结

    本人也是刚开始学习kotlin,上面只是对kotlin的一些基础用法进行简要介绍,大多参考官方文档。kotlin的还有很多高阶用法,后面还会继续些文章介绍,一方面可以自己学习kotlin,另一方面可以分享自己所学的东西,和大家一起交流

  • 相关阅读:
    使用::befor和::after伪元素在网站中添加图标
    使用LESS对CSS进行预处理
    window.innerWidth和document.body.clientWidth的区别
    javascript原型链继承
    javascript中的类型检测
    ASP.NET网站报Service Unavailable错误的解决办法
    在ASP.NET MVC中使用UEditor无法提交的解决办法
    EasyUI DataGrid设置列宽为百分比导致表头和内容错位的解决方法
    使用JS读取本地文本文件(兼容各种浏览器)
    美化上传文件按钮
  • 原文地址:https://www.cnblogs.com/lizo/p/7231167.html
Copyright © 2011-2022 走看看