1. 程式人生 > >kotlin的let run apply also等等學習記錄

kotlin的let run apply also等等學習記錄

好久沒有更新啦,今天學習了一些kotlin的語法

class MainActivity : AppCompatActivity() {

    private val testArray: ArrayList<String> by lazy { ArrayList<String>() }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.i("hello", "let = " + testLet().toString())
        Log.i("hello", "apply = " + testApply().toString())
        Log.i("hello", "with = " + testWith())
        Log.i("hello", "run = " + testRun())

        testRun2()
        testAlso()
        testRepeat()

        Log.i("hello", "takeIf = " + testTakeIf())
        Log.i("hello", "takeUnless = " + testTakeUnless())

        6.takeIf { it < 7 }?.let {
            compareValues(1, 2)
            Log.i("hello", "2 method = $it")
        }
    }

    private fun testLet(): ArrayList<String> {
        //T.let 將T作為it,let的返回值為函式體內最後一條語句的返回值
        testArray.let {
            it.add("let1")
            it.add("let2")
            Log.i("hello", it.toString())
            return it
        }
    }

    private fun testApply(): ArrayList<String> {
        //T.apply T將函式體中的每一條語句按順序執行,返回T
        return testArray.apply {
            add("apply3")
            add("apply4")
            add("apply5")
            remove("let1")
            Log.i("hello", "apply this=" + this)
        }
    }

    private fun testWith(): Boolean {
        //with(T) 將函式體中的每一條語句按順序執行,返回值為函式體內最後一條語句的返回值
        return with(testArray) {
            add("with6")
            add("with7")
            remove("apply8")
        }
    }

    private fun testRun(): Int {
        //T.run T將函式體中的每一條語句按順序執行,返回最後一條語句的返回值
        return testArray.run {
            add("run9")
            add("run10")
            Log.i("hello", "run this=" + this)
            remove("let1")
            compareValues(3, 4)
        }
    }

    private fun testRun2() {
        //kotlin中的run函式,返回最後一句語句的返回
        var i = 1
        val date = kotlin.run {
            i++
            Date()
            //compareValues(2,3)
        }
        Log.i("hello", "run2 = $date")
    }

    private fun testAlso() {
        //T.also T作為it,返回T
        val also = Date().also {
            Log.i("hello", "also this = $it")
            testArray.add("also11")
        }
        Log.i("hello", "also = $also")
    }

    private fun testRepeat() {
        //其中it為次數,如此處i分別為 0,1,2 repeat 返回Unit
        repeat(3) {
            Log.i("hello", "repeat = $it")
        }
    }

    private fun testTakeIf(): Int? {
        //T.takeIf 當T滿足if條件時返回T,否則返回null
        return 6.takeIf {
            it < 5
        }
    }

    private fun testTakeUnless(): Int? {
        //T.takeIf 當T不滿足條件時返回T,滿足條件返回null
        return 6.takeUnless {
            it < 5
        }
    }
}

自己動手實現一下,感覺理解了一些,一起加油鴨~

相關推薦

kotlin的let run apply also等等學習記錄

