从java到Kotlin学习二:函数与类

函数的定义和调用

集合

kotlin 并没有创建自己的集合类 而是使用java 的集合类 这样可以完美实现和java 的互相调用  

创建: 

  • java :

      Int []  array=new Int[count]   List list=new ArrayList() Map map=new HashMap()

  • kotlin 

       var array:IntArray=intArrayOf()  var list =listOf()    var map=hashMapOf()    

区别比较大的就是数据的表示  由之前的[] 变成了 array  

函数

kotlin中添加了命名空间和默认值  

举个栗子 

   假设我们有一个从一个String串中获取制定位置的字符 的方式 

  • java :

        定义 public char getChar(String str,int position)

        调用 getChar(/*str*/ "abc",/*postion*/ 2) 

  • kotlin 

       定义 fun getChar(str :String,position:Int=0) //添加默认参数值

       调用 getChar(str="abc",position =2)//更加优雅的命名参数

消除静态工具类 

  kotlin中 使用顶层函数和属性 来代替我们静态工具类定义  

  • java 

      class CalculateUtils{

          public  static finial String TAG="CU"

          public static void add(int a.int b){...}

       }

  • kotlin:

       在kotlin中我们可以创建类  我们直接创建 CalculateUtils.kt  不需要写class CalculateUtils{}   直接使用下面代码

       const val TAG="CU"//顶层属性

       fun add (a:Int,b:Int)//顶层方法 

扩展方法/属性

  • 方法

      所谓扩展 就是能够随意的为任何类添加方法 并且能够想原生方法一样调用 神奇~

      我们为String 添加一个方法 名字叫 lastCharPostion  用来获取最后一个字符的位置  

      我们任意创建一个类  AString.kt

      fun String.lastCharPostion():int= length-1

      ok 那么我们就可以直接使用了 

      var position ="authorName".lastCharposition()  //输出的应该是9

      但是如果再java中调用的话 就没有这么优雅了

      AString.lastCharPostion("authorName")

注:顶层函数会被编译成一个静态函数  由于是静态函数 所以不支持重写  

  • 属性:

        关于属性  我们前面说过  分为可变和不可变

         不可变属性:只需要添加get方法 即可

        val String.lastChar:Char 

        get()=get(length-1)

        可变属性 需要同时定义set和get方法

        var StringBuilder.lastChar:Char

             set(value:Char){

                 this.setCharAt(length-1,value)

            }

            get()=get(length-1)

可变参数

    java :

        public int  getMax(int... nums){...}//我们通常使用... 实现多个参数的表示  直接作为数组使用

  kotlin:

        fun getMax(vargra valuse:Int):Int{ val list=values.asList() }//使用 vararg实现多个参数表示   使用asList进行转换

键值对处理

    中缀调用 

        kotlin 特有 什么是中缀调用呢 举个栗子 

        val map=mapOf(1  to "more",3 to "little")

        所谓中缀调用就是去除分隔符 和添加符 函数名称直接放在参数中间  ------1.to("more") == 1 to "more"

        那么我们看下为啥能这样写 方便以后我们自己使用  

        infix fun Any.to(other:Any) =Pair(this,other)

        单纯看这个函数 我们发现返回值是一个Pair类型的对象 猜想是一对元素  那么 我们使用 to创建了一对元素 系统是如何获            取元素(展开)的呢  ----解构声明

        解构声明不仅能够展开pair 同样适用于 map展开 我们可以将map展开成键值对

        for((key,value) in maps.withIndex()){...} 遍历起来是不是简单多了

局部函数

      kotlin特有功能  所谓局部函数 就是在函数中 可以套用函数  同时 局部函数能够访问外层函数所有的变量和参数 我不太喜欢

        fun A(){

            fun B(){

            }

          }



ok  函数部分我们写到这 ~ 




猜你喜欢

转载自blog.csdn.net/youth_never_go_away/article/details/79918972