一、聲明函數、變量、類、枚舉、屬性
變量
以關鍵字開始,接變量名,最後可加類型:
val a = 12
val a: Int = 1//因為指派的類型是确定的,是以可以省略類型
如果不加指定的變量類型,編譯器會分析初始化表達式值,并将其類型作為變量類型。如果不提供可以賦給這個變量值的資訊,編譯器就無法推斷類型。
val(來自value)——不可變引用。相當于final。
var(來自variable)——可變引用。相當于非final。
預設情況下應盡可能使用val關鍵字,僅在必須時替換為var
字元串模闆,在字元串字面值中可以直接引用變量,使用$
fun main(args: Array<String>) {
val name = if (args.isNotEmpty()) args[0] else "Kotlin"
println("Hello, $name!")
println("Hello, ${args[0]}")//還可以引入複雜表達式
println("Hello, ${ if (args.isNotEmpty()) args[0] else "Kotlin"}")//還可以引入更複雜的表達式
}
若要顯示$需要轉義
println("\$name!")//列印結果為$name!
函數
/**
* 沒有傳回任何東西的函數
*/
fun main() {
println("Hello,world!")
}
/**
*傳回Int
*/
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}
/**
* 上面函數使用表達式函數體
* 其傳回類型也可以去掉
* 隻有!隻有表達式函數的傳回類型可以省略
*/
fun max(a: Int, b: Int) = if (a > b) a else b
類
先看一個簡單的JavaBean
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
而Kotlin中隻需
class Person(val name: String)
通常稱其為值對象,其中public修飾關鍵字也消失了,因為Kotlin中預設為public
屬性
Java中字段+setter/getter稱為屬性;Kotlin中屬性時頭等語言特性,完全代替了字段+setter/getter,在類中聲明屬性和聲明字段一樣,使用val、var關鍵字即可。val隻讀,var可變。
聲明屬性:
class Person {
val name: String
var isMarried: Boolean
}
使用屬性:
val person = Person("Bob", true)
println(person.name)
println(person.isMarried)
person.isMarried=false//将值修改為false,對應Java中person.setMarried(false)
println(person.isMarried)
由于内置了getter,若想即時計算輸出結果則需要自定義getter
自定義通路器
定義矩形類,若長等于寬則為正方形
class Rectangle(val height: Int, val width: Int) {
val isSquare: Boolean
get() {
return height == width
}
}