天天看点

Kotlin系列(五)——函数运用

​​

Kotlin系列(五)——函数运用

函数运用

函数的基本用法

  • 与Java的区别

java编写的onCreate代码

@Override   
  	public void onCreate(Bundle savedInstanceState) {
  		 ... 
 	 }
           

Kotlin编写的onCreate代码

override fun onCreate(savedInstanceState: Bundle?) {
   		...
	} 
           
两者对比,可以看出来有以下不同点:
  • java使用”@Override“ 来表示该函数重载父类的方法,而Kotlin使用小写的“override”在同一行表达重载操作
  • java使用“public"表示该函数是公共方法,而Kotlin默认的函数就是公开的,所以省略了关键字”public“
  • java使用”void“表示该函数没有返回参数,而Kotlin不存在关键字”void“,若无返回参数,则不用特别说明
  • Kotlin新增了关键字”fun“,表示这里是函数定义,其格式类似于Java的关键字”class“,而Java不存在关键字”fun“
  • Java声明输入参数的格式为”变量类型 变量名称“,而Kotlin声明输入参数的格式为”变量名称:变量类型“
  • Kotlin引入了空安全机制,如果某个变量允许为空,就需要在变量类型后面加个问号”?“
  • 输入参数的格式

下面是一个见到那的函数定义代码,没有输入也没有输出:

fun getDinnerEmpty() {
    	tv_process.text = "这是一个过程"  
    	tv_result.text = "" 
    }
           

增加了输入参数的函数定义

fun getDinnerInput(egg:Int, leek:Double, water:String, shell:Float) {
  		tv_process.text = " "
   		tv_result.text = "" 
   }
           

允许入参为空

fun getDinnerInput(egg:Int, leek:Double?, water:String?, shell:Float) {
  		tv_process.text = " "
   		tv_result.text = "" 
   }
           

调用方式如下

btn_input_empty.setOnClickListener { getDinnerEmpty() }
btn_input_param.setOnClickListener { getDinnerInput(2, 1111.1111, "22222", 10000f) }
btn_input_null.setOnClickListener { getDinnerCanNull(2, 1111.1111, null , 10000f) }
           
  • 输出参数的格式

    Kolin输出函数的声明代码如下:

var i:Int 
	//类似整型变量,输出函数在后面体现
	fun main():Int 
	//java使用void表示不存在返回参数,然而Kotlin的返回参数是一定存在的,Kotlin函数如果不声明任何返回参数,其实是默认返回一个Unit类型的对象的
	//Unit表示没有返回参数,也可以直接省略Unit声明
	fun getDinnerUnit():Unit {
	    tv_process.text = "这是一个过程"
	    tv_result.text = ""
	}
	//如果函数需要具体的输出函数,则一样要在函数末尾使用关键字"return"来返回参数值,如下
	fun getDinnerOutput():String {
	    tv_process.text = "这是有String类型的输出参数的"
    	var dinner:String = "末尾需要加上return"
        return dinner
    } 
    //同时具备输入参数和输出参数
    fun getDinnerInput(egg:Int, leek:Double?, water:String?, shell:Float):String {
  	    tv_process.text = "这是有String类型的输出参数的"
    	var dinner:String = "末尾需要加上return"
        return dinner
   }


   //调用方式如下
   btn_output_empty.setOnClickListener { getDinnerUnit() }
   btn_output_param.setOnClickListener { tv_result.text=getDinnerOutput() }
   btn_full_param.setOnClickListener { tv_result.text=getDinnerFull(2, 111 1.1111, "123", 10000f) }

           

输入参数的变化

  • 默认参数
//默认参数允许崽定义函数时直接指定输入参数的默认值。如果调用函数时没有给出某参数的具体值,系统就自动对该参数入狱默认值,从而免去每次都要手工赋值的麻烦。写法:声明输入参数时崽其后面加上等号及其默认值。
	fun getFourBigDefault(general:String, first:String="111", second:String="222", third:String="333"):String {
    	var answer:String = "$generalғ$first҅$second҅$third҅$fourth"
    	return answer 
    } 
	
	//调用
	btn_input_default.setOnClickListener { 
		tv_four_answer.text= getFourBigDefault("只要输入第一个就好了,其他的都是默认参数")
	}
           
  • 命名参数
//如果给第二个参数填写指定的描述文字
btn_input_part.setOnClickListener { 
	tv_four_answer.text=getFourBigDefault("第一个不是默认参数","可以写第二个默认参数") 
}

//如果想单独的就只给第三个填写指定的描述文字,就需要用到命名函数
btn_input_part.setOnClickListener { 
	tv_four_answer.text=getFourBigDefault("第一个不是默认参数",,second"可以写第二个默认参数") 
}
//上面代码使用了命名函数的表达式,实现了给指定参数赋值的功能。
           
  • 可变参数
//在Java体系重,可变参数采用“Object ..... args”的形式;在Kotlin体系中,新增了关键字vararg,表示气候的参数个数时不确定的。以可变的字符串参数为例,Java的写法为“String... args”,而Kotlin的写法是"vararg args:String?".函数内部在解析的时候,Kotlin会把可变参数当作一个数组,开发者需要循环取出每个参数值进行处理。
fun getFourBigVararg(general:String, first:String="2", second:String="3", third:String="4", vararg otherArray: String?):String {
    var answer:String = "$general:$first҅$second҅$third҅"
	//循环取出可变参数包含的所有字段
    for (item in otherArray) {
            answer = "$answer҅ , $item"
    }
    return answer
 } 

//调用
 getFourBigVararg("开始","1","2","3","4","5","6","7")