• Data Classes
• Operator overloading
• Flow Control
• Lambdas
• Modifier
• Null safety pada Kotlin
• High-Order Function
Kelas Data
• Kelas data merupakan kelas yang mengurangi
boilerplate pada java untuk membuat POJO, sebuah
kelas yang berdiri sendiri tidak memiliki
ketergantungan dengan class lain yang digunakan
untuk memodelkan sebuah data.
• Kelas ini biasanya akan membutuhkan getters dan
setters untuk mengakses data mereka.
• Mendefinisikan kelas data sangat mudah
menggunakan Kotlin, yaitu dengan menambahkan
kata data diawal kelas.
Kelas Data
fun main() {
val f1 = Cuaca("Medan", 27.5f, " ")
var (wilayah, suhu, keterangan) = f1
println(wilayah.toString())
}
fun main() {
var d1 : MyData = MyData(10,"Adi")
var d2 : MyData = MyData(1," Purnama")
var d3 : MyData = (d1+d2)
println("Nama : ${d3.nama} Umur : ${d3.umur}")
}
Operator overloading
Overloading untuk Unary Operations
• Unary operation digunakan untuk mengoperasikan
satu operand.
Unary operation
Operasi Fungsi Overloading
+a unaryPlus()
-a unaryMinus()
!a not()
a++ inc()
a-- dec()
Operator overloading
Overloading untuk Unary Operations
• Pada kelas MyData, tambahkan
operator fun unaryPlus(): MyData = MyData(umur+1,nama)
fun main() {
var d1 : MyData = MyData(10,"Adi")
var d3 = +d1
println("Nama : ${d3.nama} Umur : ${d3.umur}")
}
Operator overloading
Binary operations
Overloading untuk Operasi Fungsi Overloading
Binary Operations a+b a.plus(b)
a-b a.minus(b)
• Binary operation a*b a.times(b)
digunakan untuk a/b a.div(b)
mengoperasikan dua a%b a.mod(b)
operand. a..b a.rangeTo(b)
a in b b.contains(a)
a !in b !b.contains(a)
a += b a.plusAssign(b)
a -= b a.minusAssign(b)
a *= b a.timesAssign(b)
a /= b a.divAssign(b)
a %= b a.modAssign(b)
Operator overloading
Array-like operations
• Array-like operation digunakan untuk
mengoperasikan data dalam bentuk Array.
Array-Like operations
Operasi Fungsi Overloading
a[i] get(i)
a[i, j] get(i, j)
a[i_1, …, i_n] get(i_1, …, i_n)
a[i] = b set(i, b)
a[i, j] = b set(i, j, b)
a[i_1, …, i_n] = b set(i_1, …, i_n, b)
Operator overloading
Array-like operations
Contoh
fun main() {
var d1 : MyData = MyData(10,"Adi")
var d2 : MyData = MyData(11,"Firdan")
var alldata = listOf<MyData>(d1,d2);
println("Nama : ${alldata.get(1).nama} " +
"\n Umur : ${alldata.get(1).umur}")
}
Flow Control
• Flow Control bukan masalah baru untuk anda.
• Anda pasti telah sering menggunakan flow control
karena flow control merupakan cara paling berguna
dalam menyelesaikan sebuah masalah
pemrograman dengan cara yang lebih sederhana.
• Pada Kotlin, biasanya anda akan memerlukan lebih
sedikit mekanisme untuk mengontrol aliran kode
Flow Control
Ekspresi IF
• Anda dapat menggunakan ekspresi if, sama seperti
yang anda lakukan pada pemrograman java
var myValue : Int? = null
var myLong = myValue?.toLong() ?: 0L;
var x = 0f;
when(x){
0.0f -> println("Nol")
0.1f -> println("Nol Koma Satu")
0.2f -> println("Nol Koma Dua")
else -> {
println("Error Input")
}
}
Flow Control
Ekspresi When
• Ekspresi When juga dapat mengembalikan sebuah
nilai, tetapi tanpa perlu menggunakan keyword
return
• Pada pengembalian nilai ini, perintah else wajib
diberikan
var x = 0;
var stringKata = when(x){
0,1 -> "Binary"
else -> "Error"
}
Flow Control
Ekspresi When
• Ekspresi When juga dapat digunakan untuk
memeriksa instance dari sebuah objek, yaitu
dengan menambahkan keyword is
• Contoh:
var collections = arrayOf(0,1,2,3,4,5)
for (item: Int in collections) {
println("$item")
}
Flow Control
Ekspresi While dan do/while
• Untuk ekspresi While dan do/while, tidak berbeda
dengan bahasa Java.
var x = 10;
while (x > 0) {
x--
}
var y = 0
do {
y++
} while (y < 10)
Flow Control
Ekspresi Range
• Eksepresi Range pada kotlin menggunakan operator dalam
bentuk “..” yang mengimplementasikan fungsi rangeTo.
• Ekspresi ini sangat membantu anda untuk
menyederhanakan baris kode anda, sebagai contoh:
if (i >= 0 && i <= 10)
println("$i")
• Anda dapat mengubahnya menjadi
if (i in 0..10)
println("$i")
Flow Control
Ekspresi Range
• Angka pada ekspresi range dapat di iterasi:
for (i in 0..10)
println("$i")
button1.setOnClickListener{ }
//Kotlin
button.setOnClickListener {
// Do something in response to button click
}
Lambda
Mendefinisikan Lambda
• Pada Kotlin lambda didefinisikan dengan sintaks:
54
Higher-Order Functions
• Anda dapat membentuk fungsi last() sebagai
higher-order function dengan cara:
val stringList: List<String> = listOf("super", "mini", "club","inn","0")
print(stringList.last{it.length == 4})
• Higher-Order Functions pada contoh ini,
menjadikan lambda sebagai parameter kedalam
fungsi last(), yang berfungsi untuk mencari kata
dengan panjang huruf = 4
55
Higher-Order Functions
• Perhatikan fungsi ini:
fun calCircumference(radius: Double) = (2 * Math.PI) * radius
fun calArea(radius: Double): Double = (Math.PI) * Math.pow(radius, 2.0)
fun circleOperation(radius: Double, op: (Double) -> Double): Double {
val result = op(radius)
return result
}
56
Higher-Order Functions
• Lihat fungsi circleOperation(), terdiri atas 2
parameters:
• Pertama : radius bertipe Double
• op, merupakan sebuah fungsi yang menerima
parameter double dan mengembalikan returns nilai
double
• Fungsi circleOperation() ini merupakan contoh
higher-order function yang menerima fungsi
sebagai parameter.
57
Higher-Order Functions
• Untuk menggunakan fungsi circleOperation(), anda
dapat mengirimkan parameter fungsi seperti
, calArea() atau calCircumference()
• Untuk mengirimkan fungsi sebagai parameter
di circleOperation(), anda harus
menggunakan ”::” dan menghilangkan ()
• print(circleOperation(3.0, ::calArea))
• print(circleOperation(6.7, ::calCircumference))
• penggunaan higher-order functions dengan tepat,
akan membuat code anda lebih mudah dibaca dan
di mengerti.
58
Higher-Order Functions
• Lambdas and Higher-Order Functions
• Anda juga dapat mengirimkan lambda pada higher-
order function secara langsung. Contoh:
circleOperation(5.3, { (2 * Math.PI) * it })
59
Higher-Order Functions
• higher-order functions juga dapat mengembalikan
sebuah fungsi ke pemanggil
• Contoh:
• fun multiplier(factor: Double): (Double) -> Double
= { number -> number*factor }
• Fungsi di atas akan mengembalikan lambda
ekspresi yang mengembalikan type double.
• val doubler = multiplier(2)
• print(doubler(5.6)) // 11.2
60
Latihan
• Buat Extension Fungsi untuk:
• String, yang mengembalikan huruf besar untuk tiap kata
(Capitalize Each Word)
• Context, untuk membuat Toast, yang hanya
menampilkan angka
• MutableList, untuk mendapatkan nilai median
• View, mengubah tampilan dari letak text dalam
TextView, menjadi 3 pilihan, rata kiri, rata kanan, atau
center
61
Latihan
• Buat Higher-Order Functions dengan ketentuan:
• Buat fungsi isEven(int) yang mengembalikan Boolean
• Buat fungsi isOdd(int) yang mengembalikan Boolean
• Buat fungsi isPrim(int) yang mengembalikan Boolean
• Buat fungsi Higher-Order Functions untuk mengfilter
inputan ke dalam koleksi berdasarkan fungsi di atas
62