天天看點

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")