上回說到Kotlin使用的基本配置和一些基本特性,美中不足的,還差那么一丟丟姿勢拭卿。
本次羅列一下基本姿勢骡湖。最終目的,只要錢給到位峻厚,什么姿勢都會~
1.函數(shù)
Kotlin中函數(shù)基本示意圖:
image.png
eg.
fun testFucntion(a: Int,b: Int): Int {
return if (a > b) a else b
}
println(testFucntion(1, 2))
注:與Java相比响蕴,每句話結(jié)束并不需要分號;
2. 變量
val name = "hello world" 【常量,相當于JAVA中的final修飾符】
val age = 12 【等價于 val age: Int = 12,常量age】
var age= 12 【變量 age】
注:val用于聲明常量惠桃,var用于聲明變量
3.類和屬性
在JAVA中的寫法
/* Java */
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
在Kotlin中的寫法
/* Kotlin */
class Person(val name: String)
4.接口(Interface)
/**Kotlin*/
interface Clickable {
fun click()
}
class Button : Clickable{
override fun onClick(){
//implemented
}
}
注:Kotlin在類名后面使用一個冒號來替代Java中的 extends 和 implements 關鍵詞浦夷。
5.數(shù)組
先看Java中數(shù)組的聲明:
String[] colors = new String[]{"Red", "Green", "Yellow"};
String[] emptyStrings = new String[7];
在kotlin中數(shù)組的聲明:
val names: Array<String> = arrayOf("Red", "Green", "Yellow")
val emptyStrings: Array<String?> = arrayOfNulls(7)
6.可變參數(shù)
/** JAVA */
void function(String... parameters){
...
}
/**Kotlin*/可變參數(shù)( Varargs) : 可以接受任意個參數(shù)的函數(shù)
void function(vararg parameters : String){
...
}
7.實例化
/**JAVA*/
Date date = new Date();
/**Kotlin*/告別new
val date = Date()
8.Lambda表達式
-
Lambda作為方法參數(shù)的代碼塊
以JAVA代碼示例: /* Java */ button.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { /* actions on click */ } }); /**Kotlin*/ button.setOnClickListener { /* actions on click */ }
-
Lambda與集合
val people = listOf(Person("Alice", 29), Person("Bob", 31)) println(people.maxBy { it.age }) // 通過比較年齡找出最大值
注:maxBy函數(shù)可以在任何集合中被調(diào)用,而它只需要一個參數(shù):指定什么樣的值應該進行比較來找到最大值元素的函數(shù)辜王。大括號中的代碼 { it.age } 是一個實現(xiàn)這樣的邏輯的lambda劈狐。
- Lambda表達式語法
image.png
val sum = { x: Int, y: Int -> x + y }
println(sum(1, 2))
-
forEach中的Lambda
fun printMessageWithPrefix(messages: Collection<String>, error: String) { messages.forEach { print("$error$it") } } testLambda(){ val listOf = listOf<String>("403 Forbidde","404 Not found") printMessageWithPrefix(listOf,"error") }
9.集合函數(shù)式API
-
filter
filter 函數(shù)變換一個集合,并過濾出不滿足給定斷言的元素: val list = listOf(1, 2, 3, 4) list.filter { it % 2 == 0 } >>[2, 4]
-
map
map 函數(shù)對集合中的每個元素應用給定的函數(shù)呐馆,并且收集結(jié)果形成新的集合 val list = listOf(1, 2, 3, 4) list.map { it * it } >>[1, 4, 9, 16]
-
filter和map共用
people.filter { it.age > 30 }.map(Person::name)
-
groupBy
val people = listOf(Person("Alice", 31), ... Person("Bob", 29), Person("Carol", 31)) >>println(people.groupBy { it.age }) 一個映射通過鍵被分成多個組