好久沒有更新啦,今天學習了一些kotlin的語法 class MainActivity : AppCompatActivity() { private val testArray: ArrayList<String> by lazy { ArrayLi

docker學習記錄一 --- docker run -d -p 80:80 --name webserver nginx 執行錯誤

    Mac 安裝docker方式進行安裝測試(https://yeasy.gitbooks.io/docker_practice/install/mac.html),遇到以下問題,並進行記錄~問題一

Android應用基礎學習記錄

應用 ctp 例如 case 推薦 都沒有 變量命名規則 bytearray href 01_前言 前言,了解了Android的情況。這裏也介紹一下本文。本文是記錄學習Android應用程序開發過程,視頻中使用的Android2.2版本號,我以4.2版本號為基礎,找

[QT][SQL]sq]學習記錄1_模糊搜索

學習網 cnblogs src from log 搜索數據 城市 like .cn sql學習網站: http://www.w3school.com.cn/sql/index.asp 用於模糊搜索數據庫的數據 語句:http://www.w3school.com.cn/

學習記錄: 安裝配置自動化工具ansible

ansible學習記錄: 安裝配置ansible更新日期: 2016-11-30系統環境 :centos6.5本機ip :192.168.233.123被管理機ip :192.168.233.124—————————————————————————————————————py版本

IPProxyPool學習記錄

lib pip3 figure python3 amp library 學習 多版本 not find python3下 import sqlite3 報錯: NO module named ‘_sqlite3‘ 是因為多版本ptyhon問題,需要重新編譯python 步驟

$http學習記錄

google div 好的 pca .site log 文檔 方法 教程 火狐的網址可以直接寫文件的地址 如:D:\studyprogram\wamp\www\http.html 其他的要改成服務器下的地址 如 http://localhost\http.html 廢棄聲

tolua.setpeer學習記錄

lua 記錄 如果 進棧 get string use 輕量 peer static int tolua_bnd_setpeer(lua_State *L) { // stack: userdata, table if (!lua_isuserdata(

android adb shell and monkey 學習記錄

型號 orm -a reboot 觸摸事件 serial roc ear cpu Monkey環境: android SDK and JDK SDK目錄下的platform-tools和tools目錄要配置環境變量 查看版本: ADB 的安裝這裏就

前端學習記錄

webkit 移除 posit settime 支持 執行 rul 方法 可能 總結一下這幾天跟前輩學的新知識: 1.吸頂效果,普通的做法是在onscroll函數中監聽滾動距離,如果滾動超過導航條高度,則將導航條的class添加.fixed。但是ios6+設備下的瀏覽器會在

即時通信常見的幾種方式,此處只做學習記錄

維護 時間 最簡 安裝 記錄 htm websocket 雙向 new 1. 輪詢 利用ajax每隔一段時間就請求一次服務器,服務器返回數據。 優點:最簡單的解決方案 缺點:對服務器壓力很大,浪費帶寬 2. 長輪詢 利用ajax請求服務器,當有數據變化

2017.5.23 -- 學習記錄

cal 根據 stub roi post 顯示 技巧 每日 記錄 學習目錄:   1.ViewStub Android :不占空間和性能的根據不同情況顯示不同的布局。   2.android 中的merge標簽: 在include布局中的根布局可以使用這個merge,系統遇

Python學習記錄-socket編程

pythonPython學習記錄-socket編程學習 python socketPython學習記錄-socket編程1. OSI七層模型詳解2. Python socket3. socket()函數4. TCP socket通信流程5. Python Internet 模塊1. OSI七層模型詳解以上圖見

2017-5-29學習記錄——WebApi(1)

ora 必須 eache 配置 person span eve gen 流行 曾經我一直認為Web服務器的Api使用ashx或ASP.NET MVC中返回JsonResult來實現的。 當我第一次接觸WCF的時候,有同學告訴我目前比較流行WebApi和WebSocket了,

Python學習記錄day5

process its 定義 return 不能 自己 多層裝飾器 環比 方式 1.多層裝飾器 多層裝飾器的原理是,裝飾器裝飾函數後,其實也是一個函數,這樣又可以被裝飾器裝飾。 編譯是從下至上進行的,執行時是從上至下進行。 #!/usr/bin/env python #

vue.js 學習記錄(二)

分離 理解 foo 選項 這也 lsp 生效 html標簽 tro 原文連接:http://www.cnblogs.com/keepfool/p/5625583.html 組件 #註冊組件 Vue.component(‘my-component‘, { // 選項

視頻學習記錄dya01

工作心態 老男孩 學習心態 2017年3月1日 21:00-23:002017年3月2日 21:00-23:00 學習思想:1、多在學習和使用中記憶 不要死記硬背 理解知識背後的原理2、通過案例去記憶、對聯、相聲。 3、靠多練習去記憶4、重復練習,多思考什麽是掌握技術的關鍵李小龍說:他不

視頻學習記錄和規劃day08

考試題目 記錄 應用層 網絡 模型 規劃:2017-4-24 周一 第5章前2h2017-4-25 周二 第5章中2h2017-4-26周三 第5章 後2h tcp三次握手和子網劃分等2017-4-27周四 第6章 2h2017-4-28周五 第6-7閉卷考試 錄屏 以及第7章考試題目講

Centos7.3 Docker安裝部署學習記錄1

docker一、Docker基礎環境的安裝1. 環境說明本機采用操作系統如下: CentOS-7.3-X86-64,內核3.10 x64位,docker 1.12.x版本。 建議采用CentOS7版本或ubuntu版本,本文采用CentOS7即CentOS-7-x86_64-DVD-1611.iso版本最

視頻學習記錄day09

awk sed &nbsp123&nbsp123&nbsp123""‘>&&<""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""