关于我这周的kotlin的学习:


今天学习了kotlin方法的参数和一些lambda的一些知识,其中也是和我们上次日报中讲的方法一样,有三种分类,默认参数,具名参数,可变数量的参数。
和以前一样,我们举个例子来理解这个知识点:
先是默认方法:
fun read(offest: Int=0,start: Int) {/* */}
我们来看这行代码,我们定义了一个read的方法,我在里面定义了两个参数,一个是offset,还有一个数start,两个参数,参数后面跟着的Int是他的返回值,然后offset的默认值为0,如果我们在使用方法的时候,没有给offset这个参数传值的话,则offset参数将默认为0
当省略相应的参数是,使用默认值。这个与java相比,可以减少重载数量,我们可以通过类型后面的等于来设置默认值。
具名参数:
如果一个默认参数在一个无默认的参数之前,那么无默认值的参数,只能通过使用具名蚕食调用该方法来使用:
fun read(offest: Int=0,start: Int) {/* */}
如果我们现在想让offest使用默认参数,然后我们需要给start这个参数传参,我们可以这样read(start=1)这样的话,我们知识给start传入了值,而offset还是在用自己的默认值。
第二种形式:fun read(offest: Int=0,start: Int,action:() ->Unit) {/* */}
这个代码的第三个参数是一个方法,那么他可以作为具名参数,括号从内部传入,也可以从括号外部传入。
可变数量的参数:
方法的参数(一般是最后一个)可以使用varargs修饰符标记。
如果我们传入的参数是一个不确定的参数,打个比方,我想要传入的参数不止一个,我想传入多个参数1个,2个,3个都行。如果说我定义了一个字符数组,然后我们想把append这个方法传递给他,我们可以这样:
val world = charArrayOf(‘w’,’o’,’r’,’l’,’d’)
val result = append(‘h’,’e’,’l’,’l’,’o’,’ ‘ , *world)
我们在world的前面加上一个星号就可以就可以把world里面的元素一个个传递到append的方法里面去,由于append的参数是不定长的,所以我们可以传入多个参数,然后我们在用*将world里面的元素传入进去。

关于lambda的学习我暂且学的不够多,这周只学了一下的一些东西。
首先我们先介绍一下kotlin的方法:
目录:
1.方法声明
2.方法参数
3.方法用法

方法的声明:
普通类:
我们这边举一个例子:fun max(a:Int,b:Int):Int{
return if(a>b) a  else b
}
这个东西我们这样理解:fun是用来声明方法的,max为这个方法的名字,括号中的数是参数,而且,在kotlin中,参数在左边,参数了类型在右边,中间我们使用冒号了隔开
如果有多个参数的话,参数之间用逗号来隔开(注意你的逗号是不是中文的),括号后面的:Int是它的 返回值,在大括号里面的代码,我们称之为方法体;
如果这里的a是大于b的,则我们返回的是a的值,如果不是,则返回的是b的值。
调用:
我们在举一个例子:
fun main(){
            person().test()
        }
        class person{
            fun test(){
                print(“hello world”)
            }
看这个代码,其实我觉得这个代码有点像我们之前学的自定义函数,感觉原理都是差不多的,我们现在main的外面定义一个类,然后在类里面定义一个方法。
然后我们在到main里面调用这个方法。

也许这个报告写的非常的水,但是在接下来的时间里我会慢慢进步的,如果我写的地方有错误,希望可以指出,我会马上改正的。

下面是一些在学习当中用到的代码和注释,如果有误希望可以指出。

package com.example.firstapp

fun main()
{
    Person().learn();
    Person.test2();
    read(1,2, action = {
        //正常来说,我们可以这样写return@read "read2",但是为了方便,我们可以值接将return给去 
        //掉。变成"read2"

        "括号内传递action参数"
    })
    read(start = 1)
    {
        //这个就可以理解为我们说的action的返返回类型,String
        "括号外传递action参数"
    }
    NumUtil.double(num = 2)
    val a:Int = NumUtil.double(num = 2)
    println(a)
}

//普通类
class Person {
    fun learn() {
        println("hello world")
    }

    companion object {
        fun test2() {
            print("成员变量")
        }
    }
}
    //offest为int型,默认值为0
    //start为int,没有默认值
    //actino为一个参数,参数的名字叫做action。
    //判断参数如何为一个方法:如果在后面有个小括号,或者说参数类型为(),则他是一个方法类型。 
    //eg:action:()
    //返回值我们用->来指定的,如果我们不需要他有返回值,我们使用Unit来表达就行了。如果我们需要的    
    //返回类型是Int类型的,
    //我们就把Unit变成Int就行了。
    fun read(offest: Int=0,start: Int,action:()->String)
    {
        action();
    }

//静态类
//静态类可以不用构建实列对象,我们可以直接通过类名来进行访问静态方法
object NumUtil
{
    fun double(num:Int):Int
    {
        return num * 2
    }
}

  

原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/270393.html

(0)
上一篇 2022年6月26日 04:54
下一篇 2022年6月26日 04:55

相关推荐

发表回复

登录后才能评论