Kotlin Scope Functions Nedir?

0
1102
Kotlin Scope Functions
Kotlin Scope Functions

Scope fonksiyonlar, kod karmaşasını önlemek ve kodu sadeleştirmek adına tasarlanmış fonksiyonlardır.

Android uygulama geliştirirken Kotlin’le geliştirmenin Java’ya göre scope fonskiyonlar yönünden fazlasıyla kolaylığı vardır.

Bir objeyi scope fonksiyonları kullanarak çağırdığınızda, geçerli obje için geçici bir scope (alan – kurtarılmış bölge) oluşturulur. Bu scope içerisinde, objenin ismi olmadan, objenin attribute’larına veya metodlarına yani üyelerine erişilebilir. Kotlin’de 5 adet scope fonksiyon mevcuttur.

  • apply
  • let
  • run
  • also
  • with

apply

Apply, değer dönmeyen, öncelikli hedefi objenin üyeleri için atama işlemi yapan kod blokları için kullanılır. Apply için yaygın senaryo, obje konfigürasyon işlemleridir.

textViewAccountTitle.visibility = View.VISIBLE
textViewAccountTitle.text = "Account Title"
textViewAccountTitle.isAllCaps = false
textViewAccountTitle.textSize  = 25f

apply fonksiyonu kullanarak da aynı işlemler gerçekleştirilebilir.

textViewAccountTitle.apply {
visibility = View.VISIBLE
text = "Account Title"
isAllCaps = false
textSize = 25f
}

let

Let, non-null değerleri çalıştırmak için kullanılır. Null olmayan bir nesnede işlemleri gerçekleştirmek için, ?. (nullable kontrolü) operatörünü kullanılır ve let’in içinde “it” ile aksiyonları çağırılır.

val cardNumber: String? = "12345"
fun printCard() {
    cardNumber?.let {
        print("The length of the card number is ${it.length}")
    }
}

run

Run’ın 2 kullanım şekli vardır. 1. kullanım şekli aşağıdadır.

val service = MultiportService("https://example.kotlinlang.org", 80)
val result = service.run {
port = 8080
query(prepareRequest() + " to port $port")
}

val letResult = service.let {
it.port = 8080
it.query(it.prepareRequest() + " to port ${it.port}")
}
printCard()

run(), bu kullanımında let() ile aynı şeyi yapar. Farklı oldukları kısım aldıkları parametredir. run, this parametresini; let ise it parametresini alır. run(), lambda ifadeniz hem obje yaratmayı hem de return edilecek değerin hesaplanması gerektiğinde kullanılabilir.

2. kullanım şekli ise aşağıdaki gibidir.

val hexNumberRegex = run {
val digits = "0-9"
val hexDigits = "A-Fa-f"
val sign = "+-"
Regex("[$sign]?[$digits$hexDigits]+")
}
for (match in hexNumberRegex.findAll("+1234 -FFFF not-a-number")) {
println(match.value)
}

run scope fonksiyonun 2. kullanımı da yukarıda ki gibi non-extension fonksiyon kullanımıdır. non-extension olan run, farklı kod satırlarının bir arada çalıştırılması gerektiğinde kullanılabilir.

also

Also, objeyi değişime uğratmayanloglamadebug bilgilerini print etme gibi ek aksiyonlar için kullanılabilir.

cardDrawer.apply {
    visibility = View.VISIBLE
    setBehaviour(CardDrawerView.Behaviour.RESPONSIVE)
    show(config)
    setInternalPadding(0)
    setArrowEnabled(miniCard.showChevron)
}.also {
    Log.d("TAG", "Card drawer initialized with $it.behaviour")
}

Also çağrıları; “Ve ayrıca aşağıdakileri yap.” şeklinde okunabilir.

with

With çağrıları; “Bu object ile, aşağıdakileri gerçekleştir.” şeklinde okunabilir.

With lambda sonucu sağlamaksızın, ilgili objeler üzerinde fonksiyonları çağırmak için kullanılabilir.

val numbers = mutableListOf("one", "two", "three")
with(numbers) {
println("'with' is called with argument $this")
println("It contains $size elements")
}

With için diğer bir durum, bir özelliği olan properties veya bir değeri hesaplamak için kullanılan bir fonksiyon olan yardımcı bir obje tanımlamaktır.

val numbers = mutableListOf("one", "two", "three")
val firstAndLast = with(numbers) {
"The first element is ${first()}," +
" the last element is ${last()}"
}
println(firstAndLast)

Kaynakça;

https://kotlinlang.org/docs/reference/scope-functions.html

https://proandroiddev.com/kotlin-scope-functions-made-simple-c59b97a04ca2

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz