Kotlin学习笔记之 1 基础语法

首发于公众号: DSGtalk1989

1.基础语法

  • 方法描述

    fun methodName(type1 : Type, type2 : Type2) : returnType{}
    
    fun methodName(type1 : Type, type2 : Type2) : Unit {
        type1 = type2
    }
    
  • 变长参数 vararg

    fun methodName(vararg v : Int){
        //此处v是个数组
        for(nv in v){
           print(v)
        }
    }
    

    类似于 java中的 ...

    //主函数   数组类型的
    fun main(args : Array<String>){
        
    }
    
  • lambda 匿名函数

    fun main(args : Array<String>){
      //(传参类型1, 传参类型2) -> 返回类型 = { 具体参数1, 具体参数2 -> 返回参数}
      val plus : (Int, Int) -> Int = { x,y -> x+y}
      println(plus(1,2))
    }
    
  • var 可变 val 不可变

    有一个非常有意思的现象,kotlin自带属性判断功能,即你不指定具体的数据类型,kotlin可以帮你分析出你想要什么。比如说:

    //i被判断成Int
    var i = 123
    //s被判断成String
    val s = "123"
    
  • String 字符串中直接引入参数和方法

    //$符号之后跟{}表示方法,跟参数名表示引用参数
    val s = "${a.replace("ss", "ww")}, and then it is $a"
    

    想要直接的去使用字符$,我们一般也是借助$去实现,因为$没有相应的转义符

    val s = "${`$`}, is this"
    
  • 关于空

    //这边我们可以直接把String? 看成是一种类型,解释为可以为空的String类型
    //可能会有疑问既然s已经被val描述,是final类型的了,还会出现可能为空的String
    //因为虽然你不能再对s赋值了, 但是你依然可以改变非赋值的方式改变它,比如replace什么的等等
    val s : String? = "23"
    
    //一旦s为空就报错
    val a = s!!.toInt()
    //一旦s为空,可以继续执行不报错,并且此处的b为null
    var b = s?.toInt()
    //b为null之后,我们紧接着调用b的其他的方法,产生的也是null,并且不会报错,这就是强大的kotlin容错机制
    var c = b.toString()
    //? 和 ?: 的判断表示如果为空的话,那么就返回后面的内容
    //此处的有需要多说一句,一旦为空的情况,那么后面想给什么就给什么,无论字符串还是整型等等,kotlin均可以自动识别,跟你前面想要的类型没有关系
    var d = b?.toString() ?: "123"
    
    //此处需要注意,一旦是有可能出现为空的类型,kotlin就会在适当的时候通知到你
    var h = s?.toInt()
    var i = 1
    //此时由于h很有可能为空,因此kotlin会提示你不允许直接使用*操作符,而是要使用times方法进行?操作
    var j = h * j    
    //即如下这样,times方法在kotlin中被用来做乘法的使用
    var j = h?.times(j)
    
  • 类型检测

    kotlin 中使用 is 来代替使用 isinstanceOf

    kotlin 中不存在Object类,通常这个方法可以传入任何数据类型,kotlin直接使用 Any

     fun getLength(s : Any){
        if(s is String){
           println(s.length)
        }
     }
    
  • 范围

    java中使用的是 for(int i = 0; i < n; i++)

    kotlin中比较方便,直接使用 for(i in 1..n)

    ..针对任何可以进行比较的数据类型,比如 for(c in '0'..'9'),正对整形有单独优化,一般使用比较多的就是整型,并且对顺序有要求,只能从小到大

    for(i in 4..1) 不会进到for循环来,因为4无法走到1

    针对从高到低的情况,要使用到downTo for(i in 4 downTo 1)

    for(i in 1..4 step 2) ==== for(int i = 1; i <= 4; i = i + 2) 最终出来的是1,3

    ..和downTo都是包含边界数字的闭集[],如[1,4],如果想要开集,需要使用到until描述符

    for(i in 1 until 10) ====== [1, 10) 但是由于局限性,until也只能用在从小到大的并且只能做右边的开集,能用until,就尽量不去使用1..n-1

    范围既可以用在for循环中也能用在if条件判断中

    比如 if (i in 1..4) 1 <= i <= 4 if(c in '0'..'9') '0' <= c <= '9'

    补充(1) 范围之外直接使用 !in

    if(i !in 1..4)  
    

    即 i 不在 1~4之间

    补充(2) 结合when来判断,数组中是否存在某元素

    when{
       "a" in items -> {}
       "b" in items -> {}
    }
    
  • with

    kotlin中我们可以借助with来进行连续调用方法

    class Turtle {
          fun penDown()
          fun penUp()
          fun turn(degrees: Double)
          fun forward(pixels: Double)
      }
      
      val myTurtle = Turtle()
      with(myTurtle) { // 画一个 100 像素的正方形
          penDown()
          for(i in 1..4) {
              forward(100.0)
              turn(90.0)
          }
          penUp()
      }
    
  • java7 try with resources

    java7中的特性,只要是实现了closeable的在使用完成之后需要释放资源的类,会在try代码体执行完成之后释放掉资源,在kotlin中我们一般使用use方法,规定为只要实现了closeable接口的都有这个方法,意思为use了之后就会释放自己的资源

    //java7
    try(BufferedReader br = new BufferedReader(new FileReader(path))){
       return br.readLine();
    }
    
    //kotlin
    var bufferedReader = BufferedReader(FileReader("path"))
      bufferedReader.use { 
          print(it.readLine())
      }
    
    
  • 注释习惯使用[]而非@param @return

    除非需要做特长的单独性说明,一般我们直接使用[]

    /**
       * Returns the absolute value of the given [number].
       */
      fun abs(number: Int) = ……
    
  • 能用val不用var,一般用最基本不可变集合

    valvar不做过多解释了,此处的不可变集合指的是Set``List``Map,优先使用这些,而不是优先使用HashSet``ArrayList``HashMap

  • 条件语句优先级

    二元首选if,其次再用when

  • 循环语句优先级

    优先使用高阶函数,filter``map这种,需要单独处理的我们用for,除非在链式中调用

  • 能属性不用函数

    底层算法会优先使用属性,而不是函数。所以如果是没有参数的方法,可以直接用属性替代。

  • 强转操作符 as

    java中的强转是在对象前加上括号类型的方式,kotlin中是通过as进行强转的。

    一般我们为了避免出现castException或者空指针的情况,直接使用 ?as来进行强转。


Kotlin学习笔记之 1 基础语法

Kotlin学习笔记之 2 基本数据类型

Kotlin学习笔记之 3 条件控制

Kotlin学习笔记之 4 循环控制

Kotlin学习笔记之 5 类和对象

Kotlin学习笔记之 6 继承

Kotlin学习笔记之 7 接口

Kotlin学习笔记之 8 扩展

Kotlin学习笔记之 9 数据类与密封类

Kotlin学习笔记之 10 泛型

Kotlin学习笔记之 11 枚举类

Kotlin学习笔记之 12 对象表达式和对象声明

Kotlin学习笔记之 13 基础操作符run、with、let、also、apply

Kotlin学习笔记之 14 包与导入

Kotlin学习笔记之 15 伴生对象

Kotlin学习笔记之 16 委托

Kotlin学习笔记之 17 可观察属性

Kotlin学习笔记之 18 函数

Kotlin学习笔记之 19 高阶函数与 lambda 表达式

Kotlin学习笔记之 20 内联函数

Kotlin学习笔记之 21 解构声明

Kotlin学习笔记之 22 集合

Kotlin学习笔记之 23 相等判断

Kotlin学习笔记之 24 操作符重载

Kotlin学习笔记之 25 异常捕捉

Kotlin学习笔记之 26 反射

Kotlin学习笔记之 27 类型别名

Kotlin学习笔记之 28 协程基础

Kotlin学习笔记之 29 上下文与调度器

Kotlin学习笔记之 30 协程取消与超时

Kotlin学习笔记之 31 协程挂起函数的组合

Kotlin学习笔记之 32 协程异常处理

Kotlin学习笔记之 33 协程 & Retrofit

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容