SlideShare a Scribd company logo
1 of 27
Memulai
Pemrograman
dengan Kotlin
#4
Ahmad Arif Faizin
Academy Content Writer
Dicoding Indonesia
x
https://bdd.kemenparekraf.go.id/
7.
Object-Oriented Programming
(OOP)
Class, Properties, & Function
Blueprint untuk membuat Object
fun main() {
val garfield = Cat("Orange", 27, 46, 4)
garfield.playing()
garfield.sleep()
garfield.eat()
garfield.purring()
}
Getter & Setter
class Animal{
var name: String = "Dicoding Miaw"
get(){
println("Fungsi Getter
terpanggil")
return field
}
set(value){
println("Fungsi Setter terpanggil")
field = value
}
}
fun main(){
val dicodingCat = Animal()
println("Nama: ${dicodingCat.name}" )
dicodingCat.name = "Goose"
println("Nama: ${dicodingCat.name}")
}
/*
output:
Fungsi Getter terpanggil
Nama: Dicoding Miaw
Fungsi Setter terpanggil
Fungsi Getter terpanggil
Nama: Goose
*/
4 Pilar OOP
Inheritance
Pewarisan sifat
Inheritance
Inheritance
class Cat : Animal() {
fun walk () {
}
override fun eat(){
}
override fun sleep() {
}
class ChildClass : ParentClass()
open class Animal(){
open fun eat(){
}
open fun sleep(){
}
}
agar dapat diwariskan
Cat menjadi turunan Animal
Abstract Class
Menghindari pembuatan instance dari kelas tersebut
abstract class Animal(
var name: String,
var weight: Double,
var age: Int,
var isCarnivore: Boolean){
}
fun main(){
val animal = Animal("dicoding animal", 2.6, 1, true)
}
*Cannot create an instance of an abstract class
Visibility Modifier
hak akses
Overloading
Membuat penamaan fungsi yang sama namun
berbeda parameternya.
class Animal(private var name: String) {
fun eat() {
println("$name makan!")
}
fun eat(typeFood: String) {
println("$name memakan $typeFood!")
}
fun eat(typeFood: String, quantity: Double) {
println("$name memakan $typeFood sebanyak $quantity
grams!")
}
}
fun main() {
val dicodingCat = Animal("Dicoding Miaw")
dicodingCat.eat()
dicodingCat.eat("Ikan Tuna")
dicodingCat.eat("Ikan Tuna", 450.0)
}
Interface
Supaya kelas turunan harus memiliki semua sifat yang sama
interface IFly {
fun fly()
}
class Bird : IFly {
override fun fly() {
println("I flying without wings")
}
}
harus ada
Property Delegation
Mengirimkan tugas pada kelas lain
class DelegateName {
private var value: String = "Default"
operator fun getValue(classRef: Any?, property: KProperty<*>) : String {
println("")
return value
}
operator fun setValue(classRef: Any?, property: KProperty<*>, newValue: String){
println("")
value = newValue
}
}
class Animal {
var name: String by DelegateName()
}
class Person {
var name: String by DelegateName()
}
Kerjakan Latihan
8.
Kotlin Generics
Apa itu Generic?
dapat digunakan secara umum untuk berbagai macam tipe data
Contoh yang sudah ada di Kotlin:
val contributor = listOf("alfian","nrohmen","dimans","widy")
val contributorAge = listOf(17, 27, 37, 48)
val contributorSupport = listOf(true, false, false, true)
*listOf bisa digunakan secara umum (tipe data apa aja)
Cara Membuat Kelas Generic
fun main() {
val longArrayList = ArrayList<Long>()
val firstLong = longArrayList[0]
}
class ArrayList<T> : List<T> {
override fun get(index: Int): T {
return this[index]
}
}
interface List<T> {
operator fun get(index: Int): T
}
Angle brackets <>
Cara Membuat Fungsi
Genericfun main() {
val numbers = (1..100).toList()
print(numbers.potong(1..10))
}
fun <T> List<T>.potong(indices: IntRange): List<T> {
if (indices.isEmpty()) return listOf()
return this.subList(indices.first, indices.last + 1).toList()
}
Constraint Type Parameter
Pembatasan tipe nilai yang akan disematkan ke dalam parameter.
fun main() {
val numbers = ListNumber<Long>()
val numbers2 = ListNumber<Int>()
val numbers3 = ListNumber<String>()
error : Type argument is not within its bounds
}
class ListNumber<T : Number> : List<T>{
override fun get(index: Int): T {
return this[index]
}
}
interface List<T> {
operator fun get(index: Int): T
}
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
numbers.sumNumber()
val names = listOf("dicoding", "academy")
names.sumNumber()
// error : inferred type String is not a subtype of Number
}
fun <T : Number> List<T>.sumNumber() : T {
/* .. */
}
Variance
Variance dibutuhkan ketika kita ingin membuat kelas atau fungsi generic dengan
batasan yang tidak akan mengganggu dalam penggunaannya.
Covariant
tipe argument hanya dapat digunakan sebagai
tipe nilai kembalian
interface List<out E> : Collection<E> {
operator fun get(index: Int): E
}
Contravariant
tipe argument dapat digunakan sebagai
argumen untuk sebuah fungsi
interface Comparable<in T> {
operator fun compareTo(other: T): Int
}
Lanjutkan Latihan
&
Terus Belajar!
Aku lebih takut kepada orang yang melatih
1 buah jurus tendangan 1000 kali,
daripada kepada orang yang berlatih
1000 jurus tendangan 1 kali".
- Bruce Lee
’’
’’
You can find me at:
● Google : Ahmad Arif Faizin
● Discord : @arifaizin
Thanks!
Any questions?

More Related Content

What's hot

7. Queue (Struktur Data)
7. Queue (Struktur Data)7. Queue (Struktur Data)
7. Queue (Struktur Data)Kelinci Coklat
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlinintelliyole
 
Perulangan dan Array dalam PHP
Perulangan dan Array dalam PHPPerulangan dan Array dalam PHP
Perulangan dan Array dalam PHPI Gede Iwan Sudipa
 
Dts x dicoding #1 memulai pemrograman kotlin
Dts x dicoding #1 memulai pemrograman kotlinDts x dicoding #1 memulai pemrograman kotlin
Dts x dicoding #1 memulai pemrograman kotlinAhmad Arif Faizin
 
Pertemuan 02 teori dasar himpunan
Pertemuan 02   teori dasar himpunanPertemuan 02   teori dasar himpunan
Pertemuan 02 teori dasar himpunanFajar Istiqomah
 
Pengulangan for Algoritma
Pengulangan for AlgoritmaPengulangan for Algoritma
Pengulangan for Algoritmacasnadi
 
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)Debby Ummul
 
Form Pemesanan Tiket dengan Java NetBeans
Form Pemesanan Tiket dengan Java NetBeansForm Pemesanan Tiket dengan Java NetBeans
Form Pemesanan Tiket dengan Java NetBeansAldila Putri
 
Contoh program buble sort dalam pascal
Contoh program buble sort dalam pascalContoh program buble sort dalam pascal
Contoh program buble sort dalam pascalSimon Patabang
 
Algoritma dan Pemrograman C++ (Percabangan)
Algoritma dan Pemrograman C++ (Percabangan)Algoritma dan Pemrograman C++ (Percabangan)
Algoritma dan Pemrograman C++ (Percabangan)Nabil Muhammad Firdaus
 
Analisis Algoritma - Notasi Asimptotik
Analisis Algoritma - Notasi AsimptotikAnalisis Algoritma - Notasi Asimptotik
Analisis Algoritma - Notasi AsimptotikAdam Mukharil Bachtiar
 
Materi 3 Finite State Automata
Materi 3   Finite State AutomataMateri 3   Finite State Automata
Materi 3 Finite State Automataahmad haidaroh
 
Matematika Diskrit - 08 kombinatorial - 03
Matematika Diskrit - 08 kombinatorial - 03Matematika Diskrit - 08 kombinatorial - 03
Matematika Diskrit - 08 kombinatorial - 03KuliahKita
 
Matematika Diskrit - 03 himpunan - 02
Matematika Diskrit - 03 himpunan - 02Matematika Diskrit - 03 himpunan - 02
Matematika Diskrit - 03 himpunan - 02KuliahKita
 
Python Dictionary
Python DictionaryPython Dictionary
Python DictionarySoba Arjun
 

What's hot (20)

7. Queue (Struktur Data)
7. Queue (Struktur Data)7. Queue (Struktur Data)
7. Queue (Struktur Data)
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
 
Perulangan dan Array dalam PHP
Perulangan dan Array dalam PHPPerulangan dan Array dalam PHP
Perulangan dan Array dalam PHP
 
Laporan
LaporanLaporan
Laporan
 
Dts x dicoding #1 memulai pemrograman kotlin
Dts x dicoding #1 memulai pemrograman kotlinDts x dicoding #1 memulai pemrograman kotlin
Dts x dicoding #1 memulai pemrograman kotlin
 
Pertemuan 02 teori dasar himpunan
Pertemuan 02   teori dasar himpunanPertemuan 02   teori dasar himpunan
Pertemuan 02 teori dasar himpunan
 
Pengulangan for Algoritma
Pengulangan for AlgoritmaPengulangan for Algoritma
Pengulangan for Algoritma
 
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
 
Latihan soal struktur data
Latihan soal struktur dataLatihan soal struktur data
Latihan soal struktur data
 
Form Pemesanan Tiket dengan Java NetBeans
Form Pemesanan Tiket dengan Java NetBeansForm Pemesanan Tiket dengan Java NetBeans
Form Pemesanan Tiket dengan Java NetBeans
 
Algoritma Garis
Algoritma GarisAlgoritma Garis
Algoritma Garis
 
Contoh program buble sort dalam pascal
Contoh program buble sort dalam pascalContoh program buble sort dalam pascal
Contoh program buble sort dalam pascal
 
Basis dan Dimensi
Basis dan DimensiBasis dan Dimensi
Basis dan Dimensi
 
Algoritma dan Pemrograman C++ (Percabangan)
Algoritma dan Pemrograman C++ (Percabangan)Algoritma dan Pemrograman C++ (Percabangan)
Algoritma dan Pemrograman C++ (Percabangan)
 
Analisis Algoritma - Notasi Asimptotik
Analisis Algoritma - Notasi AsimptotikAnalisis Algoritma - Notasi Asimptotik
Analisis Algoritma - Notasi Asimptotik
 
Materi 3 Finite State Automata
Materi 3   Finite State AutomataMateri 3   Finite State Automata
Materi 3 Finite State Automata
 
Matematika Diskrit - 08 kombinatorial - 03
Matematika Diskrit - 08 kombinatorial - 03Matematika Diskrit - 08 kombinatorial - 03
Matematika Diskrit - 08 kombinatorial - 03
 
Matematika Diskrit - 03 himpunan - 02
Matematika Diskrit - 03 himpunan - 02Matematika Diskrit - 03 himpunan - 02
Matematika Diskrit - 03 himpunan - 02
 
#1 PENGENALAN PYTHON
#1 PENGENALAN PYTHON#1 PENGENALAN PYTHON
#1 PENGENALAN PYTHON
 
Python Dictionary
Python DictionaryPython Dictionary
Python Dictionary
 

Similar to MEMULAI PEMROGRAMAN DENGAN KOTLIN #4

Algotitma dan Struktur Algoritma - Collection
Algotitma dan Struktur Algoritma - CollectionAlgotitma dan Struktur Algoritma - Collection
Algotitma dan Struktur Algoritma - CollectionSiska Amelia
 
PPT Functional dan OOP Programming.pptx
PPT Functional dan OOP Programming.pptxPPT Functional dan OOP Programming.pptx
PPT Functional dan OOP Programming.pptxAliefMuhammadAbdilla
 
Struktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked listStruktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked listSunarya Marwah
 
Tugas C++ (Matriks) - Dian Aditya - 2009/2010
Tugas C++ (Matriks) - Dian Aditya - 2009/2010Tugas C++ (Matriks) - Dian Aditya - 2009/2010
Tugas C++ (Matriks) - Dian Aditya - 2009/2010Dian Aditya
 
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPrasetyo Adi
 
Function
FunctionFunction
Functionwindi1
 
Laporan program data pemain bola (java)
Laporan program data pemain bola (java)Laporan program data pemain bola (java)
Laporan program data pemain bola (java)Rifqi Syamsul Fuadi
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 13
Laporan praktikum Algoritma dan Pemrograman pertemuan 13Laporan praktikum Algoritma dan Pemrograman pertemuan 13
Laporan praktikum Algoritma dan Pemrograman pertemuan 13Ekha Cahya Nugraha
 
05.70 JAVA SE_java list
05.70  JAVA SE_java list05.70  JAVA SE_java list
05.70 JAVA SE_java listJefri Fahrian
 

Similar to MEMULAI PEMROGRAMAN DENGAN KOTLIN #4 (20)

Algotitma dan Struktur Algoritma - Collection
Algotitma dan Struktur Algoritma - CollectionAlgotitma dan Struktur Algoritma - Collection
Algotitma dan Struktur Algoritma - Collection
 
Bab8.array
Bab8.array Bab8.array
Bab8.array
 
Bab8.array
Bab8.array Bab8.array
Bab8.array
 
PPT Functional dan OOP Programming.pptx
PPT Functional dan OOP Programming.pptxPPT Functional dan OOP Programming.pptx
PPT Functional dan OOP Programming.pptx
 
tugas struktur data
tugas struktur datatugas struktur data
tugas struktur data
 
Array
ArrayArray
Array
 
Resume praktikum 6 stack
Resume praktikum 6 stackResume praktikum 6 stack
Resume praktikum 6 stack
 
Struktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked listStruktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked list
 
Affirmation App.pdf
Affirmation App.pdfAffirmation App.pdf
Affirmation App.pdf
 
Tugas C++ (Matriks) - Dian Aditya - 2009/2010
Tugas C++ (Matriks) - Dian Aditya - 2009/2010Tugas C++ (Matriks) - Dian Aditya - 2009/2010
Tugas C++ (Matriks) - Dian Aditya - 2009/2010
 
Pengantar R
Pengantar RPengantar R
Pengantar R
 
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
 
Laporan praktikum jawaban 10 algoritma(1)
Laporan praktikum jawaban 10 algoritma(1)Laporan praktikum jawaban 10 algoritma(1)
Laporan praktikum jawaban 10 algoritma(1)
 
Pertemuan II Function
Pertemuan II FunctionPertemuan II Function
Pertemuan II Function
 
Function
FunctionFunction
Function
 
Function
FunctionFunction
Function
 
Laporan program data pemain bola (java)
Laporan program data pemain bola (java)Laporan program data pemain bola (java)
Laporan program data pemain bola (java)
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 13
Laporan praktikum Algoritma dan Pemrograman pertemuan 13Laporan praktikum Algoritma dan Pemrograman pertemuan 13
Laporan praktikum Algoritma dan Pemrograman pertemuan 13
 
Pertemuan V
Pertemuan VPertemuan V
Pertemuan V
 
05.70 JAVA SE_java list
05.70  JAVA SE_java list05.70  JAVA SE_java list
05.70 JAVA SE_java list
 

More from Ahmad Arif Faizin

Proker Departemen Dakwah dan Syiar 2013.pptx
Proker Departemen Dakwah dan Syiar 2013.pptxProker Departemen Dakwah dan Syiar 2013.pptx
Proker Departemen Dakwah dan Syiar 2013.pptxAhmad Arif Faizin
 
Proker bendahara al muhandis 2013.ppt
Proker bendahara al muhandis 2013.pptProker bendahara al muhandis 2013.ppt
Proker bendahara al muhandis 2013.pptAhmad Arif Faizin
 
Program Kerja Kaderisasi Al Muhandis 2013
Program Kerja Kaderisasi Al Muhandis 2013Program Kerja Kaderisasi Al Muhandis 2013
Program Kerja Kaderisasi Al Muhandis 2013Ahmad Arif Faizin
 
PPT KKN PEDURUNGAN 2016.pptx
PPT KKN PEDURUNGAN 2016.pptxPPT KKN PEDURUNGAN 2016.pptx
PPT KKN PEDURUNGAN 2016.pptxAhmad Arif Faizin
 
Dsc how google programs make great developer
Dsc how google programs make great developerDsc how google programs make great developer
Dsc how google programs make great developerAhmad Arif Faizin
 
Mockup Android Application Template Library
Mockup Android Application Template LibraryMockup Android Application Template Library
Mockup Android Application Template LibraryAhmad Arif Faizin
 
Mockup Android Application : Go bon
Mockup Android Application : Go bonMockup Android Application : Go bon
Mockup Android Application : Go bonAhmad Arif Faizin
 
Template Video Invitation Walimatul Ursy
Template Video Invitation Walimatul UrsyTemplate Video Invitation Walimatul Ursy
Template Video Invitation Walimatul UrsyAhmad Arif Faizin
 
Training Android Wonderkoding
Training Android WonderkodingTraining Android Wonderkoding
Training Android WonderkodingAhmad Arif Faizin
 
The Best Way to Become an Android Developer Expert with Android Jetpack
The Best Way to Become an Android Developer Expert  with Android JetpackThe Best Way to Become an Android Developer Expert  with Android Jetpack
The Best Way to Become an Android Developer Expert with Android JetpackAhmad Arif Faizin
 
Mengapa Perlu Belajar Coding?
Mengapa Perlu Belajar Coding?Mengapa Perlu Belajar Coding?
Mengapa Perlu Belajar Coding?Ahmad Arif Faizin
 
PPT Seminar TA Augmented Reality
PPT Seminar TA Augmented RealityPPT Seminar TA Augmented Reality
PPT Seminar TA Augmented RealityAhmad Arif Faizin
 

More from Ahmad Arif Faizin (20)

Proker Departemen Dakwah dan Syiar 2013.pptx
Proker Departemen Dakwah dan Syiar 2013.pptxProker Departemen Dakwah dan Syiar 2013.pptx
Proker Departemen Dakwah dan Syiar 2013.pptx
 
DKM_2013_BISMILLAH.pptx
DKM_2013_BISMILLAH.pptxDKM_2013_BISMILLAH.pptx
DKM_2013_BISMILLAH.pptx
 
Proker bendahara al muhandis 2013.ppt
Proker bendahara al muhandis 2013.pptProker bendahara al muhandis 2013.ppt
Proker bendahara al muhandis 2013.ppt
 
PPT raker EKONOMI 2013.pptx
PPT raker EKONOMI 2013.pptxPPT raker EKONOMI 2013.pptx
PPT raker EKONOMI 2013.pptx
 
Program Kerja Kaderisasi Al Muhandis 2013
Program Kerja Kaderisasi Al Muhandis 2013Program Kerja Kaderisasi Al Muhandis 2013
Program Kerja Kaderisasi Al Muhandis 2013
 
Departemen Mentoring.pptx
Departemen Mentoring.pptxDepartemen Mentoring.pptx
Departemen Mentoring.pptx
 
ANNISAA' 2013.pptx
ANNISAA' 2013.pptxANNISAA' 2013.pptx
ANNISAA' 2013.pptx
 
PPT KKN PEDURUNGAN 2016.pptx
PPT KKN PEDURUNGAN 2016.pptxPPT KKN PEDURUNGAN 2016.pptx
PPT KKN PEDURUNGAN 2016.pptx
 
Absis UNBK.pptx
Absis UNBK.pptxAbsis UNBK.pptx
Absis UNBK.pptx
 
Dsc how google programs make great developer
Dsc how google programs make great developerDsc how google programs make great developer
Dsc how google programs make great developer
 
First Gathering Sandec
First Gathering SandecFirst Gathering Sandec
First Gathering Sandec
 
Mockup Android Application Template Library
Mockup Android Application Template LibraryMockup Android Application Template Library
Mockup Android Application Template Library
 
Mockup Android Application : Go bon
Mockup Android Application : Go bonMockup Android Application : Go bon
Mockup Android Application : Go bon
 
Lomba Sayembara Logo
Lomba Sayembara LogoLomba Sayembara Logo
Lomba Sayembara Logo
 
Template Video Invitation Walimatul Ursy
Template Video Invitation Walimatul UrsyTemplate Video Invitation Walimatul Ursy
Template Video Invitation Walimatul Ursy
 
Training Android Wonderkoding
Training Android WonderkodingTraining Android Wonderkoding
Training Android Wonderkoding
 
The Best Way to Become an Android Developer Expert with Android Jetpack
The Best Way to Become an Android Developer Expert  with Android JetpackThe Best Way to Become an Android Developer Expert  with Android Jetpack
The Best Way to Become an Android Developer Expert with Android Jetpack
 
Mengapa Perlu Belajar Coding?
Mengapa Perlu Belajar Coding?Mengapa Perlu Belajar Coding?
Mengapa Perlu Belajar Coding?
 
PPT Seminar TA Augmented Reality
PPT Seminar TA Augmented RealityPPT Seminar TA Augmented Reality
PPT Seminar TA Augmented Reality
 
Android intermediatte Full
Android intermediatte FullAndroid intermediatte Full
Android intermediatte Full
 

MEMULAI PEMROGRAMAN DENGAN KOTLIN #4

