SlideShare a Scribd company logo
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

Why The Free Monad isn't Free
Why The Free Monad isn't FreeWhy The Free Monad isn't Free
Why The Free Monad isn't Free
Kelley Robinson
 
modul algoritma Bab 1
modul algoritma Bab 1modul algoritma Bab 1
modul algoritma Bab 1
Eko Widyanto Napitupulu
 
technik kompilasi
technik kompilasitechnik kompilasi
technik kompilasi
mastnie
 
Kumpulan program-pascal
Kumpulan program-pascalKumpulan program-pascal
Kumpulan program-pascal
Hana Zainab Mukarromah
 
Contoh program buble sort dalam pascal
Contoh program buble sort dalam pascalContoh program buble sort dalam pascal
Contoh program buble sort dalam pascal
Simon Patabang
 
8. Multi List (Struktur Data)
8. Multi List (Struktur Data)8. Multi List (Struktur Data)
8. Multi List (Struktur Data)
Kelinci Coklat
 
Laporan praktikum modul 4 (pemrograman applet)
Laporan praktikum modul 4 (pemrograman applet)Laporan praktikum modul 4 (pemrograman applet)
Laporan praktikum modul 4 (pemrograman applet)
Devi Apriansyah
 
Artificial Intelligence - A Star
Artificial Intelligence - A StarArtificial Intelligence - A Star
Artificial Intelligence - A Star
Jayner Wennyi
 
Bab 8 rekursif
Bab 8 rekursifBab 8 rekursif
Bab 8 rekursif
arii_manroe
 
Bab 8. Fungsi Transenden ( Kalkulus 1 )
Bab 8. Fungsi Transenden ( Kalkulus 1 )Bab 8. Fungsi Transenden ( Kalkulus 1 )
Bab 8. Fungsi Transenden ( Kalkulus 1 )
Kelinci Coklat
 
Utilizing kotlin flows in an android application
Utilizing kotlin flows in an android applicationUtilizing kotlin flows in an android application
Utilizing kotlin flows in an android application
Seven Peaks Speaks
 
[PBO] Pertemuan 3 - Pengenalan Pemrograman Berbasis Objek
[PBO] Pertemuan 3 - Pengenalan Pemrograman Berbasis Objek[PBO] Pertemuan 3 - Pengenalan Pemrograman Berbasis Objek
[PBO] Pertemuan 3 - Pengenalan Pemrograman Berbasis Objek
rizki adam kurniawan
 
Pertemuan 1 konsep dasar pemrograman berorientasi objek
Pertemuan 1 konsep dasar pemrograman berorientasi objekPertemuan 1 konsep dasar pemrograman berorientasi objek
Pertemuan 1 konsep dasar pemrograman berorientasi objek
I Putu Arya Dharmaadi
 
PostgreSQL Stored-procedure
PostgreSQL Stored-procedurePostgreSQL Stored-procedure
PostgreSQL Stored-procedureAmmar Shadiq
 
Laporan praktikum modul i
Laporan praktikum modul iLaporan praktikum modul i
Laporan praktikum modul i
Devi Apriansyah
 
Stack atau tumpukan
Stack atau tumpukanStack atau tumpukan
Stack atau tumpukan
Tenia Wahyuningrum
 
Kisah Dua Sejoli: Arduino & Python
Kisah Dua Sejoli: Arduino & PythonKisah Dua Sejoli: Arduino & Python
Kisah Dua Sejoli: Arduino & Python
Ridwan Fadjar
 
Algoritma pencarian lintasan jalur terpendek
Algoritma pencarian lintasan jalur terpendekAlgoritma pencarian lintasan jalur terpendek
Algoritma pencarian lintasan jalur terpendek
Laili Wahyunita
 
Pertemuan 3 activity
Pertemuan 3 activityPertemuan 3 activity
Pertemuan 3 activity
heriakj
 

What's hot (20)

Why The Free Monad isn't Free
Why The Free Monad isn't FreeWhy The Free Monad isn't Free
Why The Free Monad isn't Free
 
modul algoritma Bab 1
modul algoritma Bab 1modul algoritma Bab 1
modul algoritma Bab 1
 
technik kompilasi
technik kompilasitechnik kompilasi
technik kompilasi
 
Kumpulan program-pascal
Kumpulan program-pascalKumpulan program-pascal
Kumpulan program-pascal
 
Contoh program buble sort dalam pascal
Contoh program buble sort dalam pascalContoh program buble sort dalam pascal
Contoh program buble sort dalam pascal
 
8. Multi List (Struktur Data)
8. Multi List (Struktur Data)8. Multi List (Struktur Data)
8. Multi List (Struktur Data)
 
Laporan praktikum modul 4 (pemrograman applet)
Laporan praktikum modul 4 (pemrograman applet)Laporan praktikum modul 4 (pemrograman applet)
Laporan praktikum modul 4 (pemrograman applet)
 
Artificial Intelligence - A Star
Artificial Intelligence - A StarArtificial Intelligence - A Star
Artificial Intelligence - A Star
 
Bab 8 rekursif
Bab 8 rekursifBab 8 rekursif
Bab 8 rekursif
 
Bab 8. Fungsi Transenden ( Kalkulus 1 )
Bab 8. Fungsi Transenden ( Kalkulus 1 )Bab 8. Fungsi Transenden ( Kalkulus 1 )
Bab 8. Fungsi Transenden ( Kalkulus 1 )
 
Materi 6. perulangan
Materi 6. perulanganMateri 6. perulangan
Materi 6. perulangan
 
Utilizing kotlin flows in an android application
Utilizing kotlin flows in an android applicationUtilizing kotlin flows in an android application
Utilizing kotlin flows in an android application
 
[PBO] Pertemuan 3 - Pengenalan Pemrograman Berbasis Objek
[PBO] Pertemuan 3 - Pengenalan Pemrograman Berbasis Objek[PBO] Pertemuan 3 - Pengenalan Pemrograman Berbasis Objek
[PBO] Pertemuan 3 - Pengenalan Pemrograman Berbasis Objek
 
Pertemuan 1 konsep dasar pemrograman berorientasi objek
Pertemuan 1 konsep dasar pemrograman berorientasi objekPertemuan 1 konsep dasar pemrograman berorientasi objek
Pertemuan 1 konsep dasar pemrograman berorientasi objek
 
PostgreSQL Stored-procedure
PostgreSQL Stored-procedurePostgreSQL Stored-procedure
PostgreSQL Stored-procedure
 
Laporan praktikum modul i
Laporan praktikum modul iLaporan praktikum modul i
Laporan praktikum modul i
 
Stack atau tumpukan
Stack atau tumpukanStack atau tumpukan
Stack atau tumpukan
 
Kisah Dua Sejoli: Arduino & Python
Kisah Dua Sejoli: Arduino & PythonKisah Dua Sejoli: Arduino & Python
Kisah Dua Sejoli: Arduino & Python
 
Algoritma pencarian lintasan jalur terpendek
Algoritma pencarian lintasan jalur terpendekAlgoritma pencarian lintasan jalur terpendek
Algoritma pencarian lintasan jalur terpendek
 
Pertemuan 3 activity
Pertemuan 3 activityPertemuan 3 activity
Pertemuan 3 activity
 

Similar to Dts x dicoding #4 memulai pemrograman kotlin

Algotitma dan Struktur Algoritma - Collection
Algotitma dan Struktur Algoritma - CollectionAlgotitma dan Struktur Algoritma - Collection
Algotitma dan Struktur Algoritma - CollectionSiska Amelia
 
Bab8.array
Bab8.array Bab8.array
Bab8.array
Isman Isman
 
PPT Functional dan OOP Programming.pptx
PPT Functional dan OOP Programming.pptxPPT Functional dan OOP Programming.pptx
PPT Functional dan OOP Programming.pptx
AliefMuhammadAbdilla
 
tugas struktur data
tugas struktur datatugas struktur data
tugas struktur data
Hidayatullah Aldy
 
Resume praktikum 6 stack
Resume praktikum 6 stackResume praktikum 6 stack
Resume praktikum 6 stack
Deprilana Ego Prakasa
 
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
 
Affirmation App.pdf
Affirmation App.pdfAffirmation App.pdf
Affirmation App.pdf
AryBudiWarsito1
 
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
 
