1. 程式人生 > >Kotlin------函式和程式碼註釋

Kotlin------函式和程式碼註釋

定義函式

Kotlin定義一個函式的風格大致如下

訪問控制符 fun 方法名(引數,引數,引數) : 返回值型別{
    ...
    ...
}

  • 訪問控制符:與Java有點差異,Kotlin的訪問範圍從大到小分別是public、internal、protected、private,不宣告預設是public;
  • 返回值型別:不需要返回型別的函式,後面的 : 返回值型別可以預設(這裡可以看到無論是變數還是方法,Kotlin都喜歡名字在前,型別在後);
/***Kotlin版程式碼***/
//有返回引數的函式
fun getName(): String {
    return "Kotlin"
}
//無返回引數的函式
fun displayName(name: String) {
    println("name: $name")
}
/***Java版程式碼***/
public String getName() {
    return "Java";
}
public void displayName(String name) {
    System.out.println("name: " + name);
}

相比Java,Kotlin支援包級函式,即函式不依賴於類而存在。
/***Kotlin版程式碼***/
package lesson1
/**
 * Created by Clock on 2017/6/18.
 */
fun main(args: Array<String>) {
    println("Kotlin")
}
/***Java版程式碼***/
package lesson1;
/**
 * Created by Clock on 2017/6/18.
 */
public class Lesson1 {
    public static void main(String[] args) {
        System.out.println("Java");
    }
}

對比上面的程式碼,Java建立一個方法前還需要先建立一個類。剛開始安裝IntelliJ IDEA編寫程式碼時,我還有個疑惑,為什麼有建立Kotlin File/Class兩個選擇,到這裡就明白了。

引數變長

Kotlin的引數變長非常簡單,傳遞的引數使用關鍵字vararg標明即可

/***Kotlin版程式碼***/
//引數變長
fun displayActors(vararg name: String) {
    println("actors: " + name);
}
/***Java版程式碼***/
public void displayActors(String... name) {
    System.out.println("actors :" + name);
}

相比Java,變長引數在Kotlin程式碼中要常見很多。
靜態變數和函式

Kotlin沒有Java中的static概念,如果在Kotlin中需要像Java一樣定義靜態變數和函式可以使用companion object,companion object後可以加上自定義的object名,也可以省略。
/***Kotlin版程式碼***/
class KotlinStatic {
    companion object Test {
        var kotlinInt: Int = 0
        fun getInstance(): KotlinStatic {
            return KotlinStatic()
        }
    }
}
/***Java版程式碼***/
public class Lesson1 {
    public static int javaInt = 0;
    public static Lesson1 getInstance() {
        return new Lesson1();
    }
}

這樣在需要使用的地方就可以做如下呼叫了
    
package lesson0
import lesson1.KotlinStatic
/**
 * Created by Clock on 2017/6/17.
 */
fun main(args: Array<String>) {
    println("Hello, world!")
    KotlinStatic.kotlinInt
    KotlinStatic.getInstance()
}

    
package lesson0
import lesson1.KotlinStatic
/**
 * Created by Clock on 2017/6/17.
 */
fun main(args: Array<String>) {
    println("Hello, world!")
    KotlinStatic.kotlinInt
    KotlinStatic.getInstance()
}

雖然看起來companion object實現了類似Java中static一樣的功能,但與Java不同的是,Kotlin在執行時是會建立一個companion object例項物件。在Kotlin中,如果真的想要實現和Java中的static變數或函式,官方更推薦使用包級別的變數或函式來實現。

返回 Unit 的函式

如果一個函式不返回任何有用的值,它的返回型別是 Unit 。 Unit 是一種只有一個值 —— Unit 的型別。這個值不需要顯式返回

Unit 返回型別宣告也是可選的。上面的程式碼等同於
fun printHello(name: String?) {
    ……
}

    
package lesson0
import lesson1.KotlinStatic
/**
 * Created by Clock on 2017/6/17.
 */
fun main(args: Array<String>) {
    println("Hello, world!")
    KotlinStatic.kotlinInt
    KotlinStatic.getInstance()
}

程式碼註釋

正如 Java 和 JavaScript,Kotlin 支援行註釋及塊註釋。

// 這是一個行註釋

/* 這是一個多行的
   塊註釋。 */

與 Java 不同的是,Kotlin 的塊註釋可以巢狀。就是說,你可以這樣註釋:
/**
 * hhhh
 * /**
 *  fff
 *  /**
 *    ggggg
 *  */
 * */
 *
 * abc
 *
 */