  • 1. Memulai Pemrograman dengan Kotlin #4 Ahmad Arif Faizin Academy Content Writer Dicoding Indonesia x
  • 2.
  • 3.
  • 6. Class, Properties, & Function Blueprint untuk membuat Object fun main() { val garfield = Cat("Orange", 27, 46, 4) garfield.playing() garfield.sleep() garfield.eat() garfield.purring() }
  • 7. Getter & Setter class Animal{ var name: String = "Dicoding Miaw" get(){ println("Fungsi Getter terpanggil") return field } set(value){ println("Fungsi Setter terpanggil") field = value } } fun main(){ val dicodingCat = Animal() println("Nama: ${dicodingCat.name}" ) dicodingCat.name = "Goose" println("Nama: ${dicodingCat.name}") } /* output: Fungsi Getter terpanggil Nama: Dicoding Miaw Fungsi Setter terpanggil Fungsi Getter terpanggil Nama: Goose */
  • 11. Inheritance class Cat : Animal() { fun walk () { } override fun eat(){ } override fun sleep() { } class ChildClass : ParentClass() open class Animal(){ open fun eat(){ } open fun sleep(){ } } agar dapat diwariskan Cat menjadi turunan Animal
  • 12. Abstract Class Menghindari pembuatan instance dari kelas tersebut abstract class Animal( var name: String, var weight: Double, var age: Int, var isCarnivore: Boolean){ } fun main(){ val animal = Animal("dicoding animal", 2.6, 1, true) } *Cannot create an instance of an abstract class
  • 14. Overloading Membuat penamaan fungsi yang sama namun berbeda parameternya. class Animal(private var name: String) { fun eat() { println("$name makan!") } fun eat(typeFood: String) { println("$name memakan $typeFood!") } fun eat(typeFood: String, quantity: Double) { println("$name memakan $typeFood sebanyak $quantity grams!") } } fun main() { val dicodingCat = Animal("Dicoding Miaw") dicodingCat.eat() dicodingCat.eat("Ikan Tuna") dicodingCat.eat("Ikan Tuna", 450.0) }
  • 15. Interface Supaya kelas turunan harus memiliki semua sifat yang sama interface IFly { fun fly() } class Bird : IFly { override fun fly() { println("I flying without wings") } } harus ada
  • 16. Property Delegation Mengirimkan tugas pada kelas lain class DelegateName { private var value: String = "Default" operator fun getValue(classRef: Any?, property: KProperty<*>) : String { println("") return value } operator fun setValue(classRef: Any?, property: KProperty<*>, newValue: String){ println("") value = newValue } } class Animal { var name: String by DelegateName() } class Person { var name: String by DelegateName() }
  • 19. Apa itu Generic? dapat digunakan secara umum untuk berbagai macam tipe data Contoh yang sudah ada di Kotlin: val contributor = listOf("alfian","nrohmen","dimans","widy") val contributorAge = listOf(17, 27, 37, 48) val contributorSupport = listOf(true, false, false, true) *listOf bisa digunakan secara umum (tipe data apa aja)
  • 20. Cara Membuat Kelas Generic fun main() { val longArrayList = ArrayList<Long>() val firstLong = longArrayList[0] } class ArrayList<T> : List<T> { override fun get(index: Int): T { return this[index] } } interface List<T> { operator fun get(index: Int): T } Angle brackets <>
  • 21. Cara Membuat Fungsi Genericfun main() { val numbers = (1..100).toList() print(numbers.potong(1..10)) } fun <T> List<T>.potong(indices: IntRange): List<T> { if (indices.isEmpty()) return listOf() return this.subList(indices.first, indices.last + 1).toList() }
  • 22. Constraint Type Parameter Pembatasan tipe nilai yang akan disematkan ke dalam parameter. fun main() { val numbers = ListNumber<Long>() val numbers2 = ListNumber<Int>() val numbers3 = ListNumber<String>() error : Type argument is not within its bounds } class ListNumber<T : Number> : List<T>{ override fun get(index: Int): T { return this[index] } } interface List<T> { operator fun get(index: Int): T } fun main() { val numbers = listOf(1, 2, 3, 4, 5) numbers.sumNumber() val names = listOf("dicoding", "academy") names.sumNumber() // error : inferred type String is not a subtype of Number } fun <T : Number> List<T>.sumNumber() : T { /* .. */ }
  • 23. Variance Variance dibutuhkan ketika kita ingin membuat kelas atau fungsi generic dengan batasan yang tidak akan mengganggu dalam penggunaannya.
  • 24. Covariant tipe argument hanya dapat digunakan sebagai tipe nilai kembalian interface List<out E> : Collection<E> { operator fun get(index: Int): E } Contravariant tipe argument dapat digunakan sebagai argumen untuk sebuah fungsi interface Comparable<in T> { operator fun compareTo(other: T): Int }
  • 26. Aku lebih takut kepada orang yang melatih 1 buah jurus tendangan 1000 kali, daripada kepada orang yang berlatih 1000 jurus tendangan 1 kali". - Bruce Lee ’’ ’’
  • 27. You can find me at: ● Google : Ahmad Arif Faizin ● Discord : @arifaizin Thanks! Any questions?