{"id":32799,"date":"2025-10-26T03:41:03","date_gmt":"2025-10-26T00:41:03","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32799"},"modified":"2025-10-26T03:41:03","modified_gmt":"2025-10-26T00:41:03","slug":"kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/","title":{"rendered":"Kotlin&#8217;de Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL"},"content":{"rendered":"<p><body><\/p>\n<h2>Kotlin&#8217;de Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL<\/h2>\n<p>Kotlin, modern ve pragmatik bir programlama dili olarak, geli\u015ftiricilere konsol \u00fczerinden kullan\u0131c\u0131yla etkile\u015fim kurmak i\u00e7in g\u00fc\u00e7l\u00fc ve esnek ara\u00e7lar sunar. Uygulamalar\u0131n \u00e7o\u011fu zaman bir grafik aray\u00fcze veya web tabanl\u0131 bir aray\u00fcze sahip olsa da, konsol etkile\u015fimi \u00f6zellikle betikler, komut sat\u0131r\u0131 ara\u00e7lar\u0131, hata ay\u0131klama s\u00fcre\u00e7leri ve temel \u00f6\u011frenme a\u015famalar\u0131 i\u00e7in vazge\u00e7ilmezdir. Bu makalede, Kotlin&#8217;in konsola \u00e7\u0131kt\u0131 verme (<code>print()<\/code>, <code>println()<\/code>) ve konsoldan girdi alma (<code>readLine()<\/code>, <code>java.util.Scanner<\/code>) mekanizmalar\u0131n\u0131 derinlemesine inceleyecek, ayr\u0131ca etkile\u015fimli bir geli\u015ftirme ortam\u0131 olan Kotlin REPL&#8217;i (Read-Eval-Print Loop) ke\u015ffedece\u011fiz. Bu ara\u00e7lar\u0131n her biri, farkl\u0131 senaryolarda geli\u015ftiricilere b\u00fcy\u00fck kolayl\u0131klar sa\u011flar ve Kotlin uygulamalar\u0131n\u0131n kullan\u0131c\u0131larla daha etkin bir \u015fekilde ileti\u015fim kurmas\u0131n\u0131 m\u00fcmk\u00fcn k\u0131lar.<\/p>\n<h3>print() ve println() Fonksiyonlar\u0131<\/h3>\n<p>Kotlin&#8217;de konsola metin yazd\u0131rmak i\u00e7in kullan\u0131lan en temel fonksiyonlar <code>print()<\/code> ve <code>println()<\/code>&#8216;d\u0131r. Her iki fonksiyon da <code>kotlin.io<\/code> paketinde yer al\u0131r ve standart \u00e7\u0131kt\u0131 ak\u0131\u015f\u0131na (genellikle konsol) veri g\u00f6nderir.<\/p>\n<h4>Tan\u0131m ve Ama\u00e7<\/h4>\n<p>Bu fonksiyonlar, program\u0131n \u00e7al\u0131\u015fma zaman\u0131nda kullan\u0131c\u0131ya bilgi vermek, i\u015flem sonu\u00e7lar\u0131n\u0131 g\u00f6stermek veya hata mesajlar\u0131 iletmek gibi ama\u00e7larla kullan\u0131l\u0131r. Geli\u015ftirme ve hata ay\u0131klama s\u00fcre\u00e7lerinde, de\u011fi\u015fken de\u011ferlerini veya program ak\u0131\u015f\u0131n\u0131 izlemek i\u00e7in de s\u0131k\u00e7a ba\u015fvurulan ara\u00e7lard\u0131r.<\/p>\n<h4>Temel Kullan\u0131m<\/h4>\n<p><code>print()<\/code> ve <code>println()<\/code> fonksiyonlar\u0131, parametre olarak \u00e7e\u015fitli veri tiplerini alabilir. En yayg\u0131n kullan\u0131m\u0131, <code>String<\/code> literallerini veya de\u011fi\u015fkenlerini yazd\u0131rmakt\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">fun main() {\n    \/\/ String literallerini yazd\u0131rma\n    print(\"Merhaba, \")\n    println(\"Kotlin!\")\n\n    \/\/ De\u011fi\u015fkenleri yazd\u0131rma\n    val isim = \"Alice\"\n    val yas = 30\n    print(\"\u0130sim: $isim, \")\n    println(\"Ya\u015f: $yas\")\n\n    \/\/ \u0130fade sonu\u00e7lar\u0131n\u0131 yazd\u0131rma\n    println(10 + 5)\n    println(true && false)\n}<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi, do\u011frudan metinler, de\u011fi\u015fkenler veya ifadelerin sonu\u00e7lar\u0131 konsola yazd\u0131r\u0131labilir. Kotlin, yazd\u0131rma fonksiyonlar\u0131na ge\u00e7irilen herhangi bir nesneyi otomatik olarak <code>toString()<\/code> metodunu \u00e7a\u011f\u0131rarak metin format\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<\/p>\n<h4>Farklar\u0131<\/h4>\n<p><code>print()<\/code> ve <code>println()<\/code> aras\u0131ndaki temel fark, <code>println()<\/code>&#8216;\u0131n \u00e7\u0131kt\u0131dan sonra otomatik olarak yeni bir sat\u0131ra ge\u00e7mesidir. <code>print()<\/code> ise imleci mevcut sat\u0131rda, yazd\u0131rd\u0131\u011f\u0131 metnin hemen sonunda b\u0131rak\u0131r.<\/p>\n<p>*   <strong><code>print()<\/code><\/strong>: Metni yazar ve imleci ayn\u0131 sat\u0131rda b\u0131rak\u0131r. Sonraki \u00e7\u0131kt\u0131 ayn\u0131 sat\u0131rda devam eder.<br \/>\n*   <strong><code>println()<\/code><\/strong>: Metni yazar ve ard\u0131ndan bir sat\u0131r sonu karakteri (newline character) ekleyerek imleci bir sonraki sat\u0131r\u0131n ba\u015f\u0131na ta\u015f\u0131r. Sonraki \u00e7\u0131kt\u0131 yeni bir sat\u0131rdan ba\u015flar.<\/p>\n<pre><code class=\"language-kotlin\">fun main() {\n    print(\"Bu ilk par\u00e7a. \")\n    print(\"Bu ikinci par\u00e7a ayn\u0131 sat\u0131rda. \")\n    println(\"Bu \u00fc\u00e7\u00fcnc\u00fc par\u00e7a, ve \u015fimdi yeni bir sat\u0131ra ge\u00e7ilecek.\")\n    println(\"Bu d\u00f6rd\u00fcnc\u00fc par\u00e7a, yeni sat\u0131rdan ba\u015fl\u0131yor.\")\n}<\/code><\/pre>\n<p>Bu kodun \u00e7\u0131kt\u0131s\u0131 \u015fu \u015fekilde olacakt\u0131r:<\/p>\n<pre><code class=\"language-\">Bu ilk par\u00e7a. Bu ikinci par\u00e7a ayn\u0131 sat\u0131rda. Bu \u00fc\u00e7\u00fcnc\u00fc par\u00e7a, ve \u015fimdi yeni bir sat\u0131ra ge\u00e7ilecek.\nBu d\u00f6rd\u00fcnc\u00fc par\u00e7a, yeni sat\u0131rdan ba\u015fl\u0131yor.<\/code><\/pre>\n<p><code>println()<\/code> fonksiyonu, parametre almadan da \u00e7a\u011fr\u0131labilir. Bu durumda sadece bir sat\u0131r sonu karakteri yazd\u0131rarak bo\u015f bir sat\u0131r olu\u015fturur.<\/p>\n<pre><code class=\"language-kotlin\">println(\"Birinci sat\u0131r.\")\nprintln() \/\/ Bo\u015f bir sat\u0131r\nprintln(\"\u0130kinci sat\u0131r.\")<\/code><\/pre>\n<h4>String \u015eablonlar\u0131 (String Templates)<\/h4>\n<p>Kotlin&#8217;in g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biri olan String \u015eablonlar\u0131, <code>print()<\/code> ve <code>println()<\/code> fonksiyonlar\u0131yla birlikte kullan\u0131ld\u0131\u011f\u0131nda \u00e7\u0131kt\u0131lar\u0131 \u00e7ok daha okunabilir ve dinamik hale getirir. String \u015fablonlar\u0131, bir string literalinin i\u00e7ine de\u011fi\u015fkenleri veya ifadeleri do\u011frudan <code>$<\/code> sembol\u00fcyle g\u00f6mmeyi sa\u011flar.<\/p>\n<p>*   <strong><code>$de\u011fi\u015fken<\/code><\/strong>: Bir de\u011fi\u015fkenin de\u011ferini do\u011frudan string i\u00e7ine ekler.<\/p>\n<pre><code class=\"language-kotlin\">val ad = \"Mehmet\"\n    val yas = 25\n    println(\"Merhaba, ben $ad ve $yas ya\u015f\u0131nday\u0131m.\")<\/code><\/pre>\n<p>*   <strong><code>${if (ko\u015ful) \"evet\" else \"hay\u0131r\"}<\/code> gibi karma\u015f\u0131k ifadeler<\/strong>: S\u00fcsl\u00fc parantezler (<code>{}<\/code>) i\u00e7inde herhangi bir Kotlin ifadesi yaz\u0131labilir. Bu ifade de\u011ferlendirilir ve sonucu string&#8217;e dahil edilir.<\/p>\n<pre><code class=\"language-kotlin\">val fiyat = 15.50\n    val kdvOrani = 0.18\n    println(\"\u00dcr\u00fcn\u00fcn fiyat\u0131: $fiyat TL. KDV dahil fiyat\u0131: ${fiyat * (1 + kdvOrani)} TL.\")\n\n    val isOnline = true\n    println(\"Kullan\u0131c\u0131 durumu: ${if (isOnline) \"\u00c7evrimi\u00e7i\" else \"\u00c7evrimd\u0131\u015f\u0131\"}\")<\/code><\/pre>\n<p>String \u015fablonlar\u0131, \u00f6zellikle birden fazla de\u011fi\u015fkenin veya ifadenin birle\u015ftirilmesi gereken durumlarda string birle\u015ftirme operat\u00f6r\u00fcnden (<code>+<\/code>) \u00e7ok daha temiz ve hataya a\u00e7\u0131k olmayan bir y\u00f6ntem sunar.<\/p>\n<h4>Formatl\u0131 \u00c7\u0131kt\u0131<\/h4>\n<p>Bazen \u00e7\u0131kt\u0131lar\u0131n belirli bir formatta (\u00f6rne\u011fin, ondal\u0131k basamak say\u0131s\u0131, hizalama) g\u00f6sterilmesi gerekebilir. Kotlin&#8217;de do\u011frudan <code>printf<\/code> gibi bir fonksiyon bulunmasa da, Java&#8217;n\u0131n <code>String.format()<\/code> metodu veya Kotlin&#8217;in <code>format()<\/code> uzant\u0131 fonksiyonu bu ihtiyac\u0131 kar\u015f\u0131lar.<\/p>\n<pre><code class=\"language-kotlin\">fun main() {\n    val pi = 3.14159265\n    val sayi = 123.4567\n\n    \/\/ \u0130ki ondal\u0131k basamak ile formatlama\n    println(\"Pi say\u0131s\u0131: %.2f\".format(pi))\n    println(\"Say\u0131: %.1f\".format(sayi))\n\n    \/\/ Geni\u015flik ve hizalama\n    val urun = \"Klavye\"\n    val stok = 150\n    println(\"%-10s %5d\".format(urun, stok)) \/\/ Sol hizal\u0131 10 karakter, sa\u011f hizal\u0131 5 karakter\n}<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>String.format()<\/code> (Kotlin&#8217;de <code>format()<\/code> uzant\u0131 fonksiyonu olarak eri\u015filebilir) C dilindeki <code>printf<\/code> benzeri format belirte\u00e7leri (<code>%f<\/code> ondal\u0131k say\u0131lar i\u00e7in, <code>%s<\/code> stringler i\u00e7in, <code>%d<\/code> tam say\u0131lar i\u00e7in) kullanarak \u00e7\u0131kt\u0131n\u0131n hassasiyetini ve hizalamas\u0131n\u0131 kontrol etmemizi sa\u011flar.<\/p>\n<h4>\u00d6rnekler<\/h4>\n<pre><code class=\"language-kotlin\">fun main() {\n    \/\/ Basit mesaj\n    println(\"Program ba\u015flad\u0131.\")\n\n    \/\/ Kullan\u0131c\u0131 bilgisi\n    val kullaniciAdi = \"Ay\u015fe\"\n    val puan = 1250\n    println(\"Ho\u015f geldin, $kullaniciAdi! Puan\u0131n: $puan\")\n\n    \/\/ Hesaplama sonucu\n    val a = 10\n    val b = 7\n    println(\"Toplama: ${a + b}\")\n    println(\"\u00c7\u0131karma: ${a - b}\")\n    println(\"\u00c7arpma: ${a * b}\")\n    println(\"B\u00f6lme: ${\"%.2f\".format(a.toDouble() \/ b)}\") \/\/ Ondal\u0131k b\u00f6lme ve formatlama\n\n    \/\/ Durum kontrol\u00fc\n    val sicaklik = 22\n    if (sicaklik > 25) {\n        println(\"Hava s\u0131cak.\")\n    } else {\n        println(\"Hava \u0131l\u0131man.\")\n    }\n\n    \/\/ D\u00f6ng\u00fc i\u00e7inde \u00e7\u0131kt\u0131\n    for (i in 1..3) {\n        print(\"$i \")\n    }\n    println(\"\\nD\u00f6ng\u00fc tamamland\u0131.\") \/\/ Yeni sat\u0131ra ge\u00e7mek i\u00e7in \\n kullan\u0131ld\u0131\n}<\/code><\/pre>\n<h3>readLine() Fonksiyonu<\/h3>\n<p>Kullan\u0131c\u0131dan konsol arac\u0131l\u0131\u011f\u0131yla girdi almak, interaktif programlar\u0131n temel bir par\u00e7as\u0131d\u0131r. Kotlin, bu ama\u00e7 i\u00e7in <code>readLine()<\/code> adl\u0131 basit ve etkili bir fonksiyon sunar.<\/p>\n<h4>Tan\u0131m ve Ama\u00e7<\/h4>\n<p><code>readLine()<\/code> fonksiyonu, standart girdi ak\u0131\u015f\u0131ndan (genellikle klavye) bir sat\u0131r metin okur ve bu metni bir <code>String<\/code> olarak d\u00f6nd\u00fcr\u00fcr. Kullan\u0131c\u0131 Enter tu\u015funa basana kadar girilen t\u00fcm karakterleri yakalar.<\/p>\n<h4>Temel Kullan\u0131m<\/h4>\n<p><code>readLine()<\/code> fonksiyonu, kullan\u0131c\u0131dan tek bir metin sat\u0131r\u0131 almak i\u00e7in idealdir. Ancak, \u00f6nemli bir detay\u0131 vard\u0131r: d\u00f6nd\u00fcrd\u00fc\u011f\u00fc de\u011fer <code>String?<\/code> (nullable String) tipindedir. Bunun nedeni, girdi ak\u0131\u015f\u0131n\u0131n sonuna ula\u015f\u0131lmas\u0131 (EOF &#8211; End Of File) durumunda <code>null<\/code> d\u00f6nebilmesidir.<\/p>\n<pre><code class=\"language-kotlin\">fun main() {\n    print(\"Ad\u0131n\u0131z\u0131 girin: \")\n    val ad = readLine() \/\/ ad de\u011fi\u015fkeni String? tipindedir\n\n    \/\/ Null kontrol\u00fc yapmak \u00f6nemlidir\n    if (ad != null) {\n        println(\"Merhaba, $ad!\")\n    } else {\n        println(\"Ge\u00e7erli bir ad girmediniz.\")\n    }\n}<\/code><\/pre>\n<p>Genellikle kullan\u0131c\u0131dan girdi beklendi\u011finde <code>null<\/code> d\u00f6nme ihtimali d\u00fc\u015f\u00fckt\u00fcr (kullan\u0131c\u0131 Ctrl+D veya Ctrl+Z gibi bir kombinasyonla EOF sinyali g\u00f6ndermedik\u00e7e). Bu nedenle, \u00e7o\u011fu zaman g\u00fcvenli \u00e7a\u011fr\u0131 operat\u00f6r\u00fc (<code>?.<\/code>) veya null olmayan kesinlik operat\u00f6r\u00fc (<code>!!<\/code>) ile kullan\u0131l\u0131r. Ancak <code>!!<\/code> operat\u00f6r\u00fcn\u00fcn dikkatli kullan\u0131lmas\u0131 gerekir, \u00e7\u00fcnk\u00fc <code>null<\/code> olmas\u0131 durumunda <code>NullPointerException<\/code> f\u0131rlat\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">fun main() {\n    print(\"Favori renginizi girin: \")\n    val renk = readLine() ?: \"Bilinmiyor\" \/\/ Elvis operat\u00f6r\u00fc ile null durumunu ele alma\n    println(\"Favori renginiz: $renk\")\n\n    print(\"En sevdi\u011finiz meyve: \")\n    val meyve = readLine()!! \/\/ Null olmayaca\u011f\u0131ndan eminseniz kullan\u0131n\n    println(\"En sevdi\u011finiz meyve: $meyve\")\n}<\/code><\/pre>\n<h4>Veri Tipi D\u00f6n\u00fc\u015f\u00fcm\u00fc<\/h4>\n<p><code>readLine()<\/code> her zaman bir <code>String<\/code> d\u00f6nd\u00fcrd\u00fc\u011f\u00fc i\u00e7in, say\u0131sal veya boolean gibi farkl\u0131 veri tiplerine ihtiya\u00e7 duyuldu\u011funda bu string&#8217;in d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesi gerekir. Kotlin, bunun i\u00e7in \u00e7e\u015fitli uzant\u0131 fonksiyonlar\u0131 sunar: <code>toInt()<\/code>, <code>toDouble()<\/code>, <code>toBoolean()<\/code>, <code>toLong()<\/code>, vb.<\/p>\n<pre><code class=\"language-kotlin\">fun main() {\n    print(\"Ya\u015f\u0131n\u0131z\u0131 girin: \")\n    val yasStr = readLine()\n    val yas = yasStr?.toIntOrNull() \/\/ Null g\u00fcvenli d\u00f6n\u00fc\u015f\u00fcm ve hata y\u00f6netimi\n\n    if (yas != null) {\n        println(\"Ya\u015f\u0131n\u0131z: $yas\")\n        if (yas >= 18) {\n            println(\"Re\u015fitsiniz.\")\n        } else {\n            println(\"Re\u015fit de\u011filsiniz.\")\n        }\n    } else {\n        println(\"Ge\u00e7ersiz ya\u015f giri\u015fi.\")\n    }\n\n    print(\"Bir ondal\u0131k say\u0131 girin: \")\n    val ondalikStr = readLine()\n    val ondalikSayi = ondalikStr?.toDoubleOrNull()\n\n    if (ondalikSayi != null) {\n        println(\"Girdi\u011finiz say\u0131: $ondalikSayi\")\n    } else {\n        println(\"Ge\u00e7ersiz ondal\u0131k say\u0131 giri\u015fi.\")\n    }\n}<\/code><\/pre>\n<p><code>toIntOrNull()<\/code>, <code>toDoubleOrNull()<\/code> gibi fonksiyonlar, d\u00f6n\u00fc\u015f\u00fcm ba\u015far\u0131s\u0131z oldu\u011funda <code>null<\/code> d\u00f6ner. Bu, <code>try-catch<\/code> bloklar\u0131na gerek kalmadan daha temiz bir hata y\u00f6netimi sa\u011flar. E\u011fer d\u00f6n\u00fc\u015f\u00fcm\u00fcn kesinlikle ba\u015far\u0131l\u0131 olaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcyorsan\u0131z (veya ba\u015far\u0131s\u0131z olursa program\u0131n \u00e7\u00f6kmesini kabul ediyorsan\u0131z), <code>toInt()<\/code>, <code>toDouble()<\/code> gibi do\u011frudan d\u00f6n\u00fc\u015f\u00fcm fonksiyonlar\u0131n\u0131 kullanabilirsiniz. Ancak bu fonksiyonlar, ge\u00e7ersiz bir string ile \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda <code>NumberFormatException<\/code> f\u0131rlat\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">fun main() {\n    print(\"L\u00fctfen bir say\u0131 girin: \")\n    val sayiStr = readLine()\n\n    try {\n        val sayi = sayiStr!!.toInt() \/\/ !! ile String? -> String\n        println(\"Girdi\u011finiz say\u0131: $sayi\")\n    } catch (e: NumberFormatException) {\n        println(\"Hata: Ge\u00e7ersiz say\u0131 format\u0131. L\u00fctfen sadece rakam girin.\")\n    } catch (e: NullPointerException) {\n        println(\"Hata: Girdi bo\u015f olamaz.\")\n    }\n}<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, \u00f6zellikle kullan\u0131c\u0131dan beklenen format\u0131n d\u0131\u015f\u0131na \u00e7\u0131kabilecek girdilerde daha sa\u011flam programlar yazmak i\u00e7in \u00f6nemlidir.<\/p>\n<h4>\u00d6rnekler<\/h4>\n<pre><code class=\"language-kotlin\">fun main() {\n    \/\/ \u0130ki say\u0131y\u0131 toplayan basit bir program\n    print(\"Birinci say\u0131y\u0131 girin: \")\n    val sayi1Str = readLine()\n    print(\"\u0130kinci say\u0131y\u0131 girin: \")\n    val sayi2Str = readLine()\n\n    val sayi1 = sayi1Str?.toIntOrNull()\n    val sayi2 = sayi2Str?.toIntOrNull()\n\n    if (sayi1 != null && sayi2 != null) {\n        val toplam = sayi1 + sayi2\n        println(\"Say\u0131lar\u0131n toplam\u0131: $toplam\")\n    } else {\n        println(\"Ge\u00e7ersiz say\u0131 girdisi. L\u00fctfen sadece tam say\u0131 girin.\")\n    }\n\n    \/\/ Kullan\u0131c\u0131dan evet\/hay\u0131r yan\u0131t\u0131 alma\n    print(\"Devam etmek ister misiniz? (evet\/hay\u0131r): \")\n    val yanit = readLine()?.toLowerCase() \/\/ K\u00fc\u00e7\u00fck harfe \u00e7evirerek kar\u015f\u0131la\u015ft\u0131rma\n\n    if (yanit == \"evet\") {\n        println(\"\u0130\u015fleme devam ediliyor...\")\n    } else if (yanit == \"hay\u0131r\") {\n        println(\"\u0130\u015flem iptal edildi.\")\n    } else {\n        println(\"Anla\u015f\u0131lmayan yan\u0131t. L\u00fctfen 'evet' veya 'hay\u0131r' girin.\")\n    }\n}<\/code><\/pre>\n<h3>Scanner S\u0131n\u0131f\u0131 (java.util.Scanner)<\/h3>\n<p>Kotlin, <code>readLine()<\/code> gibi basit ve do\u011frudan bir fonksiyona sahip olsa da, daha karma\u015f\u0131k girdi senaryolar\u0131 i\u00e7in Java&#8217;n\u0131n zengin <code>java.util.Scanner<\/code> s\u0131n\u0131f\u0131n\u0131 kullanabilir. <code>Scanner<\/code>, \u00f6zellikle farkl\u0131 veri tiplerini okuma, belirte\u00e7lere (delimiters) g\u00f6re ayr\u0131\u015ft\u0131rma ve daha esnek girdi i\u015fleme yetenekleri sunar.<\/p>\n<h4>Neden Scanner?<\/h4>\n<p><code>readLine()<\/code> tek bir sat\u0131r\u0131 <code>String<\/code> olarak okurken, <code>Scanner<\/code> daha gran\u00fcler kontrol sa\u011flar.<\/p>\n<p>*   <strong>\u00c7e\u015fitli Veri Tipleri<\/strong>: <code>nextInt()<\/code>, <code>nextDouble()<\/code>, <code>nextBoolean()<\/code> gibi metodlarla do\u011frudan farkl\u0131 veri tiplerini okuyabilir.<br \/>\n*   <strong>Belirte\u00e7lere G\u00f6re Ayr\u0131\u015ft\u0131rma<\/strong>: Varsay\u0131lan olarak bo\u015fluk karakterlerini belirte\u00e7 olarak kullanarak girdiyi par\u00e7alara ay\u0131rabilir. \u00d6zel belirte\u00e7ler de tan\u0131mlanabilir.<br \/>\n*   <strong>Ak\u0131\u015ftan Okuma<\/strong>: Sadece konsoldan de\u011fil, dosyalardan veya di\u011fer girdi ak\u0131\u015flar\u0131ndan da okuma yapabilir.<\/p>\n<h4>Temel Kullan\u0131m<\/h4>\n<p><code>Scanner<\/code> s\u0131n\u0131f\u0131n\u0131 kullanmak i\u00e7in \u00f6ncelikle <code>java.util.Scanner<\/code>&#8216;\u0131 import etmeli ve <code>System.in<\/code> (standart girdi ak\u0131\u015f\u0131) ile bir <code>Scanner<\/code> nesnesi olu\u015fturmal\u0131y\u0131z.<\/p>\n<pre><code class=\"language-kotlin\">import java.util.Scanner\n\nfun main() {\n    val scanner = Scanner(System.<code>in<\/code>) \/\/ System.in, Java'n\u0131n standart girdi ak\u0131\u015f\u0131d\u0131r\n\n    print(\"Ad\u0131n\u0131z\u0131 ve ya\u015f\u0131n\u0131z\u0131 girin (\u00f6rnek: Ali 30): \")\n    val ad = scanner.next() \/\/ Bir sonraki belirte\u00e7le ayr\u0131lm\u0131\u015f token'\u0131 String olarak okur\n    val yas = scanner.nextInt() \/\/ Bir sonraki token'\u0131 Int olarak okur\n\n    println(\"Merhaba, $ad! $yas ya\u015f\u0131ndas\u0131n.\")\n\n    scanner.close() \/\/ Kaynaklar\u0131 serbest b\u0131rakmak \u00f6nemlidir\n}<\/code><\/pre>\n<h4>Farkl\u0131 Veri Tiplerini Okuma<\/h4>\n<p><code>Scanner<\/code>&#8216;\u0131n en b\u00fcy\u00fck avantajlar\u0131ndan biri, farkl\u0131 veri tiplerini do\u011frudan okuyabilmesidir:<\/p>\n<p>*   <code>next()<\/code>: Bir sonraki token&#8217;\u0131 (bo\u015flukla ayr\u0131lm\u0131\u015f kelime) <code>String<\/code> olarak okur.<br \/>\n*   <code>nextLine()<\/code>: Bir sonraki sat\u0131r\u0131n tamam\u0131n\u0131 <code>String<\/code> olarak okur.<br \/>\n*   <code>nextInt()<\/code>: Bir sonraki token&#8217;\u0131 <code>Int<\/code> olarak okur.<br \/>\n*   <code>nextLong()<\/code>: Bir sonraki token&#8217;\u0131 <code>Long<\/code> olarak okur.<br \/>\n*   <code>nextDouble()<\/code>: Bir sonraki token&#8217;\u0131 <code>Double<\/code> olarak okur.<br \/>\n*   <code>nextBoolean()<\/code>: Bir sonraki token&#8217;\u0131 <code>Boolean<\/code> olarak okur.<\/p>\n<p>Ayr\u0131ca, <code>hasNext()<\/code>, <code>hasNextInt()<\/code>, <code>hasNextLine()<\/code> gibi metodlar, girdi ak\u0131\u015f\u0131nda belirli bir tipte bir sonraki token&#8217;\u0131n olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in kullan\u0131l\u0131r. Bu, girdi do\u011frulamas\u0131 ve hata y\u00f6netimi i\u00e7in faydal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">import java.util.Scanner\n\nfun main() {\n    val scanner = Scanner(System.<code>in<\/code>)\n\n    print(\"Bir tam say\u0131 girin: \")\n    if (scanner.hasNextInt()) { \/\/ Girdinin tam say\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol et\n        val sayi = scanner.nextInt()\n        println(\"Girdi\u011finiz tam say\u0131: $sayi\")\n    } else {\n        println(\"Ge\u00e7ersiz tam say\u0131 girdisi.\")\n        scanner.next() \/\/ Ge\u00e7ersiz token'\u0131 t\u00fcket, aksi halde sonsuz d\u00f6ng\u00fcye girer\n    }\n\n    \/\/ next() vs nextLine() fark\u0131\n    \/\/ nextInt() gibi metodlar sadece say\u0131y\u0131 okur, sat\u0131r sonu karakterini ak\u0131\u015fta b\u0131rak\u0131r.\n    \/\/ nextLine() \u00e7a\u011fr\u0131lmadan \u00f6nce bu sat\u0131r sonu karakteri t\u00fcketilmelidir.\n    scanner.nextLine() \/\/ \u00d6nceki nextInt() taraf\u0131ndan b\u0131rak\u0131lan sat\u0131r sonunu t\u00fcket\n\n    print(\"\u015eehrinizi girin: \")\n    val sehir = scanner.nextLine() \/\/ T\u00fcm sat\u0131r\u0131 okur\n    println(\"Ya\u015fad\u0131\u011f\u0131n\u0131z \u015fehir: $sehir\")\n\n    scanner.close()\n}<\/code><\/pre>\n<p><code>nextInt()<\/code>, <code>nextDouble()<\/code> gibi metodlar, say\u0131sal de\u011feri okuduktan sonra Enter tu\u015fuyla girilen sat\u0131r sonu karakterini girdi ak\u0131\u015f\u0131nda b\u0131rak\u0131r. E\u011fer hemen ard\u0131ndan <code>nextLine()<\/code> \u00e7a\u011fr\u0131l\u0131rsa, bu kalan sat\u0131r sonu karakteri <code>nextLine()<\/code> taraf\u0131ndan okunur ve bo\u015f bir string d\u00f6nd\u00fcr\u00fcl\u00fcr. Bu yayg\u0131n bir hatad\u0131r ve <code>nextLine()<\/code> \u00e7a\u011fr\u0131lmadan \u00f6nce <code>scanner.nextLine()<\/code> \u00e7a\u011fr\u0131larak bu art\u0131k sat\u0131r sonu karakterinin t\u00fcketilmesi gerekir.<\/p>\n<h4>Belirte\u00e7lere G\u00f6re Ayr\u0131\u015ft\u0131rma (Delimiters)<\/h4>\n<p><code>Scanner<\/code>, varsay\u0131lan olarak bo\u015fluk karakterlerini (bo\u015fluk, tab, yeni sat\u0131r) belirte\u00e7 olarak kullan\u0131r. Ancak, <code>useDelimiter()<\/code> metodu ile \u00f6zel belirte\u00e7ler tan\u0131mlanabilir. Bu, virg\u00fclle ayr\u0131lm\u0131\u015f de\u011ferler (CSV) veya di\u011fer \u00f6zel formatlardaki girdileri ayr\u0131\u015ft\u0131rmak i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">import java.util.Scanner\n\nfun main() {\n    val scanner = Scanner(System.<code>in<\/code>)\n\n    print(\"\u00dc\u00e7 say\u0131y\u0131 virg\u00fclle ay\u0131rarak girin (\u00f6rnek: 10,20,30): \")\n    val girdi = scanner.nextLine() \/\/ T\u00fcm sat\u0131r\u0131 string olarak al\n\n    val customScanner = Scanner(girdi) \/\/ Girdiyi yeni bir Scanner nesnesine ver\n    customScanner.useDelimiter(\",\") \/\/ Virg\u00fcl\u00fc belirte\u00e7 olarak ayarla\n\n    val s1 = customScanner.nextInt()\n    val s2 = customScanner.nextInt()\n    val s3 = customScanner.nextInt()\n\n    println(\"Say\u0131lar: $s1, $s2, $s3\")\n\n    customScanner.close()\n    scanner.close()\n}<\/code><\/pre>\n<h4>Kaynak Y\u00f6netimi<\/h4>\n<p><code>Scanner<\/code> bir girdi ak\u0131\u015f\u0131 \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in, i\u015fi bitti\u011finde <code>close()<\/code> metodunu \u00e7a\u011f\u0131rarak kaynaklar\u0131 serbest b\u0131rakmak \u00f6nemlidir. Aksi takdirde, kaynak s\u0131z\u0131nt\u0131lar\u0131na yol a\u00e7abilir. Kotlin&#8217;in <code>use<\/code> fonksiyonu, <code>Closeable<\/code> aray\u00fcz\u00fcn\u00fc uygulayan nesnelerle \u00e7al\u0131\u015f\u0131rken kaynaklar\u0131n otomatik olarak kapat\u0131lmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-kotlin\">import java.util.Scanner\n\nfun main() {\n    Scanner(System.<code>in<\/code>).use { scanner ->\n        print(\"Ad\u0131n\u0131z: \")\n        val ad = scanner.nextLine()\n        println(\"Merhaba, $ad!\")\n    } \/\/ 'use' blo\u011fu bitti\u011finde scanner otomatik olarak kapan\u0131r\n}<\/code><\/pre>\n<h4>readLine() vs Scanner<\/h4>\n<p>Hangi y\u00f6ntemin kullan\u0131laca\u011f\u0131, ihtiyaca ve karma\u015f\u0131kl\u0131\u011fa ba\u011fl\u0131d\u0131r:<\/p>\n<p>*   <strong><code>readLine()<\/code><\/strong>:<br \/>\n    *   <strong>Avantajlar\u0131<\/strong>: Basit, Kotlin&#8217;e \u00f6zg\u00fc, tek bir sat\u0131r metin okumak i\u00e7in ideal.<br \/>\n    *   <strong>Dezavantajlar\u0131<\/strong>: Her zaman <code>String?<\/code> d\u00f6nd\u00fcr\u00fcr, farkl\u0131 veri tiplerine d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in manuel olarak <code>toIntOrNull()<\/code> gibi fonksiyonlar kullan\u0131lmal\u0131d\u0131r. Belirte\u00e7lere g\u00f6re ayr\u0131\u015ft\u0131rma i\u00e7in ek kod yazmak gerekir.<br \/>\n    *   <strong>Ne Zaman Kullan\u0131l\u0131r<\/strong>: Kullan\u0131c\u0131dan tek bir metin sat\u0131r\u0131, bir say\u0131 veya basit bir boolean de\u011feri bekledi\u011finizde.<\/p>\n<p>*   <strong><code>Scanner<\/code><\/strong>:<br \/>\n    *   <strong>Avantajlar\u0131<\/strong>: Farkl\u0131 veri tiplerini do\u011frudan okuma, belirte\u00e7lere g\u00f6re ayr\u0131\u015ft\u0131rma, girdi ak\u0131\u015f\u0131n\u0131 daha esnek y\u00f6netme yetene\u011fi. <code>hasNextX()<\/code> metodlar\u0131 ile girdi do\u011frulamas\u0131 daha kolayd\u0131r.<br \/>\n    *   <strong>Dezavantajlar\u0131<\/strong>: <code>java.util.Scanner<\/code> s\u0131n\u0131f\u0131n\u0131 import etmeyi gerektirir, <code>nextLine()<\/code> sorunlar\u0131 gibi k\u00fc\u00e7\u00fck tuzaklar\u0131 vard\u0131r, <code>readLine()<\/code>&#8216;a g\u00f6re biraz daha fazla kurulum gerektirir.<br \/>\n    *   <strong>Ne Zaman Kullan\u0131l\u0131r<\/strong>: Kullan\u0131c\u0131dan farkl\u0131 tiplerde birden fazla girdi bekledi\u011finizde, girdiyi belirli belirte\u00e7lere g\u00f6re ayr\u0131\u015ft\u0131rman\u0131z gerekti\u011finde veya dosya gibi di\u011fer girdi ak\u0131\u015flar\u0131ndan okuma yaparken.<\/p>\n<p>Genel olarak, basit tek sat\u0131r girdiler i\u00e7in <code>readLine()<\/code> tercih edilirken, daha karma\u015f\u0131k ve \u00e7oklu girdi senaryolar\u0131nda <code>Scanner<\/code> daha g\u00fc\u00e7l\u00fc ve esnek bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<h4>\u00d6rnekler<\/h4>\n<pre><code class=\"language-kotlin\">import java.util.Scanner\n\nfun main() {\n    Scanner(System.<code>in<\/code>).use { scanner ->\n        println(\"Hesap Makinesi\")\n        print(\"\u0130lk say\u0131y\u0131 girin: \")\n        val num1 = if (scanner.hasNextDouble()) scanner.nextDouble() else {\n            println(\"Ge\u00e7ersiz say\u0131 girdisi. \u00c7\u0131k\u0131l\u0131yor.\")\n            return\n        }\n        scanner.nextLine() \/\/ Sat\u0131r sonunu t\u00fcket\n\n        print(\"\u0130kinci say\u0131y\u0131 girin: \")\n        val num2 = if (scanner.hasNextDouble()) scanner.nextDouble() else {\n            println(\"Ge\u00e7ersiz say\u0131 girdisi. \u00c7\u0131k\u0131l\u0131yor.\")\n            return\n        }\n        scanner.nextLine() \/\/ Sat\u0131r sonunu t\u00fcket\n\n        print(\"Operat\u00f6r\u00fc girin (+, -, *, \/): \")\n        val operator = scanner.nextLine()\n\n        val result = when (operator) {\n            \"+\" -> num1 + num2\n            \"-\" -> num1 - num2\n            \"<em>\" -> num1 <\/em> num2\n            \"\/\" -> {\n                if (num2 != 0.0) num1 \/ num2 else {\n                    println(\"S\u0131f\u0131ra b\u00f6lme hatas\u0131!\")\n                    return\n                }\n            }\n            else -> {\n                println(\"Ge\u00e7ersiz operat\u00f6r.\")\n                return\n            }\n        }\n        println(\"Sonu\u00e7: $result\")\n    }\n}<\/code><\/pre>\n<h3>Kotlin REPL (Read-Eval-Print Loop)<\/h3>\n<p>REPL (Read-Eval-Print Loop), etkile\u015fimli bir programlama ortam\u0131d\u0131r. Geli\u015ftiricilerin kod par\u00e7ac\u0131klar\u0131n\u0131 an\u0131nda \u00e7al\u0131\u015ft\u0131rmas\u0131na, sonu\u00e7lar\u0131n\u0131 g\u00f6rmesine ve program\u0131n durumunu interaktif olarak incelemesine olanak tan\u0131r. Kotlin REPL, \u00f6zellikle dilin \u00f6zelliklerini denemek, k\u00fc\u00e7\u00fck kod par\u00e7ac\u0131klar\u0131n\u0131 test etmek veya bir k\u00fct\u00fcphanenin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamak i\u00e7in paha bi\u00e7ilmez bir ara\u00e7t\u0131r.<\/p>\n<h4>REPL Nedir?<\/h4>\n<p>REPL, ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi d\u00f6rt ana ad\u0131m\u0131 tekrarlayan bir d\u00f6ng\u00fcd\u00fcr:<\/p>\n<p>1.  <strong>Read (Oku)<\/strong>: Kullan\u0131c\u0131n\u0131n girdi\u011fi kodu okur.<br \/>\n2.  <strong>Eval (De\u011ferlendir)<\/strong>: Okunan kodu de\u011ferlendirir\/\u00e7al\u0131\u015ft\u0131r\u0131r.<br \/>\n3.  <strong>Print (Yazd\u0131r)<\/strong>: \u00c7al\u0131\u015ft\u0131rman\u0131n sonucunu kullan\u0131c\u0131ya yazd\u0131r\u0131r.<br \/>\n4.  <strong>Loop (D\u00f6ng\u00fc)<\/strong>: Tekrar ilk ad\u0131ma d\u00f6ner ve yeni bir girdi bekler.<\/p>\n<p>Bu d\u00f6ng\u00fc, an\u0131nda geri bildirim sa\u011flayarak h\u0131zl\u0131 deneme ve yan\u0131lma s\u00fcre\u00e7lerini destekler.<\/p>\n<h4>REPL&#8217;i Ba\u015flatma<\/h4>\n<p>Kotlin REPL&#8217;i ba\u015flatmak i\u00e7in, Kotlin derleyicisinin (genellikle <code>kotlinc<\/code>) veya Kotlin \u00e7al\u0131\u015fma zaman\u0131n\u0131n (<code>kotlin<\/code>) kurulu olmas\u0131 gerekir. Komut sat\u0131r\u0131ndan <code>kotlin<\/code> yaz\u0131p Enter&#8217;a basmak yeterlidir:<\/p>\n<pre><code class=\"language-bash\">$ kotlin\nWelcome to Kotlin version 1.9.22 (JRE 17.0.9+8-LTS)\nType :help for help, :quit to exit\n>>><\/code><\/pre>\n<p><code>>>><\/code> i\u015fareti, REPL&#8217;in girdi bekledi\u011fini g\u00f6sterir.<\/p>\n<h4>Temel Kullan\u0131m<\/h4>\n<p>REPL&#8217;de do\u011frudan Kotlin kodunu yazabilir ve Enter tu\u015funa basarak an\u0131nda \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<pre><code class=\"language-kotlin\">>>> println(\"Merhaba REPL!\")\nMerhaba REPL!\n>>> val x = 10\n>>> val y = 20\n>>> x + y\n30\n>>> fun topla(a: Int, b: Int) = a + b\n>>> topla(x, y)\n30\n>>> val isim = readLine()\nJohn Doe\n>>> println(\"Ho\u015f geldin, $isim\")\nHo\u015f geldin, John Doe<\/code><\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc gibi, de\u011fi\u015fkenler tan\u0131mlanabilir, fonksiyonlar olu\u015fturulabilir ve \u00e7a\u011fr\u0131labilir, hatta <code>readLine()<\/code> gibi etkile\u015fimli fonksiyonlar bile kullan\u0131labilir. Her ifadenin sonucu an\u0131nda ekrana yazd\u0131r\u0131l\u0131r.<\/p>\n<h4>REPL Komutlar\u0131<\/h4>\n<p>REPL, \u00f6zel komutlarla y\u00f6netilebilir. Bu komutlar <code>:<\/code> ile ba\u015flar:<\/p>\n<p>*   <strong><code>:help<\/code><\/strong>: Mevcut komutlar\u0131n listesini ve a\u00e7\u0131klamalar\u0131n\u0131 g\u00f6sterir.<br \/>\n*   <strong><code>:quit<\/code> veya <code>:q<\/code><\/strong>: REPL oturumundan \u00e7\u0131kar.<br \/>\n*   <strong><code>:vars<\/code><\/strong>: Ge\u00e7erli oturumda tan\u0131mlanm\u0131\u015f t\u00fcm de\u011fi\u015fkenleri ve tiplerini listeler.<br \/>\n*   <strong><code>:fun<\/code><\/strong>: Ge\u00e7erli oturumda tan\u0131mlanm\u0131\u015f t\u00fcm fonksiyonlar\u0131 listeler.<br \/>\n*   <strong><code>:reset<\/code><\/strong>: REPL ortam\u0131n\u0131 s\u0131f\u0131rlar, tan\u0131mlanm\u0131\u015f t\u00fcm de\u011fi\u015fkenleri ve fonksiyonlar\u0131 siler.<br \/>\n*   <strong><code>:load <dosya_yolu><\/code><\/strong>: Belirtilen Kotlin dosyas\u0131ndaki kodu REPL oturumuna y\u00fckler ve \u00e7al\u0131\u015ft\u0131r\u0131r.<br \/>\n*   <strong><code>:paste<\/code><\/strong>: \u00c7ok sat\u0131rl\u0131 kod bloklar\u0131n\u0131 yap\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r. Yap\u0131\u015ft\u0131rma moduna girer, <code>Ctrl+D<\/code> (Unix\/Linux\/macOS) veya <code>Ctrl+Z<\/code> (Windows) ile \u00e7\u0131k\u0131l\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">>>> :vars\nval x: kotlin.Int = 10\nval y: kotlin.Int = 20\nval isim: kotlin.String = \"John Doe\"\n\n>>> :fun\nfun topla(a: kotlin.Int, b: kotlin.Int): kotlin.Int\n\n>>> :reset\nAll local changes in the REPL have been reset.\n>>> x\nerror: unresolved reference: x<\/code><\/pre>\n<h4>Avantajlar\u0131 ve Kullan\u0131m Senaryolar\u0131<\/h4>\n<p>Kotlin REPL&#8217;in sundu\u011fu avantajlar ve yayg\u0131n kullan\u0131m senaryolar\u0131 \u015funlard\u0131r:<\/p>\n<p>*   <strong>H\u0131zl\u0131 \u00d6\u011frenme ve Deneme<\/strong>: Yeni ba\u015flayanlar i\u00e7in Kotlin s\u00f6zdizimini ve temel \u00f6zelliklerini an\u0131nda test etmek i\u00e7in m\u00fckemmeldir.<br \/>\n*   <strong>K\u00fct\u00fcphane Fonksiyonlar\u0131n\u0131 Ke\u015ffetme<\/strong>: Bilinmeyen bir k\u00fct\u00fcphanenin veya API&#8217;nin belirli bir fonksiyonunun nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 h\u0131zl\u0131ca denemek i\u00e7in idealdir.<br \/>\n*   <strong>Hata Ay\u0131klama ve K\u00fc\u00e7\u00fck Testler<\/strong>: Bir program\u0131n belirli bir b\u00f6l\u00fcm\u00fcndeki mant\u0131\u011f\u0131 veya bir ifadenin sonucunu h\u0131zl\u0131ca kontrol etmek i\u00e7in kullan\u0131labilir.<br \/>\n*   <strong>Prototipleme<\/strong>: Tam bir proje olu\u015fturmadan \u00f6nce k\u00fc\u00e7\u00fck fikirleri veya algoritmalar\u0131 h\u0131zl\u0131ca prototiplemek i\u00e7in uygundur.<br \/>\n*   <strong>Komut Sat\u0131r\u0131 Betikleri<\/strong>: Basit, tek seferlik g\u00f6revler i\u00e7in komut sat\u0131r\u0131ndan h\u0131zl\u0131ca kod \u00e7al\u0131\u015ft\u0131rmak.<\/p>\n<h4>\u00d6rnekler<\/h4>\n<pre><code class=\"language-kotlin\">>>> \/\/ Basit bir hesaplama\n>>> val radius = 5.0\n>>> val pi = 3.14159\n>>> val area = pi <em> radius <\/em> radius\n>>> println(\"Dairenin alan\u0131: $area\")\nDairenin alan\u0131: 78.53975\n\n>>> \/\/ Bir liste \u00fczerinde i\u015flem\n>>> val numbers = listOf(1, 2, 3, 4, 5)\n>>> val squaredNumbers = numbers.map { it * it }\n>>> println(squaredNumbers)\n[1, 4, 9, 16, 25]\n\n>>> \/\/ Ko\u015fullu ifade\n>>> val temperature = 28\n>>> val message = if (temperature > 25) \"\u00c7ok s\u0131cak!\" else \"Hava g\u00fczel.\"\n>>> println(message)\n\u00c7ok s\u0131cak!\n\n>>> \/\/ Fonksiyon tan\u0131mlama ve \u00e7a\u011f\u0131rma\n>>> fun greet(name: String) = \"Merhaba, $name!\"\n>>> greet(\"Kotlin\")\nMerhaba, Kotlin!\n\n>>> \/\/ S\u0131n\u0131f tan\u0131mlama ve nesne olu\u015fturma\n>>> class Person(val name: String, val age: Int) {\n...     fun introduce() = \"Benim ad\u0131m $name ve $age ya\u015f\u0131nday\u0131m.\"\n... }\n>>> val person1 = Person(\"Elif\", 28)\n>>> person1.introduce()\nBenim ad\u0131m Elif ve 28 ya\u015f\u0131nday\u0131m.<\/code><\/pre>\n<p>REPL, Kotlin geli\u015ftirme deneyiminin \u00f6nemli bir par\u00e7as\u0131d\u0131r ve h\u0131zl\u0131 iterasyonlar i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r.<\/p>\n<h3>En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>Konsol girdisi ve \u00e7\u0131kt\u0131s\u0131 ile \u00e7al\u0131\u015f\u0131rken, uygulamalar\u0131n\u0131z\u0131n daha sa\u011flam, kullan\u0131c\u0131 dostu ve s\u00fcrd\u00fcr\u00fclebilir olmas\u0131 i\u00e7in baz\u0131 en iyi uygulamalar\u0131 takip etmek \u00f6nemlidir.<\/p>\n<h4>Kullan\u0131c\u0131 Giri\u015fini Do\u011frulama<\/h4>\n<p>Kullan\u0131c\u0131dan al\u0131nan her t\u00fcrl\u00fc girdi, potansiyel olarak ge\u00e7ersiz veya beklenmedik olabilir. Her zaman girdiyi beklenen formata uygun olup olmad\u0131\u011f\u0131n\u0131 kontrol edin.<\/p>\n<p>*   <strong>Null Kontrol\u00fc<\/strong>: <code>readLine()<\/code>&#8216;\u0131n <code>String?<\/code> d\u00f6nd\u00fcrd\u00fc\u011f\u00fcn\u00fc unutmay\u0131n. <code>?.<\/code> g\u00fcvenli \u00e7a\u011fr\u0131 operat\u00f6r\u00fcn\u00fc, Elvis operat\u00f6r\u00fcn\u00fc (<code>?:<\/code>) veya a\u00e7\u0131k null kontrol\u00fcn\u00fc (<code>if (input != null)<\/code>) kullan\u0131n.<br \/>\n*   <strong>Veri Tipi D\u00f6n\u00fc\u015f\u00fcm\u00fc Hatalar\u0131<\/strong>: <code>toIntOrNull()<\/code>, <code>toDoubleOrNull()<\/code> gibi g\u00fcvenli d\u00f6n\u00fc\u015f\u00fcm fonksiyonlar\u0131n\u0131 tercih edin. E\u011fer <code>toInt()<\/code> gibi do\u011frudan d\u00f6n\u00fc\u015f\u00fcm fonksiyonlar\u0131 kullan\u0131yorsan\u0131z, <code>NumberFormatException<\/code> gibi hatalar\u0131 yakalamak i\u00e7in <code>try-catch<\/code> bloklar\u0131n\u0131 kullan\u0131n.<br \/>\n*   <strong>Mant\u0131ksal Do\u011frulama<\/strong>: Say\u0131lar\u0131n belirli bir aral\u0131kta olup olmad\u0131\u011f\u0131n\u0131, string&#8217;lerin belirli bir desene uyup uymad\u0131\u011f\u0131n\u0131 (regex kullanarak) veya boolean de\u011ferlerin do\u011fru formatta olup olmad\u0131\u011f\u0131n\u0131 kontrol edin.<\/p>\n<pre><code class=\"language-kotlin\">print(\"L\u00fctfen 1 ile 10 aras\u0131nda bir say\u0131 girin: \")\nval input = readLine()\nval number = input?.toIntOrNull()\n\nif (number == null || number < 1 || number > 10) {\n    println(\"Ge\u00e7ersiz girdi. L\u00fctfen belirtilen aral\u0131kta bir say\u0131 girin.\")\n} else {\n    println(\"Girdi\u011finiz say\u0131: $number\")\n}<\/code><\/pre>\n<h4>Hata Y\u00f6netimi<\/h4>\n<p>Girdi okuma veya d\u00f6n\u00fc\u015ft\u00fcrme s\u0131ras\u0131nda olu\u015fabilecek hatalar\u0131 \u00f6ng\u00f6r\u00fcn ve kullan\u0131c\u0131ya anlaml\u0131 geri bildirim sa\u011flay\u0131n. Program\u0131n aniden \u00e7\u00f6kmesi yerine, hatay\u0131 a\u00e7\u0131klay\u0131n ve kullan\u0131c\u0131dan tekrar denemesini isteyin.<\/p>\n<p>*   <code>try-catch<\/code> bloklar\u0131n\u0131, \u00f6zellikle <code>Scanner<\/code> kullan\u0131rken veya <code>toInt()<\/code> gibi hata f\u0131rlatan fonksiyonlarla \u00e7al\u0131\u015f\u0131rken kullan\u0131n.<br \/>\n*   <code>toIntOrNull()<\/code> gibi fonksiyonlar\u0131n d\u00f6nd\u00fcrd\u00fc\u011f\u00fc <code>null<\/code> de\u011ferlerini do\u011fru \u015fekilde i\u015fleyin.<\/p>\n<h4>Kaynaklar\u0131 Kapatma<\/h4>\n<p><code>java.util.Scanner<\/code> gibi girdi\/\u00e7\u0131kt\u0131 ak\u0131\u015flar\u0131yla \u00e7al\u0131\u015fan nesneler, i\u015fleri bitti\u011finde kapat\u0131lmal\u0131d\u0131r. Bu, kaynak s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nler. Kotlin&#8217;in <code>use<\/code> fonksiyonu, <code>Closeable<\/code> aray\u00fcz\u00fcn\u00fc uygulayan nesneler i\u00e7in otomatik kaynak y\u00f6netimini sa\u011flar ve bu konuda en iyi yakla\u015f\u0131md\u0131r.<\/p>\n<pre><code class=\"language-kotlin\">import java.util.Scanner\n\nScanner(System.<code>in<\/code>).use { scanner ->\n    \/\/ Scanner ile i\u015flemler\n} \/\/ scanner otomatik olarak kapat\u0131l\u0131r<\/code><\/pre>\n<h4>Anla\u015f\u0131l\u0131r \u00c7\u0131kt\u0131 Sa\u011flama<\/h4>\n<p>Kullan\u0131c\u0131ya verilen \u00e7\u0131kt\u0131lar\u0131n a\u00e7\u0131k, \u00f6zl\u00fc ve anla\u015f\u0131l\u0131r oldu\u011fundan emin olun.<\/p>\n<p>*   <strong>Kullan\u0131c\u0131ya Y\u00f6nlendirme<\/strong>: Kullan\u0131c\u0131dan ne bekledi\u011finizi a\u00e7\u0131k\u00e7a belirtin (\u00f6rne\u011fin, &#8220;Ad\u0131n\u0131z\u0131 girin:&#8221;, &#8220;Evet veya Hay\u0131r (E\/H) girin:&#8221;).<br \/>\n*   <strong>Dinamik Mesajlar<\/strong>: String \u015fablonlar\u0131n\u0131 kullanarak \u00e7\u0131kt\u0131lar\u0131 daha ki\u015fisel ve bilgilendirici hale getirin.<br \/>\n*   <strong>Formatlama<\/strong>: Say\u0131sal de\u011ferleri (\u00f6zellikle para birimi veya ondal\u0131k say\u0131lar) okunakl\u0131 bir \u015fekilde bi\u00e7imlendirin. <code>String.format()<\/code> veya Kotlin&#8217;in <code>format()<\/code> uzant\u0131 fonksiyonunu kullan\u0131n.<br \/>\n*   <strong>Bo\u015f Sat\u0131rlar<\/strong>: Okunabilirli\u011fi art\u0131rmak i\u00e7in <code>println()<\/code> ile bo\u015f sat\u0131rlar ekleyerek \u00e7\u0131kt\u0131lar\u0131 grupland\u0131r\u0131n.<\/p>\n<pre><code class=\"language-kotlin\">println(\"--- Kullan\u0131c\u0131 Bilgi Sistemi ---\")\nprint(\"Ad\u0131n\u0131z: \")\nval ad = readLine() ?: \"Misafir\"\nprint(\"Ya\u015f\u0131n\u0131z: \")\nval yasStr = readLine()\nval yas = yasStr?.toIntOrNull()\n\nprintln(\"\\n--- Girilen Bilgiler ---\")\nprintln(\"Ad: $ad\")\nprintln(\"Ya\u015f: ${yas ?: \"Bilinmiyor\"}\")\nif (yas != null && yas >= 18) {\n    println(\"Durum: Re\u015fit\")\n} else if (yas != null) {\n    println(\"Durum: Re\u015fit De\u011fil\")\n}\nprintln(\"--------------------------\")<\/code><\/pre>\n<p>Bu uygulamalar, konsol tabanl\u0131 Kotlin uygulamalar\u0131n\u0131z\u0131n daha profesyonel ve kullan\u0131c\u0131 dostu olmas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, Kotlin&#8217;in konsol ile etkile\u015fim kurma mekanizmalar\u0131n\u0131 derinlemesine inceledik. <code>print()<\/code> ve <code>println()<\/code> fonksiyonlar\u0131 ile \u00e7\u0131kt\u0131 vermenin temellerini, String \u015fablonlar\u0131n\u0131n g\u00fcc\u00fcn\u00fc ve formatl\u0131 \u00e7\u0131kt\u0131 se\u00e7eneklerini \u00f6\u011frendik. Kullan\u0131c\u0131dan girdi almak i\u00e7in <code>readLine()<\/code> fonksiyonunun basitli\u011fini ve <code>String?<\/code> d\u00f6n\u00fc\u015f tipinin \u00f6nemini vurgulad\u0131k. Daha karma\u015f\u0131k girdi senaryolar\u0131 i\u00e7in Java&#8217;dan miras al\u0131nan <code>java.util.Scanner<\/code> s\u0131n\u0131f\u0131n\u0131n esnekli\u011fini, farkl\u0131 veri tiplerini okuma yetene\u011fini ve belirte\u00e7lere g\u00f6re ayr\u0131\u015ft\u0131rma \u00f6zelliklerini ke\u015ffettik. Son olarak, Kotlin REPL&#8217;in (Read-Eval-Print Loop) etkile\u015fimli yap\u0131s\u0131n\u0131, nas\u0131l ba\u015flat\u0131laca\u011f\u0131n\u0131, temel kullan\u0131m\u0131n\u0131 ve \u00f6\u011frenme, deneme ve prototipleme s\u00fcre\u00e7lerindeki paha bi\u00e7ilmez rol\u00fcn\u00fc ele ald\u0131k.<\/p>\n<p>Her arac\u0131n kendine \u00f6zg\u00fc avantajlar\u0131 ve kullan\u0131m senaryolar\u0131 vard\u0131r. Basit \u00e7\u0131kt\u0131lar ve tek sat\u0131rl\u0131k girdiler i\u00e7in <code>print()\/println()<\/code> ve <code>readLine()<\/code> yeterli olurken, farkl\u0131 veri tiplerini ayr\u0131\u015ft\u0131rma ve daha sa\u011flam girdi i\u015fleme gerektiren durumlarda <code>Scanner<\/code> daha uygun bir se\u00e7imdir. REPL ise, Kotlin dilini ke\u015ffetmek, k\u00fc\u00e7\u00fck kod par\u00e7ac\u0131klar\u0131n\u0131 test etmek ve an\u0131nda geri bildirim almak i\u00e7in ideal bir ortam sunar.<\/p>\n<p>Bu ara\u00e7lar\u0131 etkin bir \u015fekilde kullanarak, Kotlin geli\u015ftiricileri kullan\u0131c\u0131larla daha g\u00fc\u00e7l\u00fc ve etkili konsol tabanl\u0131 etkile\u015fimler kurabilir, hata ay\u0131klama s\u00fcre\u00e7lerini h\u0131zland\u0131rabilir ve genel olarak daha verimli bir geli\u015ftirme deneyimi ya\u015fayabilirler. Konsol etkile\u015fimi, her ne kadar modern uygulamalarda arka planda kalsa da, programlaman\u0131n temelini olu\u015fturmaya devam etmektedir ve Kotlin bu alanda geli\u015ftiricilere zengin bir ara\u00e7 seti sunmaktad\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Kotlin&#8217;de Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL\nKotlin, modern ve pragmatik bir programlama dili olarak, gel","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-32799","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 Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL - 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-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kotlin&#039;de Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL\" \/>\n<meta property=\"og:description\" content=\"Kotlin&#039;de Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL Kotlin, modern ve pragmatik bir programlama dili olarak, gel\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-26T00:41:03+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=\"22 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kotlin&#8217;de Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL\",\"datePublished\":\"2025-10-26T00:41:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/\"},\"wordCount\":2846,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/\",\"name\":\"Kotlin'de Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-26T00:41:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kotlin&#8217;de Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL\"}]},{\"@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 Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL - 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-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/","og_locale":"tr_TR","og_type":"article","og_title":"Kotlin'de Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL","og_description":"Kotlin'de Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL Kotlin, modern ve pragmatik bir programlama dili olarak, gel","og_url":"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-26T00:41:03+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"22 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kotlin&#8217;de Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL","datePublished":"2025-10-26T00:41:03+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/"},"wordCount":2846,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/","url":"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/","name":"Kotlin'de Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-26T00:41:03+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kotlinde-konsol-girdisi-ve-ciktisi-print-println-readline-scanner-ve-repl\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kotlin&#8217;de Konsol Girdisi ve \u00c7\u0131kt\u0131s\u0131: print(), println(), readLine(), Scanner ve REPL"}]},{"@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\/32799","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=32799"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32799\/revisions"}],"predecessor-version":[{"id":32800,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32799\/revisions\/32800"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32799"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32799"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32799"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}