突然想要總結(jié)kotlin

距離我上次寫kotlin的代碼已經(jīng)過去了三個(gè)多月,前兩天在寫測試代碼的時(shí)候,寫了幾個(gè)lambda表達(dá)式,回頭發(fā)現(xiàn)這個(gè)跟kotlin的高階函數(shù)還不一樣,怎么寫來著給忘了.果然是技術(shù)只要不使用,遺忘的速度讓人吃驚.
kotlin新的東西其實(shí)很多,google的社區(qū)或者kotlin的中文站都有大量的細(xì)節(jié)知識,可以從頭到尾了解學(xué)習(xí).不過從java轉(zhuǎn)到kotlin都是直接上手,一邊寫一遍查.
個(gè)人覺得google官方這份31天學(xué)習(xí)kotlin的文章,可以說詳細(xì)而簡單.demo簡潔有力.
31 天,從淺到深輕松學(xué)習(xí) Kotlin

下面是kotlin里邊在項(xiàng)目中比較常用的東西,也是直接使用中感覺最便捷的地方.做個(gè)記錄.
1.比java占位符更好用擴(kuò)展的字符串拼接

        var prefix = 1
        var subfix = UserInfo("lily", "japan", 3, "no")
        var str = "here is a user $prefix ${subfix.name}"http://here is a user 1 lily
        str = """ she is "${subfix.name}" """ // she is "lily"

2.空指針推斷

//java
List<T> mData = null;
public int getItemCount(){
        return mData == null ? 0:mData.size();
}

//kotlin
var mData: List<T>? = null
override fun getItemCount(): Int {
        return mData?.size ?: 0
}
//java
String deptId = null;
if(LuckinBaseData.getInstance().getShopInfo()!=null && 
     LuckinBaseData.getInstance().getShopInfo().deptInfo != null){
    deptId = LuckinBaseData.getInstance().getShopInfo().deptInfo.deptId;
}

//kotlin
var deptId = LuckinBaseData.getInstance().getShopInfo()?.deptInfo?.deptId

3.方法的默認(rèn)參數(shù)減少重載,這里最好的例子應(yīng)該是View的四個(gè)構(gòu)造方法

class SimpleAdapter<T>(context: Context = BaseApplication.getInstance() , parent: RecyclerView) {
  fun testM(var i = 1;var j = 2){
    Log.d("test","${i+j}")
  }
}
var simpleAdapter1 = SimpleAdapter(Activity.this,rv_content)
var simpleAdapter2 = SimpleAdapter(parent = rv_content)
simpleAdapter1.testM()//1+2 = 3
simpleAdapter1.testM(3,4)//3+ 4 = 7
simpleAdapter1.testM(5)//5+2 = 7
simpleAdapter1.testM(j = 6)//1+6 = 7

4.高階函數(shù)的支持,不在需要通過接口進(jìn)行行為(方法)的傳遞,方法可以像變量傳遞

class SimpleAdapter<UserInfo>(context: Context  , parent: RecyclerView) {
  var onItemClick: ((Int) -> Unit)? = null

  override fun onBindViewHolder(holder: SimpleViewHolder, pos: Int) {
        //這里的代碼有些臃腫以及不必要,我只是為了test demo
        val userInfo = mData!![pos] as UserInfo
        userInfo.apply {
            holder.itemView.tv_info.text = "$id $name $address"
            holder.itemView.setOnClickListener {
                onItemClick?.run {
                    this(pos)
                }
            }
        }
    }
}

var simpleAdapter1 = SimpleAdapter(Activity.this,rv_content)
simpleAdapter1.onItemClick = {
            Toast.makeText(baseContext, "click -- $it", Toast.LENGTH_SHORT).show()
        }

5.通過插件擴(kuò)展直接使用View的id在類文件中使用View對象

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_kotlin_test)
        tv_name.text = "tv_name無需聲明直接使用"
}

 override fun onBindViewHolder(holder: SimpleViewHolder, pos: Int) {
        val userInfo = mData!![pos] as UserInfo
        userInfo.apply {
            holder.itemView.tv_info.text = "tv_info也可以不用findViewById"
            holder.itemView.setOnClickListener {
                onItemClick?.let {
                    it(pos)
                }
            }
        }
    }

kotlin的高階函數(shù)
C語言的方法變量
Java8的Lambda表達(dá)式
Groovy的閉包.
以及母豬的產(chǎn)后護(hù)理.
我這個(gè)知識啊,都學(xué)雜了.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文/北嶺的燕子 千千萬萬部動漫,千千萬萬個(gè)平行世界。凡有生靈的地方,必有戰(zhàn)爭。凡有戰(zhàn)爭,必有武器。那么縱觀所有動漫...
    北嶺的燕子閱讀 967評論 10 6
  • 今天賴了半個(gè)小時(shí)床,起來洗漱,也不知道搗鼓了什么搗鼓到了八點(diǎn)半。換了個(gè)衣服,下樓去招商銀行辦了工資卡,辦完卡已經(jīng)是...
    囧man閱讀 212評論 0 0
  • 1、類和接口名:采用大駝峰法,如SplitViewContorller 2、文件名:采用大駝峰法,如BlockOp...
    鐘小胖子閱讀 180評論 0 0
  • 如果說時(shí)間可以讓你認(rèn)識一個(gè)人,那么時(shí)間也可以讓你忘記一個(gè)人…… 喧鬧的街市,一如往日的繁華,來來往往的行人似乎也并...

友情鏈接更多精彩內(nèi)容