1. 程式人生 > >kotlin 學習 之 一些常見用法

kotlin 學習 之 一些常見用法

When表示式
加強版的switch,支援任意型別
支援純表示式條件分支(類似於if)
表達是必須得完整

fun main(args: Array<String>) {
    val x = 5
    when(x){
        //是否是int
        is Int -> println("hello $x")
        //是在區間範圍內
        in 1..100 -> println("$x 在1-100區間內")
        //不在區間內
        !in 1..100 -> println("$x 不在1-100區間內"
) //判斷x和下面的表示式值是不是一樣 args[0].toInt() -> println("引數和 $x 一樣") } val mode = when{ args.isNotEmpty() && args[0] == "1" ->1 else -> 0 } println(mode) }

is 運算子檢測一個表示式是否某型別的一個例項。 如果一個不可變的區域性變數或屬性已經 判斷出為某型別,那麼檢測後的分支中可以直接當作該型別使用,無需顯式轉換:

//sampleStart
fun getStringLength(obj: Any):
Int? { if (obj is String) { // `obj` 在該條件分支內自動轉換成 `String` return obj.length } // 在離開型別檢測分支後,`obj` 仍然是 `Any` 型別 return null }

使用 lambda 表示式來過濾(filter)和對映(map)集合:

fun main(args: Array<String>) {
val fruits = listOf("banana", "avocado", "apple", "kiwi")
//sampleStart
fruits
.filter { it.startsWith("a"
) } .sortedBy { it } .map { it.toUpperCase() } .forEach { println(it) } //sampleEnd }

建立 DTOs(POJOs/POCOs)

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

會為 Customer 類提供以下功能: 所有屬性的 getters (對於 var 定義的還有 setters) equals() hashCode() toString() copy() 所有屬性的 component1() 、 component2() ……等等(參見資料類)

過濾 list

val positives = list.filter { x -> x > 0 }
//或者可以更短:
val positives = list.filter { it > 0 }

遍歷 map/pair型list

for ((k, v) in map) {
println("$k -> $v")
}

k 、 v 可以改成任意名字。

使用區間

for (i in 1..100) { …… } // 閉區間:包含 100
for (i in 1 until 100) { …… } // 半開區間:不包含 100
for (x in 2..10 step 2) { …… }
for (x in 10 downTo 1) { …… }
if (x in 1..10) { …… }

延遲屬性

val p: String by lazy {
// 計算該字串
}

擴充套件函式

fun String.spaceToCamelCase() { …… }
//使用
"Convert this to camelcase".spaceToCamelCase()

建立單例

object Resource {
val name = "Name"
}

對一個物件例項呼叫多個方法 ( with )

class Turtle {
fun penDown()
fun penUp()
fun turn(degrees: Double)
fun forward(pixels: Double)
}
val myTurtle = Turtle()
with(myTurtle) { // 畫一個 100 畫素的正方形
penDown()
for(i in 1..4) {
forward(100.0)
turn(90.0)
}
penUp()
}

合併集合

val list = listOf(1..10,11..20)
val flatList = list.flatMap{it}
flatList.forEach(::println)//輸出1...20

集合元素迭代操作

val list = listOf(1..10)
println(list.reduce { acc, i -> i + acc })//輸出1到10的和

//帶初始值的迭代
println(list.fold(5){acc, i -> i + acc }) //輸出初始值為5,疊加1到10的的和

有條件的迭代

val list = listOf(1,2,3,4,5,6)
list.takeWhile { it % 2 == 1}.forEach(::println)//只輸出1,當出現不滿足條件元素時馬上終止

相關推薦

kotlin 學習 一些常見用法

When表示式 加強版的switch,支援任意型別 支援純表示式條件分支(類似於if) 表達是必須得完整 fun main(args: Array<String>) { val x = 5 when(x){

C++const_cast常見用法

href ase lan val das weibo tls ipp ops ls71kr餃瓷幽透蓖茲http://shufang.docin.com/sina_6341788483gclx8t思煙遲謔爸捌http://jz.docin.com/zsoy17419hcqm蛻

opensuse軟件安裝zypper常見用法

pen .com 安裝 use open targe gpo arch www https://www.cnblogs.com/xiangzi888/archive/2012/03/10/2388597.htmlopensuse軟件安裝之zypper常見用法

Octave入門一些常見的語法知識

最近準備開始做數字影象處理的實驗,我安裝了Octave,於是準備繼續用Octave做實驗,(Matlab你懂的,入門買個覺得有點浪費,況且Octave能用懂,轉到Matlab估計也不是很困難)。 下面記錄下學習中覺得用的比較多的基本知識: 1、訪問矩陣的特定元素值 2、獲取矩陣

Kotlin學習常用高階函式:filter

與filter相似的還有以下幾個: filterNot()和filterNotTo():與filter相反,這兩個函式會過濾出不符合條件的元素; filterIndexed()和filterIndexedTo():這兩個函式接受(Int,T)->Boolean型別的函式,同時檢

Kotlin學習kotlin-android-extensions

Kotlin Android Extensions是另一個Kotlin團隊研發的外掛,讓我們用更少的程式碼來開發程式 。 當前僅僅包括了view的繫結。該外掛自動建立了很多的屬性來讓我們直接訪問XML中的view。因此不需要你在佈局中去找到這些views。 我們使用的Vi

Kotlin學習資料整理

android developer Kotlin 官網 《Kotlin for android developers》中文版翻譯 擴充套件(Extensions) - Kotlin 中文文件 Anko 非常強大的Kotlin庫,能讓我們更加快速的開發, 封裝了大量的api,建議前期先不要

Kotlin 學習準備

Kotlin已經被指定為官方語言,早晚大家都要投靠他,就像as一樣,下面我們就說下如何使用Kotlin。 下載並安裝Kotlin外掛 如果你是android studio 3.0版本可以略過這步,寫這篇文章的時候android studio 3.0 還沒有釋出一個穩定的版本,這裡

Kotlin學習旅(D1)-學習計劃&基本語法

2017年的Google I/O 開發者大會 Kotlin正式成為了Android的官方支援語言 2018年的國慶小長假最後一天 BlueLzy正式開始Kotlin學習之旅 學習計劃 學什麼? 今天是Kotlin學習之旅的第一天,這次Kotlin之旅的行程計劃是

Kotlin學習旅(D3)-類與繼承

Day 3 Kotlin學習之旅-第三天 今天的主題是:類與繼承 前言 今日目標 今天空閒的時候 baidu一下,發現簡書,掘金上有很多Kotlin學習總結,但是基本上都是把官方文件一字不落地複製貼上了過來。我不希望自己也是這樣子的,因此在Kotlin學習之

Kotlin學習旅(D4)-函式與Lambda表示式

Kotlin學習之旅-第四天 今天的主題是:函式與Lambda表示式 前言 函式 Kotlin裡面的函式其實在之前的學習中已經見過了,通過 fun 關鍵字來標識 fun double(x: Int): Int { return 2 * x } 預

Kotlin學習旅(D8)-From Java to Kotlin

Kotlin學習之旅第八天 今天的主題是:From Java to Kotlin 前言 學習資源 Kotlin官網線上學習課程(需要翻牆):Kotlin Koans kotlin必備知識: 首先如果是有Java基礎的童鞋,推薦直接從官網文件上

Kotlin學習路一(Kotlin語言簡介)

Kotlin語言的歷史 Kotlin語言是由JetBrains公司從2010年開始構思,2011年退出Kotlin專案,2012年將Kotlin專案開源,2016年釋出了一個穩定版本,所以說,Kotli

java泛型的一些常見用法

本文主要參考下面幾篇文章: http://blog.csdn.net/seu_calvin/article/details/52230032 http://blog.csdn.net/orzlzro/

PyRTF模組生成rtf的一些常見用法

python 寫一些報告,常用的可用win32 com的模組編寫WORD,不過不能居於linux平臺,這裡採用PyRTF模組來生成rtf。對一些基礎操作,做些記錄!指令碼可以優化,對於一些呼叫可以寫成函式形式,這裡是為了理解方便! 注意:參考PyRTF模組例項 #!/us

kotlin學習for迴圈

java中的for迴圈有兩種實現方式: for (int i = 0; i < 10; i++) { } for (int i = 10; i > 0; i--) { } private ArrayList<String> list = new ArrayL

ROS學習tf基本用法

主要細節參見wiki,這裡我寫一下它的broadcaster和listener做個記錄: tf_broadcaster.cpp: #include<ros/ros.h> #include<tf/transform_broadcaster.h> in

Calendar 的一些常見用法 如判斷是否是同一天

1、Calendar 判斷是否是同一天 程式碼如下 : 思路 :將兩個Date 型別的時間格式化成Calendar 型別的時間 在分別獲取兩個事件的年月日  進行對比 public static b

Kotlin學習零散知識累積

1, 在Java中的  void ,就是Kotlin中的  Unit 2,先變數名,冒號,型別。更利於人類理解。   val   name:   String? = "Sanding" 3,在Java中 我們使用   +  拼接    字串  , 但是在Kotli

我的Kotlin學習旅(四)

類和繼承 1.類 在Kotlin中類也是用class表示,與Java不同的是,如果這個類沒有內容,可以省略這對大括號 可以只寫: class Person 2.建構函式 在 Kotlin 中類可以有一個主建構函式以及多個二級建構函式。主建構函式是類頭