Pengantar R
Pengantar RPengantar R
Pengantar R
Afdan Rojabi
 
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
Prasetyo Adi
 
Laporan praktikum jawaban 10 algoritma(1)
Laporan praktikum jawaban 10 algoritma(1)Laporan praktikum jawaban 10 algoritma(1)
Laporan praktikum jawaban 10 algoritma(1)
Polytechnic State Semarang
 
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 13
Ekha Cahya Nugraha
 
Pertemuan V
Pertemuan VPertemuan V
Pertemuan V
Putra Andry
 

Similar to Dts x dicoding #4 memulai pemrograman kotlin (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
 
Array
ArrayArray
Array
 
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
 

More from Ahmad Arif Faizin

Guideline Submission GitHub BFAA Dicoding
Guideline Submission GitHub BFAA DicodingGuideline Submission GitHub BFAA Dicoding
Guideline Submission GitHub BFAA Dicoding
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.pptx
Ahmad Arif Faizin
 
DKM_2013_BISMILLAH.pptx
DKM_2013_BISMILLAH.pptxDKM_2013_BISMILLAH.pptx
DKM_2013_BISMILLAH.pptx
Ahmad Arif Faizin
 
Proker bendahara al muhandis 2013.ppt
Proker bendahara al muhandis 2013.pptProker bendahara al muhandis 2013.ppt
Proker bendahara al muhandis 2013.ppt
Ahmad Arif Faizin
 
PPT raker EKONOMI 2013.pptx
PPT raker EKONOMI 2013.pptxPPT raker EKONOMI 2013.pptx
PPT raker EKONOMI 2013.pptx
Ahmad Arif Faizin
 
Program Kerja Kaderisasi Al Muhandis 2013
Program Kerja Kaderisasi Al Muhandis 2013Program Kerja Kaderisasi Al Muhandis 2013
Program Kerja Kaderisasi Al Muhandis 2013
Ahmad Arif Faizin
 
Departemen Mentoring.pptx
Departemen Mentoring.pptxDepartemen Mentoring.pptx
Departemen Mentoring.pptx
Ahmad Arif Faizin
 
ANNISAA' 2013.pptx
ANNISAA' 2013.pptxANNISAA' 2013.pptx
ANNISAA' 2013.pptx
Ahmad Arif Faizin
 
PPT KKN PEDURUNGAN 2016.pptx
PPT KKN PEDURUNGAN 2016.pptxPPT KKN PEDURUNGAN 2016.pptx
PPT KKN PEDURUNGAN 2016.pptx
Ahmad Arif Faizin
 
Absis UNBK.pptx
Absis UNBK.pptxAbsis UNBK.pptx
Absis UNBK.pptx
Ahmad 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 developer
Ahmad Arif Faizin
 
First Gathering Sandec
First Gathering SandecFirst Gathering Sandec
First Gathering Sandec
Ahmad Arif Faizin
 
Mockup Android Application Template Library
Mockup Android Application Template LibraryMockup Android Application Template Library
Mockup Android Application Template Library
Ahmad Arif Faizin
 
Mockup Android Application : Go bon
Mockup Android Application : Go bonMockup Android Application : Go bon
Mockup Android Application : Go bon
Ahmad Arif Faizin
 
Lomba Sayembara Logo
Lomba Sayembara LogoLomba Sayembara Logo
Lomba Sayembara Logo
Ahmad Arif Faizin
 
Template Video Invitation Walimatul Ursy
Template Video Invitation Walimatul UrsyTemplate Video Invitation Walimatul Ursy
Template Video Invitation Walimatul Ursy
Ahmad Arif Faizin
 
Training Android Wonderkoding
Training Android WonderkodingTraining Android Wonderkoding
Training Android Wonderkoding
Ahmad 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 Jetpack
Ahmad 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 Reality
Ahmad Arif Faizin
 

More from Ahmad Arif Faizin (20)

Guideline Submission GitHub BFAA Dicoding
Guideline Submission GitHub BFAA DicodingGuideline Submission GitHub BFAA Dicoding
Guideline Submission GitHub BFAA Dicoding
 
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
 

Dts x dicoding #4 memulai pemrograman kotlin

  • 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?