[toc]html
繼續講下程序結構,這部分相對簡單,有時候可能會比較囉嗦,筆記嘛!就是在學習過程當中我遇到的問題,做爲記錄。你們沒有遇到問題更好。有些是我的理解,有更好的理解歡迎在評論。git
這部分官網仍是比較好理解的,並且仍是中文操做符重載建議去看下 舉例:github
class Complex(var real: Double, var imaginary: Double) {
operator fun plus(other: Complex): Complex {
return Complex(real + other.real, imaginary + other.imaginary)
}
operator fun plus(other: Int): Complex {
return Complex(real + other, imaginary + other)
}
operator fun plus(other: Any): Int {
return real.toInt()
}
override fun toString(): String {
return "$real +${imaginary}i"
}
}
class Book {
infix fun on(any: Any): Boolean {
return false
}
}
class Desk
fun main(args: Array<String>) {
val c1 = Complex(2.0, 3.5)
val c2 = Complex(4.0, 7.5)
println(c1 + c2)
println(c1 + 5)
println(c1 + "HelloWorld")
if ("a" in args) {// infix 中綴表達式 不可亂用 下降可讀性
}
if (Book() on Desk()) {//DSL比較經常使用
}
}
複製代碼
總結:數組
方法只有一個參數的時候能夠不用對象.方法名這種方式調用:bash
class Book {
infix fun on(any: Any): Boolean {
return false
}
}
class Desk
fun main(args: Array<String>) {
if (Book() on Desk()) {//DSL比較經常使用
}
}
複製代碼
中綴表達式經常使用在DSL中,不建議使用,不然下降可讀性ide
if語句:學習
fun main(args: Array<String>) {
val mode = if (args.isNotEmpty() && args[0] == "1") {
0
} else {
1
}
}
複製代碼
不交條件語句而叫表達式,是由於Kotlin中時帶返回值的ui
功能相似於Java中的switch,也是帶有返回值的spa
fun main(args: Array<String>) {
val x = 5
when (x) {
!in 1..100 -> println("$x is not in 100")
in 1..100 -> println("$x is in 100 ")
args[0].toInt() -> println("x==args[0]")
is Int -> println("Hello is $x")
else -> println("default case")
}
val mode = when {//有返回值
args[0].toInt() == 5 -> 1
else -> 2
}
}
複製代碼
當條件匹配下面的將不會執行,都沒有匹配的則執行 else ->後面的語句.net
這些屬性都很是簡單,直接用例子:
fun hello(char: Char='A'){
}
複製代碼
默認參數就是給形參指定一個默認值,當調用時能夠不傳參數。不傳時使用默認值
在Java中也有相似的變長參數
Java
public void vararg1(String... strings) {
}
Kotlin
public void vararg1(vararg args:String) {
}
複製代碼
變長參數相似於數組。遍歷方式與數組或是集合相同。 可是不用的Java的變長參數只能做爲參數的最後一個Kotlin是沒要求的,如:
Java
public void vararg1(String... strings) {
}//正確
public void vararg2(String... strings,int i) {
}//錯誤
複製代碼
在Kotlin中由於有具名參數因此是沒有要求的
fun hello(double: Double, vararg args: Int, string: String) {
args.forEach(::println)
println(string)
}
調用:
hello(3.0, 1, 2, 3, 4, string = "Hello")//在變長參數以前是不須要具名參數的 後面是具名參數 即string= 不指定報錯
複製代碼
val array = intArrayOf(1, 2, 3, 4)
val list = ArrayList<Int>()
list.add(1)
list.add(2)
list.add(3)
hello(*array, string = "hello")
hello(3.0, *array, string = "hello")
hello(args = *array, string = "hello")//不傳的話 後面的參數使用具名參數
// hello(*list,string = "hello")//list 如今還不支持* 表示
複製代碼
- *操做符能夠展開數組,如今還不支持展開集合
- *操做符只用於變長參數列表的實參
- *操做符不能重載
- *不算通常意義上的運算符
複製代碼
這篇就結束了,下篇是關於面向對象相關的筆記