Memulai
Pemrograman
dengan Kotlin
#3
Ahmad Arif Faizin
Academy Content Writer
Dicoding Indonesia
5.
Data Classes dan
Collections
Data Classes
Class untuk menyimpan data
● Modifier dari sebuah data class tidak bisa abstract, open, sealed, atau inner.
Tidak boleh : open data class User(val name : String, val age : Int)
class vs data class
class User( data class User(
val name : String, val name : String,
val age : Int val age : Int
) )
/* /*
output: output:
oo.User@4d7e1886 DataUser(name=arif, age=17)
*/ */
+ toString()
+ equals()
+ copy() dll
Setter & Getter
Mengatur dan mengambil data
data class DataUser(var name : String, var age : Int)
fun main(){
val dataUser = DataUser("arif", 17)
//set data
dataUser.name = "faizin"
dataUser.age = 24
//get data
val name = dataUser.name
val age = dataUser.age
fun main(){
val dataUser = DataUser("arif", 17)
//set data
dataUser.name = "faizin"
dataUser.age = 24
//get data
val (name, age) = dataUser
● Map : untuk menyimpan dengan format key to value, key unik tidak boleh sama.
val capital = mapOf(
"Jakarta" to "Indonesia",
"London" to "England",
"New Delhi" to "India"
) //Output : {Jakarta=Indonesia, London=England, New Delhi=India} Bisa capital[“Jakarta”]
Bisa capital.getValue(“Jakarta”)
mutablelist vs list
Bisa diubah nilainya Tidak bisa diubah
(mutable) nilainya (immutable)
● Dengan Sequence
fun main() {
val list = (1..1000000).toList()
list.asSequence().filter { it % 5 == 0 }.map { it * 2 }.forEach { println(it) }
}
Kerjakan Latihan
6.
Functional
Programming
Functional
fun getUsername(): List<String>{ fun getUsername(): List<String>{
val name = mutableListOf<String>() return list.map { user ->
for (user in list){ user.name
name.add(user.name) }
} }
return name
}
Anatomy of
Function
parameter yang dikirimkan
nama fungsi ke dalam fungsi
menggunakan nama: tipeData
visibility modifier tipe data nilai
camelCase yang dikembalikan
jika tidak ada
defaultnya
public
private fun setUser(name: String, age: Int): String{
return "Your name is $name, and you $age years old"
}
Named Argument
Contoh :
fun getFullName(first: String, middle: String, last: String): String {
return "$first $middle $last"
}
● Standar
val fullName = getFullName("Kotlin", " is " , "Awesome")
/* /*
output : 13 output : 5
*/ */
Nullable Receiver
Extension yang dapat menerima null
// output : 5 // output : 0
Lambda
Fungsi tanpa nama yang langsung jadi expression
var sum: (Int) -> Int = { value -> value + value } fun main() {
printResult(10){ value ->
fun main() { value + value
printResult(10 ,sum) }
}
= }
//output : 20 // output : 20
Lambda with Receiver
Teknik untuk memasukkan fungsi di dalam lambda sehingga menjadi
DSL (Domain Specific Language)
stringBuilder.append("from ")
stringBuilder.append("lambda") fun buildString(action: StringBuilder.() -> Unit): String {
return stringBuilder.toString() val stringBuilder = StringBuilder()
} stringBuilder.action()
return stringBuilder.toString()
}
//output : Hello from lambda
//output : Hello from lambda
Scope Function
with
with mirip seperti run
hanya saja ia method
bukan extension.
ex:
with(Foo()) {
this.field1 = 1
this.toBar()
}
fun main() {
println("Factorial 10 is: ${factorial(3)}")
}
// output: 6
// hasil dari 3! = 3 x 2 x 1
Lanjutkan Latihan
&
Terus Belajar!
’’ BERLELAH-LELAHLAH,
SUNGGUH MANISNYA HIDUP TERASA
SETELAH LELAH BERJUANG”.
- Imam Syafi’i
’’
Thanks!
Any questions?
You can find me at:
● Google : Ahmad Arif Faizin
● Discord : @arifaizin