Top - Level Function:
Là Function định nghĩa ngoài Class, Object, Interface. Function loại này có thể gọi trực tiếp luôn mà không cần tạo đối tượng.
Nếu ai đã từng code java thì top level function có thể hiểu là thay thế cho các static method.
ví dụ về top-level function:
package com.shine2share fun printName(name: String): String { return name }
Để sử dụng top level function trong package khác thì ta chỉ việc import nó là ok
package com.share2study import com.shine2share.printName fun myFun(): String { return printName("Dycky") }
--> import xong, ta gọi trực tiếp hàm luôn
Lambda Expression in Kotlin
Hay còn gọi là Function Literal
- phải có cặp ngoặc nhọn {}
- ko có fun keyword
- ko có bất kỳ 1 access modifier nào ( private, public, protected)
- nó là ẩn danh (anonymous) có nghĩa là ko có tên function
- ko có kiểu trả về
- parameters ko đc bao bọc bởi cặp ( )
--> gán lambda expression với 1 biến và thực thi nó.
ví dụ 1: ko param
// lambda expression with no param val xinChao = {println("Xin chao! Toi la Kotlin Dev.")} fun main(args: Array<String>) { xinChao() }
ví dụ 2: 1 param
// lambda expression with 1 param val xinChao = {name: String -> println("Xin chao! $name la Kotlin Dev.")} fun main(args: Array<String>) { xinChao("Ducky") }
ví dụ 3: 2 param
val calSum = {num1: Int, num2: Int -> println("Sum of num1 and num2 is: " + (num1+num2))} fun main(args: Array<String>) { calSum(1,2) }
Lambda expression có thể làm param cho Function
fun main(args: Array<String>) { println(stringList.last()) // "Hola" println(stringList.last({ s: String -> s.length == 8})) // "Xin chao"} val stringList: List<String> = listOf("Hello", "Xin chao", "Hola")
Có thể bỏ dấu ngoặc ( ) nếu tham số truyền vào là lambda expression
println(stringList.last{ s: String -> s.length == 8}) // "Xin chao"
it keyword: tạo ra tự động bởi compiler - Kotlin sẽ tự hiểu "it" là stringList hiện tại.
fun main(args: Array<String>) { println(stringList.last{ it.length == 8}) // "Xin chao"} val stringList: List<String> = listOf("Hello", "Xin chao", "Hola")
Local return in lambda expression
xét đoạn code sau
fun main(args: Array<String>) { printName() } fun printName() { val intList = listOf(1, 2, 3, 4, 5) intList.forEach { if (it % 2 == 0) { return } } println("Ket thuc ham printName()") }
dòng lệnh
println("Ket thuc ham printName()")sẽ ko in ra theo mong muốn.
Để fix lỗi trên ta chỉ cần thêm 1 nhãn (hoặc tag name) vào sau return
intList.forEach { if (it % 2 == 0) { return@forEach } }
bạn cũng có thể tự định nghĩa nhãn cho riêng mình
fun printName() { val intList = listOf(1, 2, 3, 4, 5) intList.forEach myLabel@{ if (it % 2 == 0) { return@myLabel } } println("Ket thuc ham printName()") }
Member Function
là loại function định nghĩa trong class, object hay interface.
ví dụ:
class Circle { fun calArea(radius: Double): Double { return Math.PI * Math.pow(radius, 2.0) } }
Cách thức gọi hàm như sau
fun main(args: Array<String>) { val circle = Circle() println("Dien tich hinh tron la: " + circle.calArea(3.0)) }
Anonymous Function
- ko có tên
- có fun keyword
- có thân hàm (body)

0 nhận xét:
Đăng nhận xét