定義函數(shù)
Kotlin定義一個(gè)函數(shù)的風(fēng)格大致如下
訪問(wèn)控制符 fun 方法名(參數(shù),參數(shù),參數(shù)) : 返回值類型{
...
...
}
訪問(wèn)控制符:與Java有點(diǎn)差異惫搏,Kotlin的訪問(wèn)范圍從大到小分別是public杯拐、internal互拾、protected怪瓶、private萧落,不聲明默認(rèn)是public;
返回值類型:不需要返回類型的函數(shù)劳殖,后面的 : 返回值類型可以缺暑砩小(這里可以看到無(wú)論是變量還是方法,Kotlin都喜歡名字在前哆姻,類型在后)宣增;
/***Kotlin版代碼***/
//有返回參數(shù)的函數(shù)
fun getName(): String {
return "Kotlin"
}
//無(wú)返回參數(shù)的函數(shù)
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支持包級(jí)函數(shù)矛缨,即函數(shù)不依賴于類而存在爹脾。
/***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");
}
}
對(duì)比上面的代碼,Java創(chuàng)建一個(gè)方法前還需要先創(chuàng)建一個(gè)類箕昭。剛開(kāi)始安裝IntelliJ IDEA編寫代碼時(shí)灵妨,我還有個(gè)疑惑,為什么有創(chuàng)建Kotlin File/Class兩個(gè)選擇落竹,到這里就明白了泌霍。
參數(shù)變長(zhǎng)
Kotlin的參數(shù)變長(zhǎng)非常簡(jiǎn)單,傳遞的參數(shù)使用關(guān)鍵字vararg標(biāo)明即可
/***Kotlin版代碼***/
//參數(shù)變長(zhǎng)
fun displayActors(vararg name: String) {
println("actors: " + name);
}
/***Java版代碼***/
public void displayActors(String... name) {
System.out.println("actors :" + name);
}
相比Java述召,變長(zhǎng)參數(shù)在Kotlin代碼中要常見(jiàn)很多朱转。
靜態(tài)變量和函數(shù)
Kotlin沒(méi)有Java中的static概念,如果在Kotlin中需要像Java一樣定義靜態(tài)變量和函數(shù)可以使用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();
}
}
這樣在需要使用的地方就可以做如下調(diào)用了
package lesson0
import lesson1.KotlinStatic
/**
* Created by Clock on 2017/6/17.
*/
fun main(args: Array<String>) {
println("Hello, world!")
KotlinStatic.kotlinInt
KotlinStatic.getInstance()
}
雖然看起來(lái)companion object實(shí)現(xiàn)了類似Java中static一樣的功能夺刑,但與Java不同的是缅疟,Kotlin在運(yùn)行時(shí)是會(huì)創(chuàng)建一個(gè)companion object實(shí)例對(duì)象分别。在Kotlin中,如果真的想要實(shí)現(xiàn)和Java中的static變量或函數(shù)存淫,官方更推薦使用包級(jí)別的變量或函數(shù)來(lái)實(shí)現(xiàn)耘斩。
返回 Unit 的函數(shù)
如果一個(gè)函數(shù)不返回任何有用的值,它的返回類型是 Unit 桅咆。 Unit 是一種只有一個(gè)值 —— Unit 的類型煌往。這個(gè)值不需要顯式返回
fun printHello(name: String?): Unit {
if (name != null)
println("Hello ${name}")
else
println("Hi there!")
// `return Unit` 或者 `return` 是可選的
}
Unit 返回類型聲明也是可選的。上面的代碼等同于
fun printHello(name: String?) {
……
}
代碼注釋
正如 Java 和 JavaScript轧邪,Kotlin 支持行注釋及塊注釋刽脖。
// 這是一個(gè)行注釋
/* 這是一個(gè)多行的
塊注釋。 */
與 Java 不同的是忌愚,Kotlin 的塊注釋可以嵌套曲管。