Kotlin 入门学习教程总结

简介:

最近公司开展了一个新项目,自己考量了一下决定用kotlin来写.那么分享一下我的学习历程,希望对您有所帮助
  • implementation "org.jetbrains.anko:anko:0.10.8" anko是使用kt语言来编写的一个android增强库,封装了很多东西,使我们的操作更加简化.
  • kt有自动映射功能,xml写了id,直接可以在kt中使用,无需findViewByid,直接把控件id当作对象使用即可.

数据类型

A:数据类型跟java一样(写法不一样)分别都有:
Int Long Folat Double Boolean Char String
转换的话--> i.toInt...其他方法一样
B:数组(数组其实也是大同小异,只不过String的时候有一些区别)
IntArray LongArray FolatArray DoubleArray BooleanArray CharArray
使用: var long:LongArray =longArrayOf(1,2,3)
使用StringArray: var string:Array = arrayOf("哈","哈","大","笑")
C:集合的话跟Java都一些不一样:kt分为只读跟可变,就跟val跟var一样(前面是只读,后面是可变)
Set MutableSet List MutableList Map MutableMap
使用: var list:MutableList = listOf("1","2","3","4")
Map使用有一些不一样 (2种方式初始化,个人喜欢第一种,简单清晰)

val mapList: Map = mapOf(Pair("1", "王涛"), Pair("2", "王飞"), Pair("3", "王伟"))`
`val mapList1: Map = mapOf("1" to "王涛", "2" to "王飞", "3" to "王伟")

D:循环: for-in forEach 迭代器遍历(非常不喜欢)

  for (item in mapList) {
               string = "内容: ${item.key} --- ${item.value}"
               toast(string)
           }
           mapList.forEach { key, value ->
                string = "${string} 大家:${key} -- ${value}"
      }

控制语句

A:条件分支:if-else基本没改动 swtich defult 改成 when else

     tv.text = if(a == 1){"a 等等于 1"} else {"a 不等于 1"}
               tv.text = when(t.text){
                  "1" -> "2"
                  "2" -> "3"
                  else ->"成功了"
               }

B:等式判断: kt中String判断也可以使用 == .还有一种方式是 === 三个等号,自己去研究一下,是跟clone有关
C:is 和 in: instanceof == is (校验变量是否为某种类型)
in:java 中没有这个东西,他是判断数组或者集合中,存不存在此参数 (变量名 in 数组名)

D:条件循环: 比如从20-100循环偶数 恐怕之前的循环就做不到了.所以这边有条件循环

for(i in 10 until 22){ 这是10-20 包括10 但是不包括20} 
for(i in 20 downTo 10) { 循环递减 从20递减到10 其中20跟10都包括}
for(i in 10 .. 20 step 2){每次循环递增2,其中包括10跟20,可以把..改成until,这样就只包括10}

E:跳出多层循环: outside@ while(){....break@outside} outside可以随便起名字 重要的是@符号

 fun ss() {
        var i = 1
        outSide@  while (i<100000){
            if (i == 50){
                break@outSide
            }
        }
    }

F:swtich去掉了,改成了when,写法如下

      when (10) {
            1 -> 0
            2 -> 1
            else -> 2
        }

函数的基本用法

  • A:Java中使用@Override 表示改函数重载父类的方法,kt使用小写的 override 在同一行表达重载操作
  • B:Java中使用 public 表示该函数是公公方法,kt默认函数是公开,所以省略了public(省略不代表没有)
  • C:Java中使用 void 表示改函数没有返回参数,kt不存在关键字 void(这个是没有)
  • D:kt新增fun,类似于Java中的class
  • E:Java的参数格式是:(变量类型 变量名称 举例:String str) kt(变量名称:变量类型 举例:str:String)
  • F:kt引入了空安全机制,如果某个变量允许为空,就需要在变量类型后面加个? val string: String? = "123"
       over fun onCreate(...)
            fun getText(str:String,age:Int):String{
                    return string
            }   
       //这样就不用全部传入了 只需要传入age
            fun getText(age:String,str: String = "王涛", inte: Int = 2): String {
                    return "$str 第 $inte 次进入"
            }

可变参数

  • Java中是(String... args) kt中是(vararg args:String)
            fun getVarText(vararg other: String): String {
                var str = ""
                return str
            }

泛型函数

  • 上面都说传入基本类型的比如(int,String,Double...),在开中传入集合,数组等也是很有必要的
      fun  getListVararg(vararg other: T): String {
                var str = ""
                for (item in other) {
                    str = "$str 哈喽- $item \n"
                }
                return str
            }

内联函数
-必须这么写,将改为,同时必须在fun前面添加关键字inline 他跟上面的泛型函数的区别是,不支持多个,并且可以返回 T 类型

        //这是Map
             inline fun  getTextMap(other: Map): String {
                var str = ""
                for (item in other) {
                    str = "$str 哈喽- ${item.key} -- ${item.value} \n"
                }
                return str
            }
            //这是List (返回list 范型函数没办法返回List)
            inline fun  getTextList(other: List): List {
                return other
            }

简化函数

  • 我认为他就是一个递增循环(自己调用自己),适合54321这种方式来用简化函数
        //如果n==1, 输出的结果就是 5*4*3*2*1的结果
        fun factorial(n:Int):Int = if(n<1)n else n*factorial(n-1) 

同步java

在方法后面加入 @JvmOverloads constructor 这段代码 他就会给我去自动的同步java
companion object {} == static 同时{}里面可以方静态方法

你可能感兴趣的:(Kotlin 入门学习教程总结)