Kotlin學(xué)習(xí)筆記(基礎(chǔ)記錄)

未完待續(xù)······太監(jiān)直播吃電腦(●'?'●)

一.基礎(chǔ)操作符轰坊、語法冀宴、定義等
  • val --> 常量 ; var --> 變量

  • 繼承、實(shí)現(xiàn) :: 引用

fun isOdd(x: Int) = x % 2 != 0
println(numbers.filter(::isOdd)) // 輸出 [1, 3]
  • =、==聪建、=== 分別表示 賦值钙畔、比值、比引用

  • is 金麸、!is --> instanceof

  • $ (取值符)

  • .. 表示區(qū)間 1..5 --> 1至5

  • ?相關(guān):

val num : Int? = number  //標(biāo)識(shí)num允許為null,但是會(huì)將num自動(dòng)裝箱
num?: println("num is null")  //?: 在num為null時(shí)
num?.let { println("num not null") }  //?.let在num非null時(shí)
  • 構(gòu)造函數(shù)constructor
    一個(gè)類可以有一個(gè)主構(gòu)造函數(shù)和多個(gè)次構(gòu)造函數(shù)擎析,且主構(gòu)造函數(shù)不能包含任何代碼,代碼僅能置于init塊中:
class Customer constructor(name: String) {
    init {
        logger.info("Customer initialized with value ${name}")
    }
}

通過:this調(diào)用其它構(gòu)造方法:

 constructor(name: String, parent: Person) : this(name)
  • open 開放類/成員: open 標(biāo)注與 Java 中 final 相反挥下,它允許其他類 繼承這個(gè)類叔锐、重寫某個(gè)方法。默認(rèn)情況下见秽,在 Kotlin 中所有的類都是 final

  • setter愉烙、getter 的使用:

val isEmpty: Boolean(可以省略類型)
    get() = this.size == 0
var name: String
    set(value) {
        this = value
    }
  • as類型強(qiáng)轉(zhuǎn)符
    fun getMvpView():V{
        return this as V
    }
  • 屬性修飾符
private  //自身可見
protected //自身及子類可用
internal  //本模塊(module)內(nèi)可用
public  //任何客戶端可用
  • when的使用
          when(tag1){
            "a" -> println("a")
            "abc" -> println("bb")
            is String -> println("string")
            else -> println("unknow")
        }
  • 方法由fun聲明,且類型聲明后置 (方法參數(shù)類型解取、返回值類型等):
val number : Int = 555
fun sum(a: Int, b: Int): Int {
    return a + b
}
fun sum(a: Int = 1, b: Int = 2) : Int = a + b
  • 允許為方法參數(shù)設(shè)置默認(rèn)值 :
fun sum(a: Int = 1, b: Int = 2): Int {
  return a + b
}
  • 數(shù)組Array相關(guān):
//創(chuàng)建數(shù)組
val myAray = arrayOf(1,2,3)
val myArrat = Array(3,{i -> i })
//遍歷
for (s in myAray)
     println(s)
  • List:
val list = listOf<String>("a","b","c")
val list1 = List(3,{i -> i })
list.filter { s -> s != "a" } //過濾
list.map { s -> s+"@" } //變化
  • 對(duì)象聲明 object關(guān)鍵字后加對(duì)象管理者名稱
object Hero {
    fun getInstance() : Hero {
        return Hero()
    }
}
Hero.getInstance()
  • 伴生對(duì)象 companion object關(guān)鍵字聲明

  • 匿名對(duì)象的創(chuàng)建(方便的是匿名對(duì)象訪問外部變量時(shí)不必再去申明final類型了):

val noName= object {
        var x: Int = 0
        var y: Int = 0
    }
  • 單例
object Singletons {
    val something: OfMyType by lazy() { ... }

    val somethingLazyButLessSo: OtherType = OtherType()
    val moreLazies: FancyType by lazy() { ... }
}
  • by lazy{} 只能用在val類型, lateinit 只能用在var類型
二.函數(shù)步责、Lambda、代碼分析
  • 1.函數(shù)擴(kuò)展:為某個(gè)類定義一個(gè)擴(kuò)展函數(shù)禀苦,使得在任何地方都可以通過對(duì)象.函數(shù)名的方式去調(diào)用改函數(shù)蔓肯。(簡(jiǎn)化了通過extend創(chuàng)建子類)
    常見的使用場(chǎng)景就是拓展Context類,增加一個(gè)showToast的簡(jiǎn)單方法振乏,避免每次show Toast的大量重復(fù)代碼蔗包,:
fun Context.showToast(message:String = "this is a toast",length : Int = Toast.LENGTH_SHORT){
Toast.makeText(this,message,length)
}

如果一個(gè)類定義有一個(gè)成員函數(shù)和一個(gè)擴(kuò)展函數(shù),而這兩個(gè)函數(shù)又有相同的接收者類型慧邮、相同的名字 并且都適用給定的參數(shù)调限,這種情況總是取成員函數(shù)。 例如:

class C {
    fun foo() { println("member") }
}
fun C.foo() { println("extension") }

如果我們調(diào)用 C 類型 c的 c.foo()误澳,它將輸出“member”耻矮,而不是“extension”。

  • 2.屬性擴(kuò)展 (布能直接初始化忆谓,只能通過setter裆装、getter):
val <T> List<T>.lastIndex: Int
    get() = size - 1
  • 3.copy()函數(shù),可以理解為拷貝一個(gè)對(duì)象倡缠,僅改變其部分成員值

  • 4.函數(shù)的命名參數(shù)(當(dāng)函數(shù)有默認(rèn)參數(shù)值時(shí)哨免,我們可以通過命名參數(shù)的方式,指定某幾個(gè)參數(shù)的值昙沦,而其他參數(shù)仍采用默認(rèn)值):

fun goEasy(name : String = "me", 
            time : String = "now",
            isShow: Boolean = true): Unit{}
goEasy()   //使用默認(rèn)參數(shù)
goEasy(name = "axe",isShow = false)    //命名參數(shù)
  • 5.vararg可變數(shù)量的參數(shù),動(dòng)態(tài)參數(shù)琢唾,省去了重載:
fun <T> asList(vararg ts: T): List<T> {
    val result = ArrayList<T>()
    for (t in ts) // ts is an Array
        result.add(t)
    return result
}
  • 6.函數(shù)作用域:
全局函數(shù),在kt文件中申明桅滋,可以在全局使用慧耍;
成員函數(shù),類中申明丐谋;
內(nèi)部函數(shù)芍碧,在函數(shù)內(nèi)部還可以申明函數(shù),并可以訪問父外部函數(shù)的變量号俐,可以參考匿名內(nèi)部類
  • 7.高階函數(shù)泌豆,函數(shù)的參數(shù)是另一個(gè)函數(shù)體(一般傳一個(gè)lambda表達(dá)式,必須制定參數(shù)類型和返回值類型):
fun <T> lock(lock: Lock, body: () -> T): T {
    lock.lock()
    try {
        return body()
    }
    finally {
        lock.unlock()
    }
}
val result = lock(lock, { sharedResource.operation() })
  • 8.Lambda相關(guān):
lambda 表達(dá)式總是被大括號(hào)括著
其參數(shù)(如果有的話)在 -> 之前聲明(參數(shù)類型可以省略)
函數(shù)體(如果存在的話)在 -> 后面
如果函數(shù)字面值只有一個(gè)參數(shù), 那么它的聲明可以省略(連同 ->),其名稱是 it
ints.map { it->(省略)it * 2 }
  • 9.告別findViewById,可以直接把控件的id當(dāng)作其實(shí)例使用吏饿,但是前提:
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
import kotlinx.android.synthetic.main.activity_read_detail.*;
headText.text = "放開我~你就能刷新了哦(●'?'●)"
headText.gravity = Gravity.CENTER
  • 10.with()擴(kuò)展函數(shù):在with代碼塊中我們可以使用this和直接訪問所有的public的方法和屬性
inline fun <T> with(t: T, body: T.() -> Unit) { t.body() }

with(A){
A.method();
A.field;
}
三.Kotlin項(xiàng)目嘗試
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末踪危,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子猪落,更是在濱河造成了極大的恐慌贞远,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笨忌,死亡現(xiàn)場(chǎng)離奇詭異蓝仲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)官疲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門袱结,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人途凫,你說我怎么就攤上這事垢夹。” “怎么了维费?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵果元,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我犀盟,道長(zhǎng)噪漾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任且蓬,我火速辦了婚禮欣硼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恶阴。我一直安慰自己诈胜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布冯事。 她就那樣靜靜地躺著焦匈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昵仅。 梳的紋絲不亂的頭發(fā)上缓熟,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天累魔,我揣著相機(jī)與錄音,去河邊找鬼够滑。 笑死垦写,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的彰触。 我是一名探鬼主播梯投,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼况毅!你這毒婦竟也來了分蓖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤尔许,失蹤者是張志新(化名)和其女友劉穎么鹤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體味廊,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡午磁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了毡们。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迅皇。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖衙熔,靈堂內(nèi)的尸體忽然破棺而出登颓,到底是詐尸還是另有隱情,我是刑警寧澤红氯,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布框咙,位于F島的核電站,受9級(jí)特大地震影響痢甘,放射性物質(zhì)發(fā)生泄漏症歇。R本人自食惡果不足惜帅霜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一铣减、第九天 我趴在偏房一處隱蔽的房頂上張望趁俊。 院中可真熱鬧,春花似錦放椰、人聲如沸作烟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拿撩。三九已至,卻和暖如春如蚜,著一層夾襖步出監(jiān)牢的瞬間压恒,已是汗流浹背影暴。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留探赫,地道東北人型宙。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像期吓,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子倾芝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容