1. 程式人生 > >學習kotlin第四天

學習kotlin第四天

今天繼續跟著kotlin官方文件踩坑,還是那句話,僅為記錄我的學習過程,不喜勿噴。

這文件順序感覺好亂呀,東一句西一句的,還好心地給我加了引用。。。不管了,就按前後順序來繼續。

1、建立DTOs(POJOs/POCOs),額,只百度到DTO是資料傳輸物件,POJO是簡單Java物件。

data class Customer(val name: String, val email: String)

想吐,介紹瞭如何建立,卻不介紹如何呼叫,唉,就當是先混個眼熟吧。

2、函式引數的預設值,不像java有引數就必須傳。當然,規規矩矩地傳引數是最好的,不然引數多了就亂套了。

fun main(args: Array<String>) {

foo(3, "3")foo()}fun foo(a: Int = 2, b: String = "2") {println(a)println(b)}

3、過濾list,昨天已經見過一面了,照葫蘆畫瓢用forEach遍歷打印出來

fun main(args: Array<String>) {val list = listOf("pig", "dog", "snake", "monkey");    list.filter { x -> x.length > 4 }.forEach { println(it) }}

如果我沒猜錯的話it代表集合裡的一個物件,所以可以簡寫成

fun main(args: Array<String>) {val list = listOf("pig", "dog", "snake", "monkey");  list.filter { it.length > 4}.forEach { println(it) }

}

4String內插,真心醉了,和前面說的字串模板有啥區別,別告訴我是少了個花括號哈。。。

fun main(args: Array<String>) {val  name="小猴子"println("Name $name")}

5、型別判斷,我都還不知道這kotlin中如何初始化一個類物件。。。所以這裡我改為

Stringint舉例吧。突然發現這和第二天學的is判斷資料型別不是同一個東西嗎。。。

fun main(args: Array<String>) {val s: String = "1"foo(s)}fun foo(a: Any) {when (a) {is Int -> println("Int")is String -> println("String")else -> println("else")    }}

6、只讀型別的map,遍歷map/pairlist,訪問map。這文件重複的挺多的,我還是把幾個歸在一起學吧。。。

fun main(args: Array<String>) {val map = mapOf("a" to 1, "b" to 2, "c" to 3)for ((k, v) in map) {println("$k -> $v")    }val map2 = mapOf(Pair("0", "1"), Pair("2", "3"))for ((k, v) in map2) {println("$k -> $v")    }println("map[a]=" + map["a"])}

我奇怪的是map["a"]=1這句程式碼會報錯,我弄了半天也不知道如何給其賦值。。。

No set method providing array access Unresolved reference.

None of the following candidates is applicable because of receiver type mismatch:

@InlineOnly public operator inline fun <K, V> MutableMap<String, Int>.set(key: String, value: Int): Unit defined in kotlin.collections

@InlineOnly public operator inline fun kotlin.text.StringBuilder /* = java.lang.StringBuilder */.set(index: Int, value: Char): Unit defined in kotlin.text

7、又是個前面遺漏的坑,unitl關鍵字與區間結合使用時表示半開區間。

fun main(args: Array<String>) {for (i in 1 until 10) {//不包括10println(i)    }}

8、延遲屬性......擴充套件函式.....建立單例。。。看不下去了,一臉的懵逼。

此處省略若干個坑。。。

9、命名風格,習慣了java的命名規範了,那就將就著用吧。

10、能否別挑戰我的耐心,型別和超型別之間的冒號前要有一個空格,我都沒見過......我在心裡不斷告訴自己,先混個臉熟。

例項和型別之間的冒號前不要有空格。

lambda表示式中的花括號前後要有空格,箭頭符號前後要有空格

唉,我試了一下,這空格加不加都沒錯,但IDE上一按格式化它就自動格式化好了,不用記。

11、引數較多時不要寫在一行,引數右括號另起一行,繼承於的類和右括號一行,多個則另起一行,優先超類建構函式的呼叫。

class Person(        id: Int,        name: String,        surname: String) : Human(id, name),        KotlinMaker {// ……}

12、返回型別為Unit型別時應省略

fun foo() { // 省略了 ": Unit"}

看見這文件的目錄我也暈了,有點後悔選擇它作為我的第一份kotlin學習資料了。感情我學了四天還沒開始學基礎。不過既然選擇了就堅持下去。