Scope Functions Nedir?

Tuğçe Aras
4 min readSep 27, 2022

--

Selamlar 👋, bir diğer fonksiyon türü olan Scope Funcitons’ların ne olduğu ve ne zaman kullanılması gerektiğini gelin inceleyelim.

🔹 Scope Functions

  • Kod okunabilirliğini arttırır. Daha temiz bir görünüm sağlar.
  • 5 adet Scope fonksiyonu bulunmaktadır. Bunlar:

👉 let, run, also, apply, with ‘tir.

  • Arka planda let, run, also ve apply’ın extension function olduğunu görüyoruz. Ancak with değildir. 😮 Neden? (Aşağıda bu duruma değinilecek.)
  • Herhangi bir primitive değişken üzerinde ya da bir class’ın referansı üzerinde uygulanabilir. Örneğin;

Yazım şekilleri :

  • user.let{ }
  • user.apply{ }
  • user.also{ }
  • user.run{ } ya da run{ } — > neden iki şekilde de yazılabildiğine değineceğiz.
  • with(user){ } — > diğerlerinde göre neden bu şekilde yazıldığına değineceğiz.

❗️ NOT: Scope fonksiyonlarını kullandığımız zaman bize ya it ya da this döndüğünü görürüz. Scope fonksiyonu içerisinde bir işlem yapılacağı zaman artık bize dönen it ya da this’i kullanarak işlemleri yapmamız gerekir.

❗️ ❗ ️Gelelim bu this ve it nereden nasıl geliyor? Bunun için bu fonksiyonların arka planda nasıl tutulduklarını bakmamız gerekir. Ancak bakmadan önce şu tanımı yapabiliriz.

Eğer değişkeni Higher Order fonksiyonun beklenen parametresinin önüne extension olarak yazarsanız this, parametre içerisine yazılırsa da it oluyor. Ne demek şimdi bu? Kafam karıştı 😕

İki Scope fonksiyonu üzerinde bunu açıklayalım.

  • let

Parametre içinde olduğundan it oluyor.

  • apply

Extension olarak yazıldığından this oluyor.

🔹 Scope fonksiyonlarını sırasıyla ele almaya başlayalım.

1️⃣ let

  • Nullable değişkenlerde ya da nesnesi oluşturulmuş değişkenler üzerinde null check yapmak için kullanılan bir fonksiyondur.
  • let fonksiyonunun son satırına ne yazarsak bize o veri tipindeki değeri bir sonraki Scope fonksiyonunda döndürür. Şöyle ki;
  • let için arka planda extension function olarak görüldüğünü söylemiştik. Bakalım:

2️⃣ with

  • Gelelim neden with’i diğer Scope fonksiyolarına göre farklı yazıyoruz. Örneğin;

user.with{ } değil de with(user){ } şeklinde yazıyoruz? Çünkü with arka planda diğer Scope fonksiyonlarına göre extension function şeklinde tutulmaz bundan dolayı classReferansı.with{} şeklinde bir kullanım yapamayız.

Arka planda nasıl tutulduğuna bakacak olursak:

Önceki Scope fonksiyonlarında dikkat ettiyseniz T.let ya da T.apply şeklinde extension function olarak yazıldığını görürsünüz. Ancak with direkt düz bir şekilde yazıldığından → with(){ } şeklinde bir kullanımı vardır.

  • let’ de olduğu gibi with’ de de bir geri dönüş değeri vardır.
  • Peki with ne zaman kullanılır?

Elimizde oluşturulmuş bir nesne varsa ve bu nesne Nullable değilse yani bir değer atanmışsa o zaman kullanılır.

3️⃣ run

  • let ve with gibi run’ nın da bir geri dönüş değeri vardır.
  • İki şekilde de yazılabilir demiştik. Hatırlayalım:

user.run{ } ya da direkt run{ } peki neden? Çünkü;

Bu Scope fonksiyonunun genel amacı fonksiyon çağırmaktır. Yani mesela let fonksiyonumuz var ve içerisinde case’lerimiz bulunuyor. let fonksiyonundaki değişken üzerinden fonksiyonlar çağrılacağı zaman devreye → user.let{ }.run{ } şeklinde yazım kullanılıyor. Ancak run ile let veya başka Scope fonksiyonu dışında işlemler de yapılabilmekte. Bu durumda devreye .run{} değil de direkt run{} şeklinde yazım kullanılmaktadır.

  • Bu Scope fonksiyonu da arka planda extension function olarak görülmektedir.

4️⃣ also

  • Bir önceki Scope fonksiyonlarından farklı olrak also’ nun geri dönüş değeri yoktur. Son satırına ne yazılırsa yazılsın herhangi bir şeyi return etmemektedir. Arka planda Unit olarak durmaktadır.
  • Genelde let ya da with’in sonuna koyulmaktadır. En başta kullanılmaz.
  • let ya da with’in sonuna koyulmasının nedeni şudur:

Üstündeki Scope fonksiyonları içerisinde yapılan işlemler dışında ayrıca bir business logic’im varsa bu durumda also kullanılır. also yine değişken üzerinde işlemler yapar. (run’ da böyle bir kısıtlama yoktu o yüzden ikinci bir yazım şekli vardı.) Değişken manipüle edilebilir.

  • also’da yine aynı şekilde arka planda extension function olarak gözükmektedir.

5️⃣ apply

  • Elimizde değişkenin olmadığı durumda kullanılan bir Scope fonksiyondur. Yeni bir değişken oluşturmamız gerekir. Halihazırda önceden oluşturulmuş değişken üzerinde apply kullanılmamalıdır.
  • Değişkenlerin ilk değer atamalarında kullanılan bir Scope fonksiyondur.
  • also gibi herhangi bir geri dönüş değeri yoktur.
  • apply’da aynı şekilde arka planda extension function olarak karşımıza çıkmaktadır.

gif kaynak: The End Airplane Movie GIF by filmeditor — Find & Share on GIPHY (2022). Available at: https://giphy.com/gifs/filmeditor-the-end-airplane-movie-l4FAPaGGeB7D1LfIA

--

--

Tuğçe Aras
Tuğçe Aras

Written by Tuğçe Aras

Android Developer at Şekerbank T.A.Ş. 💻💚 | https://bio.link/tugcearas

No responses yet