{"id":32362,"date":"2025-10-20T22:41:04","date_gmt":"2025-10-20T19:41:04","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32362"},"modified":"2025-10-20T22:41:04","modified_gmt":"2025-10-20T19:41:04","slug":"kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/","title":{"rendered":"Kotlin&#8217;de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f"},"content":{"rendered":"<p><body><\/p>\n<h2>Kotlin&#8217;de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f<\/h2>\n<p>Kotlin, modern yaz\u0131l\u0131m geli\u015ftirmede verimlili\u011fi ve okunabilirli\u011fi art\u0131ran bir\u00e7ok g\u00fc\u00e7l\u00fc \u00f6zelli\u011fe sahiptir. Bu \u00f6zelliklerden biri de &#8220;kapsam fonksiyonlar\u0131&#8221;d\u0131r (scope functions). <code>let<\/code>, <code>run<\/code>, <code>also<\/code>, <code>apply<\/code> ve <code>with<\/code> gibi fonksiyonlar, belirli bir nesne \u00fczerinde bir kod blo\u011fu \u00e7al\u0131\u015ft\u0131rmam\u0131z\u0131 sa\u011flayarak kodumuzu daha k\u0131sa, daha anlaml\u0131 ve daha g\u00fcvenli hale getirir. Bu makalede, Kotlin&#8217;in bu be\u015f temel kapsam fonksiyonunu ayr\u0131nt\u0131l\u0131 bir \u015fekilde inceleyecek, aralar\u0131ndaki farklar\u0131, kullan\u0131m senaryolar\u0131n\u0131 ve do\u011fru fonksiyonu se\u00e7erken g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z gerekenleri ele alaca\u011f\u0131z.<\/p>\n<h3>Kapsam Fonksiyonlar\u0131 Nedir ve Neden Kullan\u0131l\u0131r?<\/h3>\n<p>Kapsam fonksiyonlar\u0131, bir nesnenin ba\u011flam\u0131nda bir lambda ifadesi (kod blo\u011fu) y\u00fcr\u00fctmek i\u00e7in tasarlanm\u0131\u015f genel ama\u00e7l\u0131 utility fonksiyonlard\u0131r. Her fonksiyon, al\u0131c\u0131 (receiver) olarak bir nesne al\u0131r ve bu nesne \u00fczerinde belirli i\u015flemler yap\u0131lmas\u0131na olanak tan\u0131r. Temel ama\u00e7lar\u0131 \u015funlard\u0131r:<\/p>\n<p>*   <strong>Okunabilirlik ve K\u0131sal\u0131k:<\/strong> Bir nesne \u00fczerinde birden fazla i\u015flem yaparken tekrarlayan nesne referanslar\u0131n\u0131 ortadan kald\u0131r\u0131r.<br \/>\n*   <strong>Null G\u00fcvenli\u011fi:<\/strong> \u00d6zellikle <code>let<\/code> fonksiyonu, nullable (null olabilen) nesnelerle g\u00fcvenli bir \u015fekilde \u00e7al\u0131\u015fmak i\u00e7in idealdir.<br \/>\n*   <strong>Kod Bloklar\u0131n\u0131 Gruplama:<\/strong> Belirli bir nesneye ait i\u015flemleri tek bir blok alt\u0131nda toplayarak kodun daha d\u00fczenli g\u00f6r\u00fcnmesini sa\u011flar.<br \/>\n*   <strong>Zincirleme (Chaining):<\/strong> Fonksiyonel programlama tarz\u0131nda, bir dizi i\u015flemi art arda zincirleyerek daha ak\u0131c\u0131 kod yazmaya olanak tan\u0131r.<\/p>\n<p>Bu fonksiyonlar\u0131n temel farkl\u0131l\u0131klar\u0131, kod blo\u011fu i\u00e7indeki ba\u011flam nesnesine nas\u0131l eri\u015fildi\u011finde (<code>this<\/code> veya <code>it<\/code>) ve fonksiyonun d\u00f6n\u00fc\u015f de\u011ferinde yatar. Bu iki anahtar nokta, hangi fonksiyonun hangi senaryo i\u00e7in en uygun oldu\u011funu belirler.<\/p>\n<h3>Kapsam Fonksiyonlar\u0131n\u0131n Temel Ay\u0131rt Edici \u00d6zellikleri<\/h3>\n<p>Her bir kapsam fonksiyonunu detayland\u0131rmadan \u00f6nce, onlar\u0131 birbirinden ay\u0131ran iki kritik \u00f6zelli\u011fi anlamak \u00f6nemlidir:<\/p>\n<p>1.  <strong>Ba\u011flam Nesnesine Eri\u015fim (<code>this<\/code> vs. <code>it<\/code>):<\/strong><br \/>\n    *   <strong><code>this<\/code> (al\u0131c\u0131 olarak):<\/strong> <code>run<\/code>, <code>apply<\/code>, <code>with<\/code> fonksiyonlar\u0131nda, lambda i\u00e7indeki ba\u011flam nesnesine <code>this<\/code> anahtar kelimesiyle veya do\u011frudan \u00fcye isimleriyle eri\u015filir. Bu, sanki o nesnenin i\u00e7indeymi\u015fsiniz gibi hissettirir ve \u00f6zellikle nesnenin metotlar\u0131n\u0131 veya \u00f6zelliklerini \u00e7a\u011f\u0131r\u0131rken kodu daha k\u0131sa yapar.<br \/>\n    *   <strong><code>it<\/code> (arg\u00fcman olarak):<\/strong> <code>let<\/code>, <code>also<\/code> fonksiyonlar\u0131nda, lambda i\u00e7indeki ba\u011flam nesnesine <code>it<\/code> ad\u0131nda tek bir arg\u00fcman olarak eri\u015filir. <code>it<\/code> ad\u0131, lambda arg\u00fcman\u0131 tek oldu\u011funda varsay\u0131lan olarak kullan\u0131l\u0131r, ancak daha a\u00e7\u0131klay\u0131c\u0131 bir isimle de\u011fi\u015ftirilebilir (<code>nesne -> ...<\/code>). Bu yakla\u015f\u0131m, nesne \u00fczerinde bir d\u00f6n\u00fc\u015f\u00fcm yaparken veya nesneyi ba\u015fka bir fonksiyona ge\u00e7irirken daha esnek olabilir.<\/p>\n<p>2.  <strong>D\u00f6n\u00fc\u015f De\u011feri:<\/strong><br \/>\n    *   <strong>Lambda \u0130fadesinin Sonucu:<\/strong> <code>let<\/code>, <code>run<\/code>, <code>with<\/code> fonksiyonlar\u0131, lambda blo\u011funun son ifadesinin sonucunu d\u00f6nd\u00fcr\u00fcr. Bu, bir nesneyi d\u00f6n\u00fc\u015ft\u00fcrmek veya bir dizi i\u015flemden sonra belirli bir de\u011feri hesaplamak istedi\u011finizde kullan\u0131\u015fl\u0131d\u0131r.<br \/>\n    *   <strong>Ba\u011flam Nesnesinin Kendisi:<\/strong> <code>apply<\/code>, <code>also<\/code> fonksiyonlar\u0131, \u00fczerinde \u00e7al\u0131\u015ft\u0131klar\u0131 ba\u011flam nesnesinin kendisini d\u00f6nd\u00fcr\u00fcr. Bu, nesneyi yap\u0131land\u0131rmak, ba\u015flatmak veya \u00fczerinde yan etkiler olu\u015fturmak ve ard\u0131ndan ayn\u0131 nesne \u00fczerinde ba\u015fka i\u015flemler yapmak istedi\u011finizde zincirleme i\u00e7in idealdir.<\/p>\n<p>\u015eimdi bu temel bilgileri g\u00f6z \u00f6n\u00fcnde bulundurarak her bir fonksiyona daha yak\u0131ndan bakal\u0131m.<\/p>\n<h3><code>let<\/code> Fonksiyonu<\/h3>\n<p><code>let<\/code> fonksiyonu, bir nesne \u00fczerinde belirli bir i\u015flem yapmak ve bu i\u015flem sonucunda yeni bir de\u011fer d\u00f6nd\u00fcrmek istedi\u011finizde kullan\u0131l\u0131r. En yayg\u0131n kullan\u0131m alanlar\u0131ndan biri null g\u00fcvenli\u011fidir.<\/p>\n<p>*   <strong>Ba\u011flam Nesnesi:<\/strong> <code>it<\/code> (lambda arg\u00fcman\u0131 olarak)<br \/>\n*   <strong>D\u00f6n\u00fc\u015f De\u011feri:<\/strong> Lambda blo\u011funun son ifadesinin sonucu<br \/>\n*   <strong>Extension Fonksiyon mu?<\/strong> Evet<\/p>\n<h4>Kullan\u0131m Senaryolar\u0131:<\/h4>\n<p>1.  <strong>Null G\u00fcvenli\u011fi (<code>?.let<\/code>):<\/strong> Bir nesnenin null olup olmad\u0131\u011f\u0131n\u0131 kontrol edip, sadece null de\u011filse belirli bir kod blo\u011funu \u00e7al\u0131\u015ft\u0131rmak i\u00e7in idealdir. <code>?.<\/code> (safe call) operat\u00f6r\u00fc ile birle\u015fti\u011finde \u00e7ok g\u00fc\u00e7l\u00fc bir yap\u0131 olu\u015fturur.<\/p>\n<pre><code class=\"language-kotlin\">var name: String? = \"Alice\"\n\n    \/\/ Sadece 'name' null de\u011filse \u00e7al\u0131\u015f\u0131r\n    name?.let {\n        println(\"Merhaba, $it!\") \/\/ it, name'in kendisidir\n        it.length \/\/ Son ifade, d\u00f6n\u00fc\u015f de\u011feri olur\n    } ?: run {\n        println(\"\u0130sim bo\u015f.\")\n        0 \/\/ name null ise d\u00f6n\u00fc\u015f de\u011feri\n    }\n\n    name = null\n    name?.let {\n        println(\"Merhaba, $it!\")\n    } ?: run {\n        println(\"\u0130sim bo\u015f.\") \/\/ Bu blok \u00e7al\u0131\u015f\u0131r\n    }<\/code><\/pre>\n<p>2.  <strong>Nesne D\u00f6n\u00fc\u015f\u00fcm\u00fc:<\/strong> Bir nesneyi al\u0131p, \u00fczerinde i\u015flemler yaparak farkl\u0131 bir t\u00fcre d\u00f6n\u00fc\u015ft\u00fcrmek veya farkl\u0131 bir de\u011fer \u00fcretmek.<\/p>\n<pre><code class=\"language-kotlin\">val numbers = listOf(1, 2, 3)\n    val squaredNumbers = numbers.map { it * it }.let {\n        \/\/ it, map'ten d\u00f6nen liste (List<Int>)\n        println(\"Karesi al\u0131nan say\u0131lar: $it\")\n        it.sum() \/\/ Listenin toplam\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr\n    }\n    println(\"Karesi al\u0131nan say\u0131lar\u0131n toplam\u0131: $squaredNumbers\") \/\/ \u00c7\u0131kt\u0131: 14 (1+4+9)<\/code><\/pre>\n<p>3.  <strong>Kapsam Belirleme:<\/strong> Bir de\u011fi\u015fkeni ge\u00e7ici olarak daha k\u0131sa bir kapsamda kullanmak.<\/p>\n<pre><code class=\"language-kotlin\">val message = \"Hello Kotlin\"\n    val result = message.let {\n        val upperCaseMessage = it.uppercase()\n        \"Mesaj\u0131n b\u00fcy\u00fck harfli hali: $upperCaseMessage\"\n    }\n    println(result) \/\/ \u00c7\u0131kt\u0131: Mesaj\u0131n b\u00fcy\u00fck harfli hali: HELLO KOTLIN<\/code><\/pre>\n<p><code>let<\/code> fonksiyonu, &#8220;bu nesne varsa, onunla \u015funu yap ve bana sonucunu ver&#8221; mant\u0131\u011f\u0131yla \u00e7al\u0131\u015f\u0131r. <code>it<\/code> kullanmas\u0131, lambda i\u00e7inde nesneyi ba\u015fka bir fonksiyona arg\u00fcman olarak ge\u00e7irirken veya d\u00f6n\u00fc\u015f\u00fcm yaparken esneklik sa\u011flar.<\/p>\n<h3><code>run<\/code> Fonksiyonu<\/h3>\n<p><code>run<\/code> fonksiyonu iki farkl\u0131 \u015fekilde kullan\u0131labilir: bir extension fonksiyon olarak ve bir non-extension fonksiyon olarak. Her iki durumda da lambda blo\u011funun sonucunu d\u00f6nd\u00fcr\u00fcr.<\/p>\n<p>*   <strong>Ba\u011flam Nesnesi:<\/strong> <code>this<\/code> (extension fonksiyon olarak kullan\u0131ld\u0131\u011f\u0131nda) veya do\u011frudan eri\u015fim (non-extension olarak kullan\u0131ld\u0131\u011f\u0131nda)<br \/>\n*   <strong>D\u00f6n\u00fc\u015f De\u011feri:<\/strong> Lambda blo\u011funun son ifadesinin sonucu<br \/>\n*   <strong>Extension Fonksiyon mu?<\/strong> Evet (veya non-extension olarak da kullan\u0131labilir)<\/p>\n<h4>Kullan\u0131m Senaryolar\u0131:<\/h4>\n<p>1.  <strong>Nesne Yap\u0131land\u0131rma ve Sonu\u00e7 Hesaplama (Extension <code>run<\/code>):<\/strong> Bir nesne \u00fczerinde birden fazla i\u015flem yap\u0131p, bu i\u015flemler sonucunda bir de\u011fer d\u00f6nd\u00fcrmek istedi\u011finizde <code>this<\/code> anahtar kelimesiyle eri\u015fim kolayl\u0131\u011f\u0131 sa\u011flar. \u00d6zellikle nesnenin metotlar\u0131n\u0131 veya \u00f6zelliklerini do\u011frudan \u00e7a\u011f\u0131rmak istedi\u011finizde <code>let<\/code>&#8216;teki <code>it<\/code>&#8216;e g\u00f6re daha okunabilir olabilir.<\/p>\n<pre><code class=\"language-kotlin\">class Person(var name: String, var age: Int)\n\n    val person = Person(\"Alice\", 30).run {\n        \/\/ this, Person nesnesidir\n        println(\"Ki\u015finin ad\u0131: $name, ya\u015f\u0131: $age\")\n        age += 1 \/\/ Ya\u015f\u0131 bir art\u0131r\n        \"Yeni ya\u015f: $age\" \/\/ Bu string d\u00f6n\u00fc\u015f de\u011feri olur\n    }\n    println(person) \/\/ \u00c7\u0131kt\u0131: Yeni ya\u015f: 31\n    \/\/ Orijinal nesne de de\u011fi\u015fmi\u015f olur\n    println(\"Ki\u015finin g\u00fcncel ya\u015f\u0131: ${Person(\"Alice\", 30).run { age += 1; age }}\")<\/code><\/pre>\n<p>2.  <strong>Kod Blo\u011fu Y\u00fcr\u00fctme (Non-extension <code>run<\/code>):<\/strong> Bir fonksiyonun i\u00e7inde veya bir s\u0131n\u0131fta, sadece bir kod blo\u011funu y\u00fcr\u00fctmek ve bu blo\u011fun sonucunu almak istedi\u011finizde kullan\u0131l\u0131r. Bu, JavaScript&#8217;teki IIFE (Immediately Invoked Function Expression) veya bir yard\u0131mc\u0131 fonksiyon gibi d\u00fc\u015f\u00fcn\u00fclebilir. \u00d6zellikle ge\u00e7ici de\u011fi\u015fkenler tan\u0131mlamak ve bunlar\u0131 d\u0131\u015far\u0131 s\u0131zd\u0131rmadan bir sonu\u00e7 elde etmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">val result = run {\n        val x = 10\n        val y = 20\n        x + y \/\/ Bu ifade d\u00f6n\u00fc\u015f de\u011feri olur\n    }\n    println(\"Sonu\u00e7: $result\") \/\/ \u00c7\u0131kt\u0131: Sonu\u00e7: 30\n\n    \/\/ Bir ko\u015fula ba\u011fl\u0131 olarak karma\u015f\u0131k bir de\u011fer hesaplama\n    val message = \"Hello\"\n    val greeting = run {\n        if (message.length > 5) {\n            \"Uzun mesaj: $message\"\n        } else {\n            \"K\u0131sa mesaj: $message\"\n        }\n    }\n    println(greeting) \/\/ \u00c7\u0131kt\u0131: K\u0131sa mesaj: Hello<\/code><\/pre>\n<p><code>run<\/code> fonksiyonu, &#8220;bu nesne \u00fczerinde bu kod blo\u011funu \u00e7al\u0131\u015ft\u0131r ve bana sonucunu ver&#8221; veya &#8220;bu kod blo\u011funu \u00e7al\u0131\u015ft\u0131r ve bana sonucunu ver&#8221; mant\u0131\u011f\u0131yla \u00e7al\u0131\u015f\u0131r. <code>this<\/code> kullanmas\u0131, \u00f6zellikle birden fazla \u00fcye \u00e7a\u011fr\u0131s\u0131 yap\u0131ld\u0131\u011f\u0131nda <code>obj.member1(); obj.member2();<\/code> yerine do\u011frudan <code>member1(); member2();<\/code> yazmay\u0131 m\u00fcmk\u00fcn k\u0131larak kodu daha derli toplu yapar.<\/p>\n<h3><code>apply<\/code> Fonksiyonu<\/h3>\n<p><code>apply<\/code> fonksiyonu, bir nesneyi yap\u0131land\u0131rmak veya ba\u015flatmak i\u00e7in kullan\u0131l\u0131r. Lambda blo\u011fu i\u00e7inde nesnenin \u00f6zelliklerini de\u011fi\u015ftirebilir veya metotlar\u0131n\u0131 \u00e7a\u011f\u0131rabilirsiniz. En \u00f6nemli \u00f6zelli\u011fi, \u00fczerinde i\u015flem yap\u0131lan nesnenin kendisini d\u00f6nd\u00fcrmesidir.<\/p>\n<p>*   <strong>Ba\u011flam Nesnesi:<\/strong> <code>this<\/code> (lambda al\u0131c\u0131s\u0131 olarak)<br \/>\n*   <strong>D\u00f6n\u00fc\u015f De\u011feri:<\/strong> Ba\u011flam nesnesinin kendisi (<code>this<\/code>)<br \/>\n*   <strong>Extension Fonksiyon mu?<\/strong> Evet<\/p>\n<h4>Kullan\u0131m Senaryolar\u0131:<\/h4>\n<p>1.  <strong>Nesne Yap\u0131land\u0131rma\/Ba\u015flatma:<\/strong> Yeni bir nesne olu\u015fturduktan hemen sonra veya mevcut bir nesneyi g\u00fcncellemek i\u00e7in birden fazla \u00f6zelli\u011fini veya metodunu ayarlamak.<\/p>\n<pre><code class=\"language-kotlin\">data class User(var name: String = \"\", var email: String = \"\")\n\n    val newUser = User().apply {\n        \/\/ this, User nesnesidir\n        name = \"Ahmet\"\n        email = \"ahmet@example.com\"\n        \/\/ Di\u011fer yap\u0131land\u0131rma ayarlar\u0131\n    }\n    println(\"Yeni kullan\u0131c\u0131: $newUser\") \/\/ \u00c7\u0131kt\u0131: Yeni kullan\u0131c\u0131: User(name=Ahmet, email=ahmet@example.com)<\/code><\/pre>\n<p>2.  <strong>Zincirleme Yap\u0131land\u0131rma:<\/strong> Bir nesne \u00fczerinde birden fazla yap\u0131land\u0131rma i\u015flemi yap\u0131p, bu yap\u0131land\u0131rmadan sonra ayn\u0131 nesneyi d\u00f6nd\u00fcrd\u00fc\u011f\u00fc i\u00e7in ba\u015fka bir fonksiyona zincirlemek.<\/p>\n<pre><code class=\"language-kotlin\">val textView = android.widget.TextView(context).apply {\n        text = \"Hello Android\"\n        textSize = 16f\n        setTextColor(android.graphics.Color.BLUE)\n    }.also {\n        \/\/ Yap\u0131land\u0131r\u0131lm\u0131\u015f nesne \u00fczerinde bir yan etki (loglama gibi)\n        println(\"TextView yap\u0131land\u0131r\u0131ld\u0131: ${it.text}\")\n    }\n    \/\/ textView art\u0131k yap\u0131land\u0131r\u0131lm\u0131\u015f bir TextView nesnesidir.<\/code><\/pre>\n<p><code>apply<\/code> fonksiyonu, &#8220;bu nesneye bu de\u011fi\u015fiklikleri uygula ve sonra bana bu nesnenin kendisini geri ver&#8221; mant\u0131\u011f\u0131yla \u00e7al\u0131\u015f\u0131r. <code>this<\/code> kullanmas\u0131, <code>obj.property = value<\/code> yerine do\u011frudan <code>property = value<\/code> yazmay\u0131 sa\u011flayarak nesne ba\u015flatma kodunu \u00e7ok daha temiz ve okunabilir hale getirir.<\/p>\n<h3><code>also<\/code> Fonksiyonu<\/h3>\n<p><code>also<\/code> fonksiyonu, <code>apply<\/code> ile benzer \u015fekilde, \u00fczerinde i\u015flem yap\u0131lan nesnenin kendisini d\u00f6nd\u00fcr\u00fcr. Ancak, <code>apply<\/code>&#8216;dan farkl\u0131 olarak, lambda blo\u011fu i\u00e7inde ba\u011flam nesnesine <code>it<\/code> ile eri\u015fir. Genellikle bir nesne \u00fczerinde yan etkiler (logging, debugging, ek listeye ekleme vb.) olu\u015fturmak istedi\u011finizde, ancak nesnenin kendisini de\u011fi\u015ftirmek istemedi\u011finizde kullan\u0131l\u0131r.<\/p>\n<p>*   <strong>Ba\u011flam Nesnesi:<\/strong> <code>it<\/code> (lambda arg\u00fcman\u0131 olarak)<br \/>\n*   <strong>D\u00f6n\u00fc\u015f De\u011feri:<\/strong> Ba\u011flam nesnesinin kendisi (<code>this<\/code>)<br \/>\n*   <strong>Extension Fonksiyon mu?<\/strong> Evet<\/p>\n<h4>Kullan\u0131m Senaryolar\u0131:<\/h4>\n<p>1.  <strong>Yan Etkiler (Side Effects):<\/strong> Bir nesne \u00fczerinde i\u015flem yaparken, bu nesnenin durumunu de\u011fi\u015ftirmeden ek bir i\u015flem (\u00f6rne\u011fin loglama veya bir listeye ekleme) yapmak.<\/p>\n<pre><code class=\"language-kotlin\">val numbers = mutableListOf(\"one\", \"two\", \"three\")\n    val resultList = numbers\n        .also { println(\"Liste elemanlar\u0131 eklenmeden \u00f6nce: $it\") }\n        .add(\"four\") \/\/ Listeyi de\u011fi\u015ftirir\n        .also { println(\"Liste elemanlar\u0131 eklendikten sonra: $it\") } \/\/ it, hala numbers listesidir\n        .toList() \/\/ mutable listeyi immutable listeye d\u00f6n\u00fc\u015ft\u00fcr\u00fcr\n\n    println(\"Sonu\u00e7 listesi: $resultList\") \/\/ \u00c7\u0131kt\u0131: [one, two, three, four]<\/code><\/pre>\n<p>    Yukar\u0131daki \u00f6rnekte <code>add(\"four\")<\/code> \u00e7a\u011fr\u0131s\u0131 <code>numbers<\/code> listesini de\u011fi\u015ftirir ve <code>add<\/code> fonksiyonu <code>Boolean<\/code> d\u00f6nd\u00fcrd\u00fc\u011f\u00fc i\u00e7in zincirleme bozulur. Do\u011fru kullan\u0131m <code>numbers.also { it.add(\"four\") }<\/code> \u015feklinde olmal\u0131d\u0131r. <code>also<\/code>&#8216;nun d\u00f6n\u00fc\u015f de\u011feri <code>numbers<\/code>&#8216;\u0131n kendisi oldu\u011fu i\u00e7in zincirleme devam edebilir.<\/p>\n<pre><code class=\"language-kotlin\">val numbers2 = mutableListOf(\"one\", \"two\", \"three\")\n    val resultList2 = numbers2\n        .also { println(\"Liste elemanlar\u0131 eklenmeden \u00f6nce: $it\") }\n        .also { it.add(\"four\") } \/\/ Listeyi de\u011fi\u015ftirir, it hala numbers2'dir\n        .also { println(\"Liste elemanlar\u0131 eklendikten sonra: $it\") }\n        .toList()\n\n    println(\"Sonu\u00e7 listesi 2: $resultList2\") \/\/ \u00c7\u0131kt\u0131: [one, two, three, four]<\/code><\/pre>\n<p>2.  <strong>Ara Durumu G\u00f6zlemleme:<\/strong> Bir zincirleme i\u015flem s\u0131ras\u0131nda, ara bir ad\u0131mda nesnenin durumunu kontrol etmek veya loglamak.<\/p>\n<pre><code class=\"language-kotlin\">val name = \"Kotlin\"\n    val processedName = name\n        .uppercase()\n        .also { println(\"B\u00fcy\u00fck harfe \u00e7evrildi: $it\") } \/\/ it, \"KOTLIN\"\n        .reversed()\n        .also { println(\"Tersine \u00e7evrildi: $it\") } \/\/ it, \"NILTOK\"\n        .plus(\"!\")\n\n    println(\"Nihai isim: $processedName\") \/\/ \u00c7\u0131kt\u0131: NILTOK!<\/code><\/pre>\n<p><code>also<\/code> fonksiyonu, &#8220;bu nesne \u00fczerinde i\u015flem yaparken, <em>ayr\u0131ca<\/em> \u015funu da yap ve sonra bana bu nesnenin kendisini geri ver&#8221; mant\u0131\u011f\u0131yla \u00e7al\u0131\u015f\u0131r. <code>it<\/code> kullanmas\u0131, lambda i\u00e7inde nesneyi a\u00e7\u0131k\u00e7a belirtmek gerekti\u011finde (\u00f6rne\u011fin, bir metodu \u00e7a\u011f\u0131r\u0131rken) <code>apply<\/code>&#8216;a g\u00f6re biraz daha fazla yaz\u0131m gerektirse de, yan etki olu\u015fturma niyetini daha a\u00e7\u0131k bir \u015fekilde ifade eder.<\/p>\n<h3><code>with<\/code> Fonksiyonu<\/h3>\n<p><code>with<\/code> fonksiyonu, di\u011ferlerinden \u00f6nemli bir farkla ayr\u0131l\u0131r: bir extension fonksiyonu de\u011fildir. Bir nesneyi ilk arg\u00fcman olarak al\u0131r ve bu nesne \u00fczerinde bir kod blo\u011fu \u00e7al\u0131\u015ft\u0131r\u0131r. Lambda blo\u011funun sonucunu d\u00f6nd\u00fcr\u00fcr.<\/p>\n<p>*   <strong>Ba\u011flam Nesnesi:<\/strong> <code>this<\/code> (lambda al\u0131c\u0131s\u0131 olarak)<br \/>\n*   <strong>D\u00f6n\u00fc\u015f De\u011feri:<\/strong> Lambda blo\u011funun son ifadesinin sonucu<br \/>\n*   <strong>Extension Fonksiyon mu?<\/strong> Hay\u0131r (bir utility fonksiyonudur)<\/p>\n<h4>Kullan\u0131m Senaryolar\u0131:<\/h4>\n<p>1.  <strong>Mevcut Bir Nesne \u00dczerinde Birden Fazla \u0130\u015flem:<\/strong> Bir nesneyi zaten elinizde tutuyorsan\u0131z ve bu nesne \u00fczerinde birden fazla metot \u00e7a\u011f\u0131rmak veya \u00f6zelli\u011fini de\u011fi\u015ftirmek istiyorsan\u0131z, <code>with<\/code> fonksiyonu kodunuzu \u00e7ok daha okunabilir hale getirir. \u00d6zellikle nesne \u00fczerinde zincirleme yapmaya ihtiyac\u0131n\u0131z yoksa ve sadece bir dizi i\u015flemi gruplamak istiyorsan\u0131z idealdir.<\/p>\n<pre><code class=\"language-kotlin\">class Configuration(var host: String, var port: Int)\n\n    val config = Configuration(\"localhost\", 8080)\n\n    val description = with(config) {\n        \/\/ this, config nesnesidir\n        println(\"Host: $host, Port: $port\")\n        host = \"192.168.1.1\" \/\/ Nesneyi de\u011fi\u015ftir\n        port = 9000\n        \"Yeni konfig\u00fcrasyon: $host:$port\" \/\/ Bu string d\u00f6n\u00fc\u015f de\u011feri olur\n    }\n    println(description) \/\/ \u00c7\u0131kt\u0131: Yeni konfig\u00fcrasyon: 192.168.1.1:9000\n    println(\"G\u00fcncel konfig\u00fcrasyon: ${config.host}:${config.port}\") \/\/ \u00c7\u0131kt\u0131: G\u00fcncel konfig\u00fcrasyon: 192.168.1.1:9000<\/code><\/pre>\n<p>2.  <strong>Okunabilirli\u011fi Art\u0131rma:<\/strong> Bir nesneye ait bir\u00e7ok \u00f6zelli\u011fe veya metoda eri\u015firken, her seferinde nesne ad\u0131n\u0131 tekrar yazmaktan ka\u00e7\u0131narak kodu daha derli toplu hale getirir.<\/p>\n<pre><code class=\"language-kotlin\">fun processOrder(order: Order) {\n        with(order) {\n            println(\"Sipari\u015f No: $orderId\")\n            println(\"M\u00fc\u015fteri: $customerName\")\n            items.forEach { item ->\n                println(\"- ${item.name} (${item.quantity} adet)\")\n            }\n            calculateTotalPrice()\n            sendConfirmationEmail()\n        }\n    }\n    \/\/ <code>order.orderId<\/code>, <code>order.customerName<\/code> vs. yazmak yerine do\u011frudan eri\u015fim.<\/code><\/pre>\n<p><code>with<\/code> fonksiyonu, &#8220;bu nesneyle birlikte, \u015fu i\u015flemleri yap ve bana sonucunu ver&#8221; mant\u0131\u011f\u0131yla \u00e7al\u0131\u015f\u0131r. Extension fonksiyon olmamas\u0131, genellikle bir nesneyi bir fonksiyona arg\u00fcman olarak verdi\u011finiz ve o fonksiyon i\u00e7inde o nesne \u00fczerinde bir dizi i\u015flem yapmak istedi\u011finiz durumlarda tercih edilir.<\/p>\n<h3>Kapsam Fonksiyonlar\u0131n\u0131n Kar\u015f\u0131la\u015ft\u0131rmas\u0131<\/h3>\n<p>A\u015fa\u011f\u0131daki tablo, be\u015f kapsam fonksiyonunun temel \u00f6zelliklerini \u00f6zetlemektedir:<\/p>\n<p>| Fonksiyon | Ba\u011flam Nesnesine Eri\u015fim | D\u00f6n\u00fc\u015f De\u011feri            | Extension Fonksiyon mu? | Temel Kullan\u0131m Senaryosu                               |<br \/>\n| :&#8212;&#8212;&#8211; | :&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- | :&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- | :&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- | :&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- |<br \/>\n| <code>let<\/code>     | <code>it<\/code>                    | Lambda sonucu           | Evet                    | Null g\u00fcvenli\u011fi, nesne d\u00f6n\u00fc\u015f\u00fcm\u00fc, ge\u00e7ici kapsam         |<br \/>\n| <code>run<\/code>     | <code>this<\/code>                  | Lambda sonucu           | Evet (veya non-ext)     | Nesne yap\u0131land\u0131rma ve sonu\u00e7 hesaplama, kod blo\u011fu y\u00fcr\u00fctme |<br \/>\n| <code>apply<\/code>   | <code>this<\/code>                  | Ba\u011flam nesnesi (<code>this<\/code>) | Evet                    | Nesne yap\u0131land\u0131rma, ba\u015flatma, zincirleme              |<br \/>\n| <code>also<\/code>    | <code>it<\/code>                    | Ba\u011flam nesnesi (<code>this<\/code>) | Evet                    | Yan etkiler (loglama, debugging), ara durum g\u00f6zlemleme |<br \/>\n| <code>with<\/code>    | <code>this<\/code>                  | Lambda sonucu           | Hay\u0131r                   | Mevcut nesne \u00fczerinde birden fazla i\u015flemi gruplama    |<\/p>\n<h3>Do\u011fru Fonksiyonu Se\u00e7mek<\/h3>\n<p>Hangi kapsam fonksiyonunu kullanaca\u011f\u0131n\u0131za karar verirken, temel olarak iki soruya yan\u0131t aramal\u0131s\u0131n\u0131z:<\/p>\n<p>1.  <strong>Lambda i\u00e7indeki ba\u011flam nesnesine nas\u0131l eri\u015fmek istiyorum?<\/strong> (<code>this<\/code> mi, <code>it<\/code> mi?)<br \/>\n    *   E\u011fer nesnenin metotlar\u0131n\u0131 ve \u00f6zelliklerini do\u011frudan isimleriyle \u00e7a\u011f\u0131rmak istiyorsan\u0131z (<code>this<\/code> gibi), <code>run<\/code>, <code>apply<\/code>, <code>with<\/code> uygun olabilir.<br \/>\n    *   E\u011fer nesneyi lambda arg\u00fcman\u0131 olarak a\u00e7\u0131k\u00e7a belirtmek, onu ba\u015fka bir fonksiyona ge\u00e7irmek veya daha belirgin bir isim vermek istiyorsan\u0131z (<code>it<\/code> gibi), <code>let<\/code>, <code>also<\/code> uygun olabilir.<\/p>\n<p>2.  <strong>Fonksiyonun ne d\u00f6nd\u00fcrmesini istiyorum?<\/strong><br \/>\n    *   E\u011fer lambda blo\u011funun son ifadesinin sonucunu d\u00f6nd\u00fcrmek istiyorsan\u0131z, <code>let<\/code>, <code>run<\/code>, <code>with<\/code> uygun olabilir.<br \/>\n    *   E\u011fer \u00fczerinde i\u015flem yap\u0131lan nesnenin kendisini d\u00f6nd\u00fcrmek istiyorsan\u0131z (zincirleme i\u00e7in), <code>apply<\/code>, <code>also<\/code> uygun olabilir.<\/p>\n<p>Bu sorulara ek olarak, fonksiyonun as\u0131l amac\u0131n\u0131 da g\u00f6z \u00f6n\u00fcnde bulundurun:<\/p>\n<p>*   <strong><code>let<\/code>:<\/strong> Bir nesnenin null olmad\u0131\u011f\u0131n\u0131 garanti etmek ve onu d\u00f6n\u00fc\u015ft\u00fcrmek istedi\u011finizde.<br \/>\n*   <strong><code>run<\/code>:<\/strong> Bir nesneyi yap\u0131land\u0131r\u0131p hemen ard\u0131ndan bir sonu\u00e7 hesaplamak veya sadece bir kod blo\u011fu \u00e7al\u0131\u015ft\u0131rmak istedi\u011finizde.<br \/>\n*   <strong><code>apply<\/code>:<\/strong> Bir nesneyi yap\u0131land\u0131rmak, ba\u015flatmak ve ard\u0131ndan ayn\u0131 nesneyi d\u00f6nd\u00fcrerek zincirleme yapmak istedi\u011finizde.<br \/>\n*   <strong><code>also<\/code>:<\/strong> Bir nesne \u00fczerinde yan etkiler olu\u015fturmak (loglama gibi) ve nesnenin kendisini d\u00f6nd\u00fcrerek ak\u0131\u015f\u0131 bozmamak istedi\u011finizde.<br \/>\n*   <strong><code>with<\/code>:<\/strong> Zaten elinizde olan bir nesne \u00fczerinde birden fazla i\u015flemi gruplamak ve bir sonu\u00e7 elde etmek istedi\u011finizde (extension fonksiyon olmayan durumlar i\u00e7in).<\/p>\n<p><strong>\u00d6zetle:<\/strong><br \/>\n*   <strong>Yap\u0131land\u0131rma ve zincirleme:<\/strong> <code>apply<\/code><br \/>\n*   <strong>Yap\u0131land\u0131rma ve sonu\u00e7 alma:<\/strong> <code>run<\/code> (extension)<br \/>\n*   <strong>Yan etki ve zincirleme:<\/strong> <code>also<\/code><br \/>\n*   <strong>Null g\u00fcvenli\u011fi ve d\u00f6n\u00fc\u015f\u00fcm:<\/strong> <code>let<\/code><br \/>\n*   <strong>Mevcut nesne \u00fczerinde gruplama ve sonu\u00e7 alma:<\/strong> <code>with<\/code><\/p>\n<h3>Yayg\u0131n Hatalar ve En \u0130yi Uygulamalar<\/h3>\n<p>Kapsam fonksiyonlar\u0131 g\u00fc\u00e7l\u00fc ara\u00e7lar olsa da, yanl\u0131\u015f veya a\u015f\u0131r\u0131 kullan\u0131ld\u0131\u011f\u0131nda kodun okunabilirli\u011fini d\u00fc\u015f\u00fcrebilir.<\/p>\n<p>1.  <strong>A\u015f\u0131r\u0131 Kullan\u0131m:<\/strong> Her yerde kapsam fonksiyonu kullanmak kodu daha k\u0131sa yapabilir, ancak her zaman daha okunabilir yapmaz. Basit atamalar veya tek bir metot \u00e7a\u011fr\u0131s\u0131 i\u00e7in gereksiz yere kapsam fonksiyonu kullanmaktan ka\u00e7\u0131n\u0131n.<\/p>\n<pre><code class=\"language-kotlin\">\/\/ K\u00f6t\u00fc: Gereksiz let\n    val name = user?.let { it.name }\n    \/\/ \u0130yi: Do\u011frudan eri\u015fim\n    val name = user?.name<\/code><\/pre>\n<p>2.  <strong>\u0130\u00e7 \u0130\u00e7e Kapsam Fonksiyonlar\u0131:<\/strong> Birden fazla kapsam fonksiyonunu i\u00e7 i\u00e7e kullanmak, <code>this<\/code> ve <code>it<\/code> referanslar\u0131n\u0131n kar\u0131\u015fmas\u0131na ve kodun anla\u015f\u0131lmas\u0131n\u0131 zorla\u015ft\u0131rmas\u0131na neden olabilir. M\u00fcmk\u00fcn oldu\u011funca ka\u00e7\u0131n\u0131n veya \u00e7ok dikkatli kullan\u0131n.<\/p>\n<pre><code class=\"language-kotlin\">\/\/ Kar\u0131\u015f\u0131k olabilir\n    person?.let { outerPerson ->\n        outerPerson.address?.let { innerAddress ->\n            println(\"Ki\u015fi: ${outerPerson.name}, Adres: ${innerAddress.city}\")\n        }\n    }<\/code><\/pre>\n<p>3.  <strong>D\u00f6n\u00fc\u015f De\u011ferini Anlamak:<\/strong> Her fonksiyonun d\u00f6n\u00fc\u015f de\u011ferini iyi anlamak \u00f6nemlidir. Yanl\u0131\u015f d\u00f6n\u00fc\u015f de\u011feri beklentisi, hatalara yol a\u00e7abilir. \u00d6rne\u011fin, <code>apply<\/code> ve <code>also<\/code>&#8216;nun her zaman ba\u011flam nesnesini d\u00f6nd\u00fcrd\u00fc\u011f\u00fcn\u00fc unutmay\u0131n.<\/p>\n<p>4.  <strong><code>this<\/code> ve <code>it<\/code> Kar\u0131\u015f\u0131kl\u0131\u011f\u0131:<\/strong> \u00d6zellikle <code>run<\/code> ve <code>let<\/code> veya <code>apply<\/code> ve <code>also<\/code> aras\u0131nda se\u00e7im yaparken, lambda i\u00e7inde ba\u011flam nesnesine nas\u0131l eri\u015fece\u011finizi netle\u015ftirin. <code>this<\/code> daha k\u0131sa kod sa\u011flarken, <code>it<\/code> bazen daha net bir ayr\u0131m sunabilir.<\/p>\n<p>5.  <strong>A\u00e7\u0131klay\u0131c\u0131 \u0130simlendirme:<\/strong> <code>it<\/code> yerine daha a\u00e7\u0131klay\u0131c\u0131 bir isim kullanmak, \u00f6zellikle karma\u015f\u0131k lambda ifadelerinde okunabilirli\u011fi art\u0131rabilir.<\/p>\n<pre><code class=\"language-kotlin\">myObject?.let { obj ->\n        obj.doSomething()\n    }<\/code><\/pre>\n<h3>Sonu\u00e7<\/h3>\n<p>Kotlin&#8217;in <code>let<\/code>, <code>run<\/code>, <code>also<\/code>, <code>apply<\/code> ve <code>with<\/code> kapsam fonksiyonlar\u0131, geli\u015ftiricilere daha k\u0131sa, daha anlaml\u0131 ve daha g\u00fcvenli kod yazma imkan\u0131 sunar. Her bir fonksiyonun kendine \u00f6zg\u00fc bir kullan\u0131m amac\u0131 ve d\u00f6n\u00fc\u015f de\u011feri vard\u0131r. Bu farkl\u0131l\u0131klar\u0131 anlamak ve do\u011fru senaryoda do\u011fru fonksiyonu se\u00e7mek, Kotlin kodunuzun kalitesini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131racakt\u0131r.<\/p>\n<p>Bu fonksiyonlar, \u00f6zellikle null de\u011ferlerle \u00e7al\u0131\u015f\u0131rken, nesneleri yap\u0131land\u0131r\u0131rken, yan etkiler olu\u015ftururken veya belirli bir kod blo\u011funu bir nesnenin ba\u011flam\u0131nda y\u00fcr\u00fct\u00fcrken son derece faydal\u0131d\u0131r. Pratik yaparak ve farkl\u0131 senaryolarda deneyerek, bu g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 ustal\u0131kla kullanmay\u0131 \u00f6\u011frenebilir ve Kotlin&#8217;in sundu\u011fu t\u00fcm avantajlardan faydalanabilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Kotlin&#8217;de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f\nKotlin, modern yaz\u0131l\u0131m geli\u015ftirmede verimlili\u011fi ve okunabi","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-32362","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kotlin&#039;de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kotlin&#039;de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f\" \/>\n<meta property=\"og:description\" content=\"Kotlin&#039;de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f Kotlin, modern yaz\u0131l\u0131m geli\u015ftirmede verimlili\u011fi ve okunabi\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-20T19:41:04+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kotlin&#8217;de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f\",\"datePublished\":\"2025-10-20T19:41:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/\"},\"wordCount\":2307,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/\",\"name\":\"Kotlin'de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-20T19:41:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kotlin&#8217;de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kotlin'de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/","og_locale":"tr_TR","og_type":"article","og_title":"Kotlin'de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f","og_description":"Kotlin'de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f Kotlin, modern yaz\u0131l\u0131m geli\u015ftirmede verimlili\u011fi ve okunabi","og_url":"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-20T19:41:04+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kotlin&#8217;de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f","datePublished":"2025-10-20T19:41:04+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/"},"wordCount":2307,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/","url":"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/","name":"Kotlin'de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-20T19:41:04+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kotlinde-kapsam-fonksiyonlari-let-run-also-apply-with-derinlemesine-bir-bakis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kotlin&#8217;de Kapsam Fonksiyonlar\u0131: let, run, also, apply, with Derinlemesine Bir Bak\u0131\u015f"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32362","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32362"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32362\/revisions"}],"predecessor-version":[{"id":32363,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32362\/revisions\/32363"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32362"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32362"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}