func sleep() { print("\(name) sedang tidur !") } }
Extension Function
fun Int.square(): Int { return this * this }
extension Int { func square() -> Int { return self * self } }
Extension Variable
val String.length: Int get() = this.length
extension String { var length: Int { return self.count } }
Visibility Modifier
public class PublicClass {} internal class InternalClass {} protected class ProtectedClass {} private class PrivateClass {}
public class PublicClass {} internal class InternalClass {} fileprivate class FilePrivateClass {} private class PrivateClass {}
Late init
lateinit var text: String
var text: String?
Lazy Initialization
val text: String by lazy { "Hello" }
lazy var text: String = "Hello"
Primary Constructor
class Person(val name: String)
struct Person { var name: String }
// OR
struct Person { var name: String init(name: String) { self.name = name } }
Secondary Constructor
class Person { var name: String
constructor(name: String) { this.name = name }
constructor() { this.name = "John Doe" } }
class Person { var name: String init(name: String) { self.name = name } convenience init() { self.init(name: "John Doe") } }
Default Constructor
class Person(val name: String = "John Doe")
struct Person { var name: String = "John Doe" }
// OR
struct Person { var name: String init(name: String = "John Doe") { self.name = name } }
Property Delegation
import kotlin.reflect.KProperty
class DelegateName { private var value: String = "Default"
operator fun getValue(classRef: Any?, property: KProperty<*>) : String { println("Fungsi ini sama seperti getter untuk properti ${property.name} pada class $classRef") return value }
operator fun setValue(classRef: Any?, property: KProperty<*>, newValue: String){ println("Fungsi ini sama seperti setter untuk properti ${property.name} pada class $classRef") println("Nilai ${property.name} dari: $value akan berubah menjadi $newValue") value = newValue } }
class Animal { var name: String by DelegateName() }
@propertyWrapper struct DelegateName { private var value: String
var wrappedValue: String { get { print("Fungsi ini sama seperti getter untuk properti \(propertyName)") return value } set { print("Fungsi ini sama seperti setter untuk properti \(propertyName)") print("Nilai \(propertyName) dari: \(value) akan berubah menjadi \(newValue)") value = newValue } }