{"id":36008,"date":"2025-12-06T18:40:45","date_gmt":"2025-12-06T15:40:45","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=36008"},"modified":"2025-12-06T18:40:45","modified_gmt":"2025-12-06T15:40:45","slug":"kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/","title":{"rendered":"Kotlin S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: Derinlemesine Bir Bak\u0131\u015f"},"content":{"rendered":"<p><body><\/p>\n<h2>Kotlin S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: Derinlemesine Bir Bak\u0131\u015f<\/h2>\n<h3>Kotlin&#8217;e Giri\u015f ve S\u0131n\u0131flar\u0131n \u00d6nemi<\/h3>\n<p>Kotlin, JetBrains taraf\u0131ndan geli\u015ftirilen ve \u00f6zellikle Android uygulama geli\u015ftirme d\u00fcnyas\u0131nda h\u0131zla pop\u00fclerlik kazanan, modern, statik tipli bir programlama dilidir. Java Sanal Makinesi (JVM) \u00fczerinde \u00e7al\u0131\u015fabilmesi, Java ile tam uyumlu olmas\u0131 ve daha k\u0131sa, okunabilir kod yazma imkan\u0131 sunmas\u0131 gibi \u00f6zellikleriyle dikkat \u00e7eker. Kotlin&#8217;in nesne y\u00f6nelimli programlama (OOP) paradigmas\u0131n\u0131 benimsemesi, s\u0131n\u0131flar\u0131 ve bu s\u0131n\u0131flar\u0131n nesnelerini olu\u015fturmak i\u00e7in kullan\u0131lan yap\u0131c\u0131 metotlar\u0131 dilin temel yap\u0131 ta\u015flar\u0131ndan biri haline getirir. Bu makalede, Kotlin s\u0131n\u0131flar\u0131n\u0131n nas\u0131l tan\u0131mland\u0131\u011f\u0131n\u0131, \u00f6zelliklerini ve \u00f6zellikle yap\u0131c\u0131 metotlar\u0131n (primary ve secondary constructors) detayl\u0131 kullan\u0131m\u0131n\u0131, miras alma durumlar\u0131ndaki davran\u0131\u015flar\u0131n\u0131 ve en iyi uygulamalar\u0131n\u0131 derinlemesine inceleyece\u011fiz.<\/p>\n<p>Nesne y\u00f6nelimli programlaman\u0131n merkezinde, ger\u00e7ek d\u00fcnyadaki varl\u0131klar\u0131 modellemek i\u00e7in kullan\u0131lan &#8220;s\u0131n\u0131flar&#8221; bulunur. Bir s\u0131n\u0131f, belirli bir t\u00fcrdeki nesnelerin \u00f6zelliklerini (veri) ve davran\u0131\u015flar\u0131n\u0131 (metotlar) tan\u0131mlayan bir \u015fablondur. Bu \u015fablonu kullanarak olu\u015fturulan her bir \u00f6rne\u011fe &#8220;nesne&#8221; veya &#8220;\u00f6rnek&#8221; (instance) denir. Kotlin&#8217;de s\u0131n\u0131flar, verileri kaps\u00fcllemek, kod tekrar\u0131n\u0131 azaltmak ve daha mod\u00fcler, s\u00fcrd\u00fcr\u00fclebilir uygulamalar geli\u015ftirmek i\u00e7in vazge\u00e7ilmezdir. Bir nesne olu\u015fturuldu\u011funda, onun ba\u015flang\u0131\u00e7 durumunu ayarlamak, yani gerekli ba\u015flang\u0131\u00e7 de\u011ferlerini atamak i\u00e7in yap\u0131c\u0131 metotlar devreye girer. Kotlin&#8217;in yap\u0131c\u0131 metotlara yakla\u015f\u0131m\u0131, Java&#8217;dan farkl\u0131 ve daha esnektir, bu da onu anlamay\u0131 kritik hale getirir.<\/p>\n<h3>Kotlin S\u0131n\u0131flar\u0131n\u0131n Temelleri<\/h3>\n<p>Kotlin&#8217;de bir s\u0131n\u0131f tan\u0131mlamak olduk\u00e7a basittir ve <code>class<\/code> anahtar kelimesiyle ba\u015flar. Bir s\u0131n\u0131f, \u00f6zellikler (properties) ve metotlar (functions) i\u00e7erebilir.<\/p>\n<h4>S\u0131n\u0131f Tan\u0131mlama<\/h4>\n<p>Bir s\u0131n\u0131f, <code>class<\/code> anahtar kelimesiyle tan\u0131mlan\u0131r. En basit haliyle, bir s\u0131n\u0131f bo\u015f olabilir:<\/p>\n<pre><code class=\"language-kotlin\">class Kisiler {\n    \/\/ S\u0131n\u0131f\u0131n g\u00f6vdesi buraya gelir\n}<\/code><\/pre>\n<p>Bu <code>Kisiler<\/code> s\u0131n\u0131f\u0131 hen\u00fcz hi\u00e7bir \u00f6zellik veya metot i\u00e7ermemektedir. Ancak, bu haliyle bile <code>Kisiler<\/code> tipinde nesneler olu\u015fturulabilir:<\/p>\n<pre><code class=\"language-kotlin\">val kisi1 = Kisiler() \/\/ Kisiler s\u0131n\u0131f\u0131ndan bir nesne olu\u015fturuldu<\/code><\/pre>\n<h4>\u00d6zellikler (Properties) ve Alanlar (Fields)<\/h4>\n<p>S\u0131n\u0131flar\u0131n temel amac\u0131, veriyi kaps\u00fcllemektir. Bu veriler, s\u0131n\u0131f\u0131n &#8220;\u00f6zellikleri&#8221; olarak adland\u0131r\u0131l\u0131r. Kotlin&#8217;de \u00f6zellikler, <code>val<\/code> (salt okunur) veya <code>var<\/code> (de\u011fi\u015ftirilebilir) anahtar kelimeleriyle tan\u0131mlan\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">class Urun {\n    var ad: String = \"Varsay\u0131lan \u00dcr\u00fcn\"\n    val fiyat: Double = 0.0\n    var stokAdedi: Int = 0\n}<\/code><\/pre>\n<p>Yukar\u0131daki <code>Urun<\/code> s\u0131n\u0131f\u0131nda <code>ad<\/code>, <code>fiyat<\/code> ve <code>stokAdedi<\/code> ad\u0131nda \u00fc\u00e7 \u00f6zellik bulunmaktad\u0131r. <code>ad<\/code> ve <code>stokAdedi<\/code> <code>var<\/code> ile tan\u0131mland\u0131\u011f\u0131 i\u00e7in de\u011ferleri sonradan de\u011fi\u015ftirilebilirken, <code>fiyat<\/code> <code>val<\/code> oldu\u011fu i\u00e7in sadece ba\u015flang\u0131\u00e7ta atanabilir ve sonradan de\u011fi\u015ftirilemez.<\/p>\n<p>Kotlin&#8217;de \u00f6zellikler, arka planda otomatik olarak olu\u015fturulan &#8220;alanlar&#8221; (backing fields) ve &#8220;eri\u015fimciler&#8221; (accessors &#8211; getter\/setter) ile desteklenir. <code>val<\/code> \u00f6zellikler i\u00e7in sadece bir getter, <code>var<\/code> \u00f6zellikler i\u00e7in ise hem getter hem de setter otomatik olarak olu\u015fturulur. Bu, Java&#8217;daki boilerplate kodunu (getter\/setter metotlar\u0131n\u0131 elle yazma zorunlulu\u011funu) ortadan kald\u0131r\u0131r. Gerekirse, bu eri\u015fimcileri \u00f6zel mant\u0131kla \u00f6zelle\u015ftirmek de m\u00fcmk\u00fcnd\u00fcr:<\/p>\n<pre><code class=\"language-kotlin\">class Dikdortgen(val en: Int, val boy: Int) {\n    val alan: Int\n        get() = en * boy \/\/ 'alan' \u00f6zelli\u011fi i\u00e7in \u00f6zel getter\n}\n\nval dikdortgen = Dikdortgen(5, 10)\nprintln(dikdortgen.alan) \/\/ \u00c7\u0131kt\u0131: 50<\/code><\/pre>\n<h3>Kotlin Yap\u0131c\u0131 Metotlar\u0131 (Constructors)<\/h3>\n<p>Yap\u0131c\u0131 metotlar, bir s\u0131n\u0131f\u0131n yeni bir nesnesi olu\u015fturuldu\u011funda \u00e7a\u011fr\u0131lan \u00f6zel metotlard\u0131r. Temel amac\u0131, nesnenin ba\u015flang\u0131\u00e7 durumunu ayarlamak, yani \u00f6zelliklerine ilk de\u011ferlerini atamakt\u0131r. Kotlin, Java&#8217;dan farkl\u0131 olarak, birincil (primary) ve ikincil (secondary) yap\u0131c\u0131 metotlar olmak \u00fczere iki t\u00fcr yap\u0131c\u0131 metot sunar.<\/p>\n<h4>Yap\u0131c\u0131 Metot Nedir?<\/h4>\n<p>Bir yap\u0131c\u0131 metot, s\u0131n\u0131f\u0131n ad\u0131yla ayn\u0131 ada sahip olan ve d\u00f6n\u00fc\u015f tipi olmayan bir metot olarak d\u00fc\u015f\u00fcn\u00fclebilir. Kotlin&#8217;de bu durum biraz farkl\u0131d\u0131r. Yap\u0131c\u0131 metotlar, s\u0131n\u0131f\u0131n \u00f6rneklendi\u011fi anda (yani <code>Urun()<\/code> gibi bir \u00e7a\u011fr\u0131 yap\u0131ld\u0131\u011f\u0131nda) otomatik olarak \u00e7al\u0131\u015f\u0131r. Nesnenin \u00f6zelliklerini ba\u015flatmak, gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 sa\u011flamak veya nesnenin ge\u00e7erli bir durumda oldu\u011fundan emin olmak i\u00e7in kullan\u0131l\u0131rlar.<\/p>\n<h4>Birincil Yap\u0131c\u0131 Metot (Primary Constructor)<\/h4>\n<p>Kotlin&#8217;de bir s\u0131n\u0131f\u0131n birincil yap\u0131c\u0131 metodu, s\u0131n\u0131f ba\u015fl\u0131\u011f\u0131n\u0131n bir par\u00e7as\u0131 olarak tan\u0131mlan\u0131r. Bu, s\u0131n\u0131f ad\u0131ndan sonra parantez i\u00e7inde belirtilen parametrelerdir.<\/p>\n<pre><code class=\"language-kotlin\">class Musteri(val id: String, var ad: String, var soyad: String) {\n    \/\/ S\u0131n\u0131f\u0131n g\u00f6vdesi\n}<\/code><\/pre>\n<p>Yukar\u0131daki <code>Musteri<\/code> s\u0131n\u0131f\u0131nda, <code>(val id: String, var ad: String, var soyad: String)<\/code> k\u0131sm\u0131 birincil yap\u0131c\u0131 metottur. Bu yap\u0131c\u0131, \u00fc\u00e7 parametre al\u0131r: <code>id<\/code>, <code>ad<\/code> ve <code>soyad<\/code>. Bu parametreler, do\u011frudan s\u0131n\u0131f\u0131n \u00f6zellikleri olarak tan\u0131mlanm\u0131\u015ft\u0131r (<code>val<\/code> veya <code>var<\/code> ile). Bu, Kotlin&#8217;in \u00f6nemli bir \u00f6zelli\u011fidir; yap\u0131c\u0131 parametrelerini do\u011frudan \u00f6zellik olarak tan\u0131mlayarak boilerplate kodunu azalt\u0131r\u0131z.<\/p>\n<p>E\u011fer birincil yap\u0131c\u0131 metot herhangi bir a\u00e7\u0131klama (eri\u015fim belirleyici veya <code>@Inject<\/code> gibi annotation) i\u00e7ermiyorsa, <code>constructor<\/code> anahtar kelimesi atlanabilir:<\/p>\n<pre><code class=\"language-kotlin\">class Kitap(val baslik: String, val yazar: String, var sayfaSayisi: Int)<\/code><\/pre>\n<p>Ancak, e\u011fer yap\u0131c\u0131ya bir eri\u015fim belirleyici (\u00f6rne\u011fin <code>private<\/code>) veya herhangi bir annotation eklemek istersek, <code>constructor<\/code> anahtar kelimesini kullanmak zorunludur:<\/p>\n<pre><code class=\"language-kotlin\">class Kasiyer private constructor(val kimlikNo: String) {\n    \/\/ ...\n}<\/code><\/pre>\n<p>Birincil yap\u0131c\u0131 metot, s\u0131n\u0131f g\u00f6vdesinde herhangi bir kod i\u00e7ermez. Yap\u0131c\u0131ya ek mant\u0131k eklemek, parametreleri do\u011frulamak veya ba\u015fka ba\u015flatma i\u015flemleri yapmak i\u00e7in <code>init<\/code> bloklar\u0131 kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">class Kullanici(val ad: String, val yas: Int) {\n    init {\n        println(\"Kullan\u0131c\u0131 $ad olu\u015fturuldu. Ya\u015f\u0131: $yas\")\n        require(yas >= 0) { \"Ya\u015f negatif olamaz.\" } \/\/ Parametre do\u011frulama\n    }\n\n    \/\/ ... di\u011fer \u00f6zellikler ve metotlar\n}\n\nval user1 = Kullanici(\"Ali\", 30) \/\/ \u00c7\u0131kt\u0131: Kullan\u0131c\u0131 Ali olu\u015fturuldu. Ya\u015f\u0131: 30\n\/\/ val user2 = Kullanici(\"Ay\u015fe\", -5) \/\/ IllegalArgumentException f\u0131rlat\u0131r<\/code><\/pre>\n<p>Bir s\u0131n\u0131fta birden fazla <code>init<\/code> blo\u011fu olabilir ve bunlar tan\u0131mland\u0131klar\u0131 s\u0131raya g\u00f6re \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r. Birincil yap\u0131c\u0131 parametreleri, <code>init<\/code> bloklar\u0131 ve \u00f6zellik ba\u015flat\u0131c\u0131lar\u0131, s\u0131n\u0131f \u00f6rneklendi\u011finde bu s\u0131rayla \u00e7al\u0131\u015f\u0131r.<\/p>\n<h4>\u0130kincil Yap\u0131c\u0131 Metotlar (Secondary Constructors)<\/h4>\n<p>Bir s\u0131n\u0131f\u0131n birincil yap\u0131c\u0131 metodu yoksa veya farkl\u0131 parametre setleriyle nesne olu\u015fturmak istiyorsak, ikincil yap\u0131c\u0131 metotlar tan\u0131mlayabiliriz. \u0130kincil yap\u0131c\u0131 metotlar, s\u0131n\u0131f g\u00f6vdesinde <code>constructor<\/code> anahtar kelimesiyle tan\u0131mlan\u0131r.<\/p>\n<p><strong>\u00d6nemli Kural:<\/strong> Bir s\u0131n\u0131f\u0131n birincil yap\u0131c\u0131 metodu varsa, t\u00fcm ikincil yap\u0131c\u0131 metotlar\u0131n do\u011frudan veya dolayl\u0131 olarak birincil yap\u0131c\u0131y\u0131 \u00e7a\u011f\u0131rmas\u0131 gerekir. Bu \u00e7a\u011fr\u0131, <code>this()<\/code> anahtar kelimesi kullan\u0131larak yap\u0131l\u0131r. E\u011fer birincil yap\u0131c\u0131 yoksa, ikincil yap\u0131c\u0131lar birbirlerini <code>this()<\/code> ile \u00e7a\u011f\u0131rabilir.<\/p>\n<pre><code class=\"language-kotlin\">class Personel(val ad: String, val soyad: String) { \/\/ Birincil yap\u0131c\u0131\n\n    var departman: String = \"Genel\"\n    var maas: Double = 0.0\n\n    \/\/ \u0130kincil yap\u0131c\u0131: Sadece ad ve soyad ile olu\u015fturulur\n    constructor(ad: String, soyad: String, departman: String) : this(ad, soyad) {\n        this.departman = departman\n    }\n\n    \/\/ \u0130kincil yap\u0131c\u0131: T\u00fcm bilgilerle olu\u015fturulur\n    constructor(ad: String, soyad: String, departman: String, maas: Double) : this(ad, soyad, departman) {\n        this.maas = maas\n    }\n\n    init {\n        println(\"Personel nesnesi olu\u015fturuldu: $ad $soyad\")\n    }\n\n    fun bilgileriGoster() {\n        println(\"Ad: $ad, Soyad: $soyad, Departman: $departman, Maa\u015f: $maas\")\n    }\n}\n\nfun main() {\n    val personel1 = Personel(\"Ay\u015fe\", \"Y\u0131lmaz\")\n    personel1.bilgileriGoster()\n    \/\/ \u00c7\u0131kt\u0131:\n    \/\/ Personel nesnesi olu\u015fturuldu: Ay\u015fe Y\u0131lmaz\n    \/\/ Ad: Ay\u015fe, Soyad: Y\u0131lmaz, Departman: Genel, Maa\u015f: 0.0\n\n    val personel2 = Personel(\"Mehmet\", \"Demir\", \"IT\")\n    personel2.bilgileriGoster()\n    \/\/ \u00c7\u0131kt\u0131:\n    \/\/ Personel nesnesi olu\u015fturuldu: Mehmet Demir\n    \/\/ Ad: Mehmet, Soyad: Demir, Departman: IT, Maa\u015f: 0.0\n\n    val personel3 = Personel(\"Zeynep\", \"Can\", \"HR\", 7500.0)\n    personel3.bilgileriGoster()\n    \/\/ \u00c7\u0131kt\u0131:\n    \/\/ Personel nesnesi olu\u015fturuldu: Zeynep Can\n    \/\/ Ad: Zeynep, Soyad: Can, Departman: HR, Maa\u015f: 7500.0\n}<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>Personel<\/code> s\u0131n\u0131f\u0131n\u0131n birincil yap\u0131c\u0131 metodu <code>(val ad: String, val soyad: String)<\/code>&#8216;dir. Di\u011fer iki ikincil yap\u0131c\u0131 metot, <code>this(ad, soyad)<\/code> veya <code>this(ad, soyad, departman)<\/code> \u00e7a\u011fr\u0131s\u0131yla birincil yap\u0131c\u0131y\u0131 veya ba\u015fka bir ikincil yap\u0131c\u0131y\u0131 zincirleme olarak \u00e7a\u011f\u0131rmaktad\u0131r. Bu, yap\u0131c\u0131 metotlar\u0131n a\u015f\u0131r\u0131 y\u00fcklenmesini (overloading) sa\u011flar ve nesneleri farkl\u0131 parametre kombinasyonlar\u0131yla olu\u015fturma esnekli\u011fi sunar.<\/p>\n<h4>Yap\u0131c\u0131 Metotlar\u0131n Kapsam\u0131 (Visibility Modifiers)<\/h4>\n<p>Kotlin&#8217;de yap\u0131c\u0131 metotlar i\u00e7in de eri\u015fim belirleyiciler (visibility modifiers) kullan\u0131labilir: <code>public<\/code>, <code>private<\/code>, <code>protected<\/code>, <code>internal<\/code>. Varsay\u0131lan olarak, yap\u0131c\u0131 metotlar <code>public<\/code>&#8216;tir.<\/p>\n<p>*   <code>public<\/code>: Her yerden eri\u015filebilir (varsay\u0131lan).<br \/>\n*   <code>private<\/code>: Sadece s\u0131n\u0131f\u0131n i\u00e7inde eri\u015filebilir. Bu, fabrika metotlar\u0131 (factory methods) ile nesne olu\u015fturmak istedi\u011fimizde faydal\u0131d\u0131r.<br \/>\n*   <code>protected<\/code>: Sadece s\u0131n\u0131f\u0131n i\u00e7inde ve t\u00fcretilmi\u015f s\u0131n\u0131flarda eri\u015filebilir. (Ancak, birincil yap\u0131c\u0131 i\u00e7in <code>protected<\/code> kullan\u0131lamaz. E\u011fer bir s\u0131n\u0131f\u0131n yap\u0131c\u0131 metodu <code>protected<\/code> olacaksa, bu bir ikincil yap\u0131c\u0131 olmal\u0131 ve temel s\u0131n\u0131f\u0131n birincil yap\u0131c\u0131s\u0131 <code>protected<\/code> olamaz.)<br \/>\n*   <code>internal<\/code>: Ayn\u0131 mod\u00fcl i\u00e7inde her yerden eri\u015filebilir.<\/p>\n<p>\u00d6rnek olarak <code>private<\/code> bir yap\u0131c\u0131 metot:<\/p>\n<pre><code class=\"language-kotlin\">class Singleton private constructor() {\n    init {\n        println(\"Singleton nesnesi olu\u015fturuldu.\")\n    }\n\n    companion object {\n        val instance = Singleton() \/\/ Sadece s\u0131n\u0131f i\u00e7inden \u00e7a\u011fr\u0131labilir\n    }\n\n    fun mesajGoster() {\n        println(\"Merhaba, ben Singleton!\")\n    }\n}\n\nfun main() {\n    \/\/ val s = Singleton() \/\/ Hata: Yap\u0131c\u0131 'private'\n    val s = Singleton.instance\n    s.mesajGoster()\n}<\/code><\/pre>\n<h3>S\u0131n\u0131f Miras\u0131 ve Yap\u0131c\u0131 Metotlar<\/h3>\n<p>Kotlin&#8217;de, Java&#8217;n\u0131n aksine, s\u0131n\u0131flar varsay\u0131lan olarak &#8220;kapal\u0131&#8221; (final) durumdad\u0131r. Bu, ba\u015fka s\u0131n\u0131flar\u0131n ondan miras alamayaca\u011f\u0131 anlam\u0131na gelir. Bir s\u0131n\u0131f\u0131n miras al\u0131nabilmesi i\u00e7in <code>open<\/code> anahtar kelimesiyle i\u015faretlenmesi gerekir.<\/p>\n<h4>A\u00e7\u0131k S\u0131n\u0131flar (Open Classes)<\/h4>\n<pre><code class=\"language-kotlin\">open class TemelS\u0131n\u0131f(val ad: String) {\n    init {\n        println(\"TemelS\u0131n\u0131f olu\u015fturuldu: $ad\")\n    }\n}\n\nclass T\u00fcretilmi\u015fS\u0131n\u0131f(ad: String, val yas: Int) : TemelS\u0131n\u0131f(ad) {\n    init {\n        println(\"T\u00fcretilmi\u015fS\u0131n\u0131f olu\u015fturuldu: $ad, Ya\u015f: $yas\")\n    }\n}\n\nfun main() {\n    val turetilmis = T\u00fcretilmi\u015fS\u0131n\u0131f(\"Deneme\", 25)\n    \/\/ \u00c7\u0131kt\u0131:\n    \/\/ TemelS\u0131n\u0131f olu\u015fturuldu: Deneme\n    \/\/ T\u00fcretilmi\u015fS\u0131n\u0131f olu\u015fturuldu: Deneme, Ya\u015f: 25\n}<\/code><\/pre>\n<h4>T\u00fcretilmi\u015f S\u0131n\u0131flar (Derived Classes) ve Yap\u0131c\u0131lar<\/h4>\n<p>Bir t\u00fcretilmi\u015f s\u0131n\u0131f\u0131n birincil yap\u0131c\u0131 metodu varsa, temel s\u0131n\u0131f\u0131n birincil yap\u0131c\u0131s\u0131n\u0131 do\u011frudan \u00e7a\u011f\u0131rmas\u0131 gerekir. Bu \u00e7a\u011fr\u0131, temel s\u0131n\u0131f ad\u0131ndan sonra parantez i\u00e7inde <code>super()<\/code> \u00e7a\u011fr\u0131s\u0131 gibi yap\u0131l\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">open class Calisan(val tcKimlik: String, val isim: String) {\n    open fun calis() {\n        println(\"$isim \u00e7al\u0131\u015f\u0131yor.\")\n    }\n}\n\nclass Yonetici(tcKimlik: String, isim: String, val departman: String) : Calisan(tcKimlik, isim) {\n    override fun calis() {\n        super.calis() \/\/ Temel s\u0131n\u0131f\u0131n metodunu \u00e7a\u011f\u0131r\n        println(\"$isim $departman departman\u0131n\u0131 y\u00f6netiyor.\")\n    }\n}\n\nfun main() {\n    val yonetici = Yonetici(\"12345678901\", \"Can Y\u0131lmaz\", \"Pazarlama\")\n    yonetici.calis()\n    \/\/ \u00c7\u0131kt\u0131:\n    \/\/ Can Y\u0131lmaz \u00e7al\u0131\u015f\u0131yor.\n    \/\/ Can Y\u0131lmaz Pazarlama departman\u0131n\u0131 y\u00f6netiyor.\n}<\/code><\/pre>\n<p>E\u011fer t\u00fcretilmi\u015f s\u0131n\u0131f\u0131n birincil yap\u0131c\u0131 metodu yoksa ve sadece ikincil yap\u0131c\u0131 metotlar\u0131 varsa, bu ikincil yap\u0131c\u0131 metotlar\u0131n <code>super()<\/code> anahtar kelimesiyle temel s\u0131n\u0131f\u0131n bir yap\u0131c\u0131s\u0131n\u0131 \u00e7a\u011f\u0131rmas\u0131 gerekir.<\/p>\n<pre><code class=\"language-kotlin\">open class Esya {\n    constructor(ad: String) {\n        println(\"Esya olu\u015fturuldu: $ad\")\n    }\n}\n\nclass Mobilya : Esya {\n    constructor(ad: String, malzeme: String) : super(ad) {\n        println(\"Mobilya olu\u015fturuldu: $ad, Malzeme: $malzeme\")\n    }\n}\n\nfun main() {\n    val masa = Mobilya(\"\u00c7al\u0131\u015fma Masas\u0131\", \"Ah\u015fap\")\n    \/\/ \u00c7\u0131kt\u0131:\n    \/\/ Esya olu\u015fturuldu: \u00c7al\u0131\u015fma Masas\u0131\n    \/\/ Mobilya olu\u015fturuldu: \u00c7al\u0131\u015fma Masas\u0131, Malzeme: Ah\u015fap\n}<\/code><\/pre>\n<h3>Veri S\u0131n\u0131flar\u0131 (Data Classes) ve Yap\u0131c\u0131 Metotlar<\/h3>\n<p>Kotlin&#8217;in en kullan\u0131\u015fl\u0131 \u00f6zelliklerinden biri de <code>data class<\/code>&#8216;lard\u0131r. Veri s\u0131n\u0131flar\u0131, sadece veri tutmak i\u00e7in tasarlanm\u0131\u015f s\u0131n\u0131flard\u0131r ve <code>equals()<\/code>, <code>hashCode()<\/code>, <code>toString()<\/code>, <code>copy()<\/code> ve <code>componentN()<\/code> gibi standart metotlar\u0131 otomatik olarak olu\u015fturur.<\/p>\n<h4>Data Class Nedir?<\/h4>\n<p>Bir s\u0131n\u0131f\u0131 <code>data<\/code> anahtar kelimesiyle i\u015faretlemek, onu bir veri s\u0131n\u0131f\u0131 yapar. Data class&#8217;lar\u0131n en az birincil yap\u0131c\u0131 parametresi olmas\u0131 zorunludur. Bu parametreler, otomatik olarak olu\u015fturulan metotlar i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">data class KullaniciBilgisi(val id: Int, val ad: String, val email: String)\n\nfun main() {\n    val user1 = KullaniciBilgisi(1, \"Ali\", \"ali@example.com\")\n    val user2 = KullaniciBilgisi(1, \"Ali\", \"ali@example.com\")\n    val user3 = KullaniciBilgisi(2, \"Ay\u015fe\", \"ayse@example.com\")\n\n    println(user1)          \/\/ toString() otomatik: KullaniciBilgisi(id=1, ad=Ali, email=ali@example.com)\n    println(user1 == user2) \/\/ equals() otomatik: true (de\u011fer e\u015fitli\u011fi kontrol\u00fc)\n    println(user1 == user3) \/\/ false\n\n    val user1Kopya = user1.copy(email = \"ali.yeni@example.com\") \/\/ copy() otomatik\n    println(user1Kopya)     \/\/ KullaniciBilgisi(id=1, ad=Ali, email=ali.yeni@example.com)\n\n    val (id, ad, email) = user1 \/\/ componentN() ve destructuring declaration\n    println(\"ID: $id, Ad: $ad, Email: $email\")\n}<\/code><\/pre>\n<p>Data class&#8217;larda ikincil yap\u0131c\u0131 metotlar da tan\u0131mlanabilir, ancak bu ikincil yap\u0131c\u0131lar\u0131n da birincil yap\u0131c\u0131y\u0131 \u00e7a\u011f\u0131rmas\u0131 ve birincil yap\u0131c\u0131da tan\u0131mlanan t\u00fcm \u00f6zellikleri ba\u015flatmas\u0131 gerekir. Data class&#8217;lar\u0131n temel g\u00fcc\u00fc, birincil yap\u0131c\u0131 parametrelerinden t\u00fcretilen otomatik metotlarda yatar, bu y\u00fczden bu parametrelerin do\u011fru \u015fekilde tan\u0131mlanmas\u0131 kritik \u00f6neme sahiptir.<\/p>\n<h3>Nesne Olu\u015fturma ve Yap\u0131c\u0131 Metot \u00c7a\u011fr\u0131s\u0131<\/h3>\n<p>Kotlin&#8217;de nesne olu\u015fturmak i\u00e7in Java&#8217;daki gibi <code>new<\/code> anahtar kelimesine ihtiya\u00e7 yoktur. Do\u011frudan s\u0131n\u0131f ad\u0131n\u0131 ve parantezleri kullanarak bir nesne olu\u015fturulur.<\/p>\n<pre><code class=\"language-kotlin\">class Araba(val marka: String, val model: String)\n\nfun main() {\n    val araba1 = Araba(\"BMW\", \"X5\") \/\/ Yap\u0131c\u0131 metot \u00e7a\u011fr\u0131s\u0131\n    println(\"${araba1.marka} ${araba1.model}\")\n}<\/code><\/pre>\n<p>Parametreleri olan yap\u0131c\u0131 metotlar\u0131 \u00e7a\u011f\u0131r\u0131rken, parametrelerin s\u0131ras\u0131na dikkat etmek \u00f6nemlidir. Kotlin, &#8220;isimli arg\u00fcmanlar&#8221; (named arguments) \u00f6zelli\u011fini sunarak bu konuda esneklik sa\u011flar. Bu sayede, parametrelerin s\u0131ras\u0131 de\u011fi\u015fse bile kodun okunabilirli\u011fi artar ve varsay\u0131lan de\u011ferler varken hangi parametreye de\u011fer atand\u0131\u011f\u0131 a\u00e7\u0131k\u00e7a belirtilebilir.<\/p>\n<pre><code class=\"language-kotlin\">class PersonelDetay(val ad: String, val soyad: String, val yas: Int = 30, val departman: String = \"Genel\")\n\nfun main() {\n    val p1 = PersonelDetay(\"Ay\u015fe\", \"Y\u0131lmaz\") \/\/ Varsay\u0131lan ya\u015f ve departman kullan\u0131l\u0131r\n    val p2 = PersonelDetay(\"Mehmet\", \"Demir\", 40) \/\/ Ya\u015f override edilir, departman varsay\u0131lan\n    val p3 = PersonelDetay(ad = \"Zeynep\", soyad = \"Can\", departman = \"\u0130nsan Kaynaklar\u0131\") \/\/ \u0130simli arg\u00fcmanlar ve varsay\u0131lan ya\u015f\n    val p4 = PersonelDetay(soyad = \"Kara\", ad = \"Ahmet\", yas = 35, departman = \"Muhasebe\") \/\/ S\u0131ra \u00f6nemli de\u011fil\n\n    println(\"${p1.ad} ${p1.soyad}, Ya\u015f: ${p1.yas}, Departman: ${p1.departman}\")\n    println(\"${p2.ad} ${p2.soyad}, Ya\u015f: ${p2.yas}, Departman: ${p2.departman}\")\n    println(\"${p3.ad} ${p3.soyad}, Ya\u015f: ${p3.yas}, Departman: ${p3.departman}\")\n    println(\"${p4.ad} ${p4.soyad}, Ya\u015f: ${p4.yas}, Departman: ${p4.departman}\")\n}<\/code><\/pre>\n<h3>Pratik Senaryolar ve En \u0130yi Uygulamalar<\/h3>\n<p>Kotlin&#8217;in yap\u0131c\u0131 metot esnekli\u011fi, farkl\u0131 senaryolar i\u00e7in en uygun tasar\u0131m\u0131 se\u00e7me imkan\u0131 sunar.<\/p>\n<h4>Ne Zaman Birincil, Ne Zaman \u0130kincil Yap\u0131c\u0131?<\/h4>\n<p>*   <strong>Birincil Yap\u0131c\u0131:<\/strong> \u00c7o\u011fu durumda tercih edilen y\u00f6ntemdir. S\u0131n\u0131f\u0131n temel \u00f6zelliklerini do\u011frudan tan\u0131mlayarak kodun daha k\u0131sa ve okunabilir olmas\u0131n\u0131 sa\u011flar. S\u0131n\u0131f\u0131n ana i\u015flevselli\u011fi i\u00e7in gerekli olan t\u00fcm parametreleri i\u00e7erir. <code>init<\/code> bloklar\u0131 ile ek ba\u015flatma mant\u0131\u011f\u0131 eklenebilir.<br \/>\n*   <strong>\u0130kincil Yap\u0131c\u0131lar:<\/strong><br \/>\n    *   <strong>A\u015f\u0131r\u0131 Y\u00fckleme:<\/strong> Nesneleri farkl\u0131 parametre setleriyle olu\u015fturma ihtiyac\u0131 oldu\u011funda kullan\u0131l\u0131r. \u00d6rne\u011fin, bir nesneyi minimum bilgiyle veya t\u00fcm detaylar\u0131yla olu\u015fturmak isteyebilirsiniz.<br \/>\n    *   <strong>Java Interoperability:<\/strong> Java koduyla etkile\u015fimde bulunurken, Java&#8217;n\u0131n yap\u0131c\u0131 a\u015f\u0131r\u0131 y\u00fckleme modeline daha yak\u0131n bir yap\u0131 sunar.<br \/>\n    *   <strong>Karma\u015f\u0131k Ba\u015flatma:<\/strong> Bazen birincil yap\u0131c\u0131 \u00e7ok fazla parametre alabilir veya ba\u015flatma mant\u0131\u011f\u0131 \u00e7ok karma\u015f\u0131k olabilir. Bu durumda, daha basit bir birincil yap\u0131c\u0131 tan\u0131mlay\u0131p, ikincil yap\u0131c\u0131lar\u0131 kullanarak farkl\u0131 ba\u015flatma senaryolar\u0131n\u0131 ele almak faydal\u0131 olabilir.<\/p>\n<h4>Yap\u0131c\u0131 Parametrelerinin Do\u011frulanmas\u0131<\/h4>\n<p>Yap\u0131c\u0131 metotlar, nesnenin ge\u00e7erli bir durumda oldu\u011fundan emin olmak i\u00e7in parametre do\u011frulamas\u0131 yapmak i\u00e7in ideal bir yerdir. Bu do\u011frulama genellikle <code>init<\/code> bloklar\u0131nda yap\u0131l\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">class Hesap(val hesapNo: String, var bakiye: Double) {\n    init {\n        require(hesapNo.isNotBlank()) { \"Hesap numaras\u0131 bo\u015f olamaz.\" }\n        require(bakiye >= 0) { \"Bakiye negatif olamaz.\" }\n    }\n}\n\nfun main() {\n    val hesap1 = Hesap(\"TR12345\", 100.0)\n    \/\/ val hesap2 = Hesap(\"\", 50.0) \/\/ Hata: Hesap numaras\u0131 bo\u015f olamaz.\n    \/\/ val hesap3 = Hesap(\"TR67890\", -10.0) \/\/ Hata: Bakiye negatif olamaz.\n}<\/code><\/pre>\n<p><code>require()<\/code> ve <code>check()<\/code> gibi standart k\u00fct\u00fcphane fonksiyonlar\u0131, ko\u015ful yanl\u0131\u015fsa <code>IllegalArgumentException<\/code> veya <code>IllegalStateException<\/code> f\u0131rlatarak bu t\u00fcr do\u011frulamalar\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<h4>Ba\u011f\u0131ml\u0131l\u0131k Enjeksiyonu (Dependency Injection)<\/h4>\n<p>Yap\u0131c\u0131 enjeksiyonu, ba\u011f\u0131ml\u0131l\u0131k enjeksiyonu (DI) deseninin en yayg\u0131n ve \u00f6nerilen \u015feklidir. Kotlin&#8217;de yap\u0131c\u0131 metotlar, bir s\u0131n\u0131f\u0131n ihtiya\u00e7 duydu\u011fu ba\u011f\u0131ml\u0131l\u0131klar\u0131 d\u0131\u015far\u0131dan almas\u0131n\u0131 sa\u011flamak i\u00e7in m\u00fckemmel bir yerdir. Bu, test edilebilirli\u011fi art\u0131r\u0131r ve kodun daha mod\u00fcler olmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-kotlin\">interface Logger {\n    fun log(message: String)\n}\n\nclass KonsolLogger : Logger {\n    override fun log(message: String) {\n        println(\"LOG: $message\")\n    }\n}\n\nclass Servis(private val logger: Logger) { \/\/ Ba\u011f\u0131ml\u0131l\u0131k yap\u0131c\u0131 \u00fczerinden enjekte edildi\n    fun islemYap(veri: String) {\n        logger.log(\"\u0130\u015flem yap\u0131l\u0131yor: $veri\")\n        \/\/ ...\n    }\n}\n\nfun main() {\n    val logger = KonsolLogger()\n    val servis = Servis(logger) \/\/ Ba\u011f\u0131ml\u0131l\u0131k sa\u011flan\u0131yor\n    servis.islemYap(\"\u00d6rnek Veri\")\n}<\/code><\/pre>\n<h4>Fabrika Metotlar\u0131 (Factory Methods)<\/h4>\n<p>Bazen nesne olu\u015fturma mant\u0131\u011f\u0131, basit bir yap\u0131c\u0131 \u00e7a\u011fr\u0131s\u0131ndan daha karma\u015f\u0131k olabilir. \u00d6rne\u011fin, nesneyi \u00f6nbellekten almak, farkl\u0131 alt s\u0131n\u0131flar\u0131n \u00f6rneklerini d\u00f6nd\u00fcrmek veya olu\u015fturma s\u00fcrecinde karma\u015f\u0131k hesaplamalar yapmak gerekebilir. Bu durumlarda, fabrika metotlar\u0131 kullanmak yap\u0131c\u0131 metotlara iyi bir alternatif olabilir. Fabrika metotlar\u0131, genellikle bir <code>companion object<\/code> i\u00e7inde veya ayr\u0131 bir fabrika s\u0131n\u0131f\u0131nda tan\u0131mlanan statik metotlard\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">class Sekil private constructor(val tip: String, val boyut: Double) { \/\/ Private yap\u0131c\u0131\n\n    companion object {\n        fun kare(kenar: Double): Sekil {\n            return Sekil(\"Kare\", kenar * kenar)\n        }\n\n        fun daire(yaricap: Double): Sekil {\n            return Sekil(\"Daire\", Math.PI <em> yaricap <\/em> yaricap)\n        }\n\n        fun dikdortgen(en: Double, boy: Double): Sekil {\n            return Sekil(\"Dikd\u00f6rtgen\", en * boy)\n        }\n    }\n\n    override fun toString(): String {\n        return \"$tip (Alan: $boyut)\"\n    }\n}\n\nfun main() {\n    val kare = Sekil.kare(5.0)\n    val daire = Sekil.daire(3.0)\n    val dikdortgen = Sekil.dikdortgen(4.0, 6.0)\n\n    println(kare)\n    println(daire)\n    println(dikdortgen)\n}<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>Sekil<\/code> s\u0131n\u0131f\u0131n\u0131n yap\u0131c\u0131 metodu <code>private<\/code> olarak i\u015faretlenmi\u015ftir, bu da do\u011frudan <code>Sekil()<\/code> \u00e7a\u011fr\u0131s\u0131 ile nesne olu\u015fturmay\u0131 engeller. Bunun yerine, <code>companion object<\/code> i\u00e7inde tan\u0131mlanan fabrika metotlar\u0131 (<code>kare<\/code>, <code>daire<\/code>, <code>dikdortgen<\/code>) kullan\u0131larak nesneler olu\u015fturulur. Bu yakla\u015f\u0131m, nesne olu\u015fturma mant\u0131\u011f\u0131n\u0131 merkezi bir yerde tutar ve daha esnek bir aray\u00fcz sunar.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Kotlin&#8217;in s\u0131n\u0131f ve yap\u0131c\u0131 metot mekanizmalar\u0131, dilin modern ve ifade g\u00fcc\u00fc y\u00fcksek yap\u0131s\u0131n\u0131n temelini olu\u015fturur. Birincil yap\u0131c\u0131lar\u0131n s\u0131n\u0131f ba\u015fl\u0131\u011f\u0131nda tan\u0131mlanmas\u0131 ve <code>val<\/code>\/<code>var<\/code> ile do\u011frudan \u00f6zellik olarak kullan\u0131labilmesi, kodun k\u0131sal\u0131\u011f\u0131n\u0131 ve okunabilirli\u011fini art\u0131r\u0131r. <code>init<\/code> bloklar\u0131, ba\u015flatma mant\u0131\u011f\u0131n\u0131 d\u00fczenli bir \u015fekilde ele almay\u0131 sa\u011flarken, ikincil yap\u0131c\u0131lar farkl\u0131 nesne olu\u015fturma senaryolar\u0131na uyum sa\u011flar. Miras alma durumunda temel s\u0131n\u0131f yap\u0131c\u0131lar\u0131n\u0131 \u00e7a\u011f\u0131rma zorunlulu\u011fu, nesne hiyerar\u015fisinin do\u011fru bir \u015fekilde ba\u015flat\u0131lmas\u0131n\u0131 garanti eder. Data class&#8217;lar gibi \u00f6zel s\u0131n\u0131f t\u00fcrleri, yap\u0131c\u0131 metotlar\u0131n g\u00fcc\u00fcn\u00fc kullanarak yayg\u0131n boilerplate kodunu ortadan kald\u0131r\u0131r.<\/p>\n<p>Bu \u00f6zelliklerin do\u011fru bir \u015fekilde anla\u015f\u0131lmas\u0131 ve kullan\u0131lmas\u0131, Kotlin geli\u015ftiricilerinin daha temiz, daha s\u00fcrd\u00fcr\u00fclebilir ve daha g\u00fcvenilir uygulamalar yazmas\u0131na olanak tan\u0131r. Ba\u011f\u0131ml\u0131l\u0131k enjeksiyonu ve fabrika metotlar\u0131 gibi tasar\u0131m desenleriyle birle\u015fti\u011finde, Kotlin&#8217;in yap\u0131c\u0131 metotlar\u0131, karma\u015f\u0131k sistemlerin bile kolayca y\u00f6netilebilmesini sa\u011flayan g\u00fc\u00e7l\u00fc bir ara\u00e7 seti sunar. Kotlin&#8217;de ustala\u015fmak isteyen her geli\u015ftirici i\u00e7in s\u0131n\u0131flar ve yap\u0131c\u0131 metotlar konusuna hakim olmak hayati \u00f6neme sahiptir.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Kotlin S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: Derinlemesine Bir Bak\u0131\u015f\nKotlin&#8217;e Giri\u015f ve S\u0131n\u0131flar\u0131n \u00d6nemi\nKotlin, JetBrains taraf\u0131ndan geli\u015ftir","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-36008","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 S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: 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\/kotlin-siniflari-ve-yapici-metotlari-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 S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: Derinlemesine Bir Bak\u0131\u015f\" \/>\n<meta property=\"og:description\" content=\"Kotlin S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: Derinlemesine Bir Bak\u0131\u015f Kotlin&#039;e Giri\u015f ve S\u0131n\u0131flar\u0131n \u00d6nemi Kotlin, JetBrains taraf\u0131ndan geli\u015ftir\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-06T15:40:45+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=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kotlin S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: Derinlemesine Bir Bak\u0131\u015f\",\"datePublished\":\"2025-12-06T15:40:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/\"},\"wordCount\":2257,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/\",\"name\":\"Kotlin S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: Derinlemesine Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-06T15:40:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kotlin S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: 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 S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: 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\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/","og_locale":"tr_TR","og_type":"article","og_title":"Kotlin S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: Derinlemesine Bir Bak\u0131\u015f","og_description":"Kotlin S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: Derinlemesine Bir Bak\u0131\u015f Kotlin'e Giri\u015f ve S\u0131n\u0131flar\u0131n \u00d6nemi Kotlin, JetBrains taraf\u0131ndan geli\u015ftir","og_url":"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-06T15:40:45+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kotlin S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: Derinlemesine Bir Bak\u0131\u015f","datePublished":"2025-12-06T15:40:45+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/"},"wordCount":2257,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/","url":"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/","name":"Kotlin S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: Derinlemesine Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-06T15:40:45+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kotlin-siniflari-ve-yapici-metotlari-derinlemesine-bir-bakis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kotlin S\u0131n\u0131flar\u0131 ve Yap\u0131c\u0131 Metotlar\u0131: 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\/36008","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=36008"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36008\/revisions"}],"predecessor-version":[{"id":36009,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36008\/revisions\/36009"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}