1. 程式人生 > >Kotlin基礎入門(二)

Kotlin基礎入門(二)

今天來學習下基本語法,參考了官方文件

package com.kotlin

匯入

import關鍵字 import java.util*

型別的宣告

Kotlin使用var 定義變數

var a:Int = 1

var b:Double = 2

使用val 定義常量

val c:Char = "你好"

函式

函式宣告

Kotlin使用fun關鍵字作為函式宣告
  1. fun double(a:Int) {  
  2.     return2*a  
  3. }  

函式用法

傳統方式:
  1. val result = double(2)  
呼叫類成員 cal.double(2) //建立cal例項,並且呼叫double


函式引數

函式引數使用pascal定義法,即name:type。引數之間使用逗號隔開,引數必須是顯式型別
  1. fun haha(hao:Char) : Char {  
  2.     ...  
  3. }  

預設引數

函式可以有預設值,當省略引數時,使用預設值,以下引用官方手冊
  1. fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size) {  
  2. ……  
  3. }  

預設值通過型別後面的 = 及給出的值來定義。覆蓋方法總是使用與基型別方法相同的預設引數值。 當覆蓋一個帶有預設引數值的方法時,必須從簽名中省略預設引數值:

  1. open 
    class A {  
  2.     open fun foo(i: Int = 10) { …… }  
  3. }  
  4. class B : A() {  
  5.     override fun foo(i: Int) { …… }  // 不能有預設值
  6. }  

如果一個預設引數在一個無預設值的引數之前,那麼該預設值只能通過使用命名引數呼叫該函式來使用:

  1. fun foo(bar: Int = 0, baz: Int) { /* …… */ }  
  2. foo(baz = 1// 使用預設值 bar = 0
不過如果最後一個lambda表示式引數從括號外傳給函式函式呼叫,那麼允許預設引數不傳值:
  1. fun foo(bar: Int = 
    0, baz: Int = 1, qux: () -> Unit) { /* …… */ }  
  2. foo(1) { println("hello") } // 使用預設值 baz = 1 
  3. foo { println("hello") }    // 使用兩個預設值 bar = 0 與 baz = 1

命名引數

可以在呼叫函式時使用命名的函式引數。當一個函式有大量的引數或預設引數時這會非常方便。

給定以下函式

  1. fun reformat(str: String,  
  2.              normalizeCase: Boolean = true,  
  3.              upperCaseFirstLetter: Boolean = true,  
  4.              divideByCamelHumps: Boolean = false,  
  5.              wordSeparator: Char = ' ') {  
  6. ……  
  7. }  

我們可以使用預設引數來呼叫它
  1. reformat(str)  

然而,當使用非預設引數呼叫它時,該呼叫看起來就像
  1. reformat(str, truetruefalse'_')  

使用命名引數我們可以使程式碼更具有可讀性
  1. reformat(str,  
  2.     normalizeCase = true,  
  3.     upperCaseFirstLetter = true,  
  4.     divideByCamelHumps = false,  
  5.     wordSeparator = '_'
  6. )  

並且如果我們不需要所有的引數
  1. reformat(str, wordSeparator = '_')  


定義函式

定義一個有兩個Int型別的入參,及返回型別是Int。
  1. fun sum1(a:Int,b:Int) : Int {  
  2.     return a + b  
  3. }  
定義一個將表示式作為函式體、返回值型別為自動推斷的函式
  1. fun sum2(a:Int,b:Int) = a + b  


定義一個函式,返回無意義的值
  1. fun printSum1(a: Int, b: Int): Unit {  
  2.     println("sum of $a and $b is ${a + b}")  
  3. }  
其中${dosth}指的是內插語句