Kotlin基本语法

第一章 基数变量和表达式

一、数据类型

1、String、Int、Boolean。。。 没有 int 、floater 等

2、val 是只读类型, 可以声明在方法内。 Const val 是定义的常量,只能声明在方法外

二、表达式

1、range表达式
var number =11

//表示 在0到10的范围判断

if( number in  0..10){

}
2、when表达式

//KT 的 if 和when是表达式,有返回值 when 类似于Switch

int week = 0
val info  = when(week){
    1 -> "今天是星期一"
    2 -> "今天是星期二"
    3 -> "今天是星期三"
    4 -> "今天是星期四"
    else - >{
       println("忽略星期几")
    }
}
println(info)  //void 关键字 无返回  用Unit类代替了java void 关键字
3、if表达式

//Kt的if是表达式,有返回值,java if是语句,没有返回值

    boolean isLogin = false
       println("是否登录:${ if(isLogin) "登录成功" else "登录失败" }")

四、函数表达式

image.png

Kt函数是先有输入,后又输出,方法前不写修饰符,默认public

//参数可以给默认值
   private function1(age : Int  = 20){
      println(age)
    }
可以无序传参

Unit 无返回值可以不写,默认是
Noting 类
  fun

第二章 函数

一、匿名函数

      val len = "hello".count()
      println(len)
  
  val len = "hello".count{
      it == "l"
   }
  
image.png
//第一步:函数输入声明
  val actions : () -> String

// 第二步:对上面函数的实现
   actions = {
          "hello word"
    //匿名函数不用写return,最后一行就是返回值
   }

//下面是对上面两步进行合并
val actions : (Int,Int,Int) - > String = {arg1,arg2,arg3 ->
    "输入参数:$arg1 , $arg2,$arg3"
  
}

/*
   fun actions(arg1 : Int,arg2 : Int,arg3 : Int ) : String{
               return  "输入参数:$arg1 , $arg2,$arg3"       
 }
*/

二、it 关键字

匿名方法,如果只有一个参数,可以不写变量名,系统会自动加一个it
如下:

  val actions : (String) - > String = {
    "输入参数:$it"
   }

/*
     等效如下函数
    fun actions(it : String) : {
        "输入参数:$it"
  }
*/

三、匿名函数类型推断

     val method1 = { v1 Double, v2 Float, v3 Int ->
         "v1:$v1, v2:$v2,v3:$v3"
}

//等价于 method1 函数: (Double,Float,Int)-> String
总结:
//方法名: 必须指定参数类型,和 返回类型
// 方法 = { 类型自动推断}

第三章 空安全

1、空安全表示

name String  = "dfdfdfdf"   //表示不为空,默认就是不为空
sex String ? =null           //表示可为空 
sex?.length()             //表示可为空,如果为空,就不执行
sex!!.length()           //表示断言,如果是空就抛空指针异常

2、空合并操作符 xxx ?: “如果为空” //表示如果不为空则返回前面,如果为空则返回 ?: 后面的值

3、异常处理 和java一样

try{
                } catch(e:Exchation){
          }

第五章 常用数据操作

1、== 和 ===的区别

== 值 内容的比较 相当于java的 equals
=== 引用的比较,相当于java == ,注意对于声明的两个相同字符串常量,=== 依然是同一个引用

2、String forEach

   String str = "ABCDEFGDDDFF"

    str.forEach{
      print("$it")//it是每个字符
  }

3.类型转换

1、String 转 Int
    val number  = "666".toInt()
    
    val number = "33.22".toInt()//这个会崩溃,如何解决如下
    
    val number  = "33.22".toIntOrNull() //如果失败就返回null,

2、
Double转Int
  println(22.34556.toInt())//22四舍五入
println(22.34556.toInt())//22 四舍五入
println(22.54556.roundToInt())// 23四舍五入

//r的类型:String
val r  = "%.3f".format(32.34345434) //保留三位小数

4、apply内置函数

5、let内置函数

    val reuslt = listOf(5,6,3,3,2,1).let{
       it.first() + it.first()  
     //匿名函数返回的是最后一行,
     // it表示集合本身
}

6、run函数

      val ruslt =     "dfdfdff".run{ 
                //内部持有this,
                //返回值是最后一行
                  8888.8f
              }

7、with函数

      val str =     "dfdfdff"
       with(str){
               //内部持有this,
                //返回值是最后一行
      1243.0.f
   }

8、also函数

      val str =     "dfdfdff"
      val result = str.also{
    //返回类型为本身,和apply函数一样
    //匿名持有it, it = str本身
}

9、takeIf函数和 takeUnless函数

    val String str = “take"
    str.takeIf{
     true/false
    //true 返回str本身
    // false 返回 null
}

takeUnless函数和takeIf刚好相反

 str.takeUnless{
     true/false
    //false 返回str本身
    // true 返回 null
}

第六章 集合框架

1、list

1.1不可变list

      val   list = listOf("小明","小红","小l")
      var value = list[0]//这种会出现角标越界异常


//下面两种方式可避免角标越界,如果越界就返回null
  var value = list.getOrElse(100){
      "你越界了"
        }
      var 
value = list.getOrNull(100){
      "你越界了"
        }

1.2可变list

   val list = mutableListOf("张三","李四","王五")
   list.add("haha")
   list.remove("张三")
  
//不可变list无法完成可变list的add和remove操作,
//只有转成可变list才能操作
  val list1 = listOf(1,22,33,11)
  val list2 = list1.toMutableList()

//当然可变list也可以转换成不可变list,
 val list3 = list2.toList()
  

1.3 mutataor函数

   val list = mutableListOf("df","dd","ccc","dd")
  list += "dfdfd"
  list -= "ccc" 
  // += 和 -= 相当于 add和remove ,是运算符重载

  list.removeIf{
    it.contains("2") //过滤删除
}

1.4 list遍历

      val list = listOf(1,2,3,4,5,6)
  //第一种
  for(i in list){
    print("元素:$I")//I是每个元素
   }
//第二种
list.forEach{
        print("元素:$it")//it是每个元素
     }

//第三种带下标的
list.forEachIndexed{ index,item
        print("元素:$item,下标:$index")//it是每个元素
     }

1.5 list 全量解构和部分解构

2、 Set集合

2.1 不可变set集合

    val   set = setOf("11","22","33","11")
    //set集合不能出现重复的元素
print(set.elementAt(5))
  //会崩溃,角标越界

  print(set.elementAtOrElse{
        "越界了"
      })
  set.elementAtOrNull(88)?:   "越界了"
    

2.2 可变set集合

    val   set = mutableSetOf("11","22","33","11")
    //set集合不能出现重复的元素
print(set.elementAt(5))
  //会崩溃,角标越界

  print(set.elementAtOrElse{
        "越界了"
      })
  set.elementAtOrNull(88)?:   "越界了"
    
   set.add("55")
   set.remove("11")

2.3 list快捷去重

    val   list = mutableListOf("11","22","33","11")
    list.toMutableSet().toList()   //这样去重
    等价于下面:
  list.distinct()

3、数组

数组和list的操作几乎一毛一样


list转数组
    val list = listOf(1,2,3)
  var intArray = list.toIntArray

 注意 Array<Object>   是对象类型

4、Map

4.1、map创建

 第一种方式创建
   var map1 = mapOf("value1" to("key1"),"value2" to("key2"),)
第二种方式创建
   var map2= mapOf(Pair("key1","value1"),Pair("key2","value2"),)

4.2、map操作


   var map1 = mutableMapOf("value1" to("key1"),"value2" to("key2"),)

   val value =   map1["key1"]
  //  或者通过
    map.getOrDefault("key","默认值")
 
    map1 +=  "AA" to  "value"
    map1["key" ] = value

4.3、map遍历


   var map1 = mapOf("value1" to("key1"),"value2" to("key2"),)
 第一种
 map.forEach{ 
    print( "key:$it.key,value:$it.value")
}
 第二种:
map.forEach   { key,value->
    
}
 第三种种:
map.forEach   { (key,value)->
    
}
第四种
        for(item in map){
      print(item.key,item.value)
    }

第七章 类和接口

构造函数

  class  KtClassDemo (name : String,age : Int) {
          var name = name    
          var age = age
    }

主构造、次构造、init方法的初始化顺序

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

推荐阅读更多精彩内容

  • Kotlin 特点 1.兼容性:Kotlin与JDK6完全兼容,保障了Kotlin应用程序可以在较旧的Androi...
    ZunJun阅读 1,130评论 0 1
  • 首先介绍下Kotlin在项目里面集成方法,集成方式很简单,只需要按照下面操作就好 在根目录的Build文件里面添加...
    wayDevelop阅读 1,386评论 0 0
  • 参考教程https://www.jianshu.com/p/e42a9ea09ac0https://www.run...
    bruce1990阅读 726评论 0 0
  • 1、定义包 包的声明应处于源文件顶部 目录与包的结构无需匹配:源代码可以在文件系统的任意位置。 2、 定义函数 1...
    爱学习的蹭蹭阅读 532评论 0 1
  • 在学习Kotlin的过程中,我们会发现一些java中没有的有趣特性,如表现性,安全性,扩展性,函数支持lambda...
    红尘丶阅读 573评论 0 1