<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Hakan Kuru on Medium]]></title>
        <description><![CDATA[Stories by Hakan Kuru on Medium]]></description>
        <link>https://medium.com/@Hakan-Kuru?source=rss-4b9d4551d026------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*Zs74WtgOKiilavpa</url>
            <title>Stories by Hakan Kuru on Medium</title>
            <link>https://medium.com/@Hakan-Kuru?source=rss-4b9d4551d026------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 07:53:59 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@Hakan-Kuru/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Storytel: Çalışmıyor O Zaman Kullanmamalıyım?]]></title>
            <link>https://medium.com/@Hakan-Kuru/storytel-%C3%A7al%C4%B1%C5%9Fm%C4%B1yor-o-zaman-kullanmamal%C4%B1y%C4%B1m-a761eb49435e?source=rss-4b9d4551d026------2</link>
            <guid isPermaLink="false">https://medium.com/p/a761eb49435e</guid>
            <category><![CDATA[storytel]]></category>
            <dc:creator><![CDATA[Hakan Kuru]]></dc:creator>
            <pubDate>Sun, 29 Mar 2026 19:03:16 GMT</pubDate>
            <atom:updated>2026-03-29T19:14:10.791Z</atom:updated>
            <content:encoded><![CDATA[<p>Yakın zamanda Storytel aboneliğimi başlattım. Her kitabı tek tek almak günümüz koşullarında gerçekten önemli bir maliyet haline geldi. Fakat… önemli bir sorun vardı: arka planda dinleyemiyorum.</p><p>Belki de uygulamayı indirip bu problemi yaşayan birçok kişi bu yüzden aboneliğini iptal etti. Forumları inceleyip kullanıcı şikayetlerini okudum. Birçok kişi farklı farklı problemlerden şikayet etmiş ama aralarında bir tane bile böyle bir sorun yaşayan göremedim. O zaman bu benim cihazımla ilgiliydi.</p><p>Aboneliği hemen iptal edip hayata devam etmeyi kendime yakıştıramadım ve araştırmaya başladım. Bu süreçte araştırdığım, uygulamanın arka planda çalışamamasına sebep olacak sorunları da burada anlatmak istedim.</p><h3>1. Versiyon</h3><p>7 yıl boyunca Android 8.1 kullanmış biri olarak telefonum uygulamaları yavaş yavaş desteklememeye başlamıştı. Hatta yeni telefon almamın en büyük sebepleri arasındaydı. Artık bu problemi yaşamamam gerekiyor çünkü Android 14 versiyonu oldukça yeni sayılabilecek bir versiyon olup, eğer 14’ü bile desteklemiyorsa %55–60’lık bir kullanıcı kitlesini çöpe atmış olacaktı.</p><p>Yine de Play Store’daki en güncel versiyon olup olmadığını kontrol ettim.</p><h3>2. İzinler</h3><p>Başlangıçta benden bildirimler için izin istemedi. Ben yine de bildirim izinlerini açtım. Yine olmayınca bildirim ayarlarından uygulamanın zorunlu, zorunsuz tüm bildirimlerine izin verdim. Ama maalesef değişen bir şey yok.</p><h3>3. Artık Beni Aşıyor?</h3><p>Konunun benim tahminlerimin ve yapabileceklerimin üstünde olabileceğini düşündüm. Belki benim cihazımın tam olarak desteklemediği bir şey vardı. Storytel destek ile iletişime geçtim. Başta izinler ve versiyon kontrolünü yapmamı istediler. Bunları zaten yapmıştım. Beni geçiştirmeden çözüm bulmak için iletişimde kaldılar. Son yapmamı istedikleri ve işe yarayan kısım: pil optimizasyonu.</p><h3>4. Hata Sebebi ve Çözüm</h3><p>Android sürümleri ilerledikçe sistemin arka plan uygulamalarına karşı giderek daha agresif davrandığını fark ediyoruz. Özellikle medya oynatıcı gibi sürekli çalışan uygulamalarda bu oldukça net.</p><p>Aslında problemin kaynağı, pil optimizasyonunu kapattıktan sonra uygulamanın sorunsuz şekilde arka planda çalışmaya başlamasıyla ortaya çıktı. Sorun ne uygulamanın versiyonuydu ne de izinlerdi. Sorun doğrudan Android’in kendisiydi.</p><p>Android, yıllar içinde arka planda çalışan uygulamalara karşı giderek daha katı kurallar koymaya başladı. Bu durum ilk olarak Android 6.0 Marshmallow ile gelen Doze Mode ile ortaya çıktı. Sistem, cihaz kullanılmadığında uygulamaların işlemci ve internet erişimini kısıtlayarak pil tasarrufu yapmaya başladı.</p><p>Android 8.0 Oreo ile birlikte bu yaklaşım biraz daha ileri taşındı. Artık arka planda çalışan servisler belirli bir süre sonra sistem tarafından otomatik olarak durduruluyor. Yani bir uygulama “ben arka planda çalışmaya devam edeceğim” demediği sürece, Android birkaç dakika içinde onu kapatabiliyor.</p><p>Android 9 Pie ve sonrasında daha da agresif hale geldi. Sistem, uygulamaları kullanım sıklığına göre sınıflandırıp az kullanılanların arka plan aktivitelerini ciddi şekilde kısıtlamaya başladı.</p><p>Benim yaşadığım senaryoda da tam olarak bu oldu. Uygulama arka planda çalışıyor gibi görünüyordu, bildirim çubuğunda media player duruyordu… ama birkaç dakika sonra sistem uygulamayı “gereksiz” olarak değerlendirip kapatıyordu. Bildirimin kaybolmasının sebebi de buydu.</p><p>Pil optimizasyonunu kapattığımda ise Android artık uygulamaya müdahale etmemeye başladı ve her şey normal şekilde çalıştı.</p><p>Android sürümleri yükseldikçe sistem daha akıllı hale geliyor ama aynı zamanda daha agresif davranıyor. Ve bunun arkasındaki temel motivasyon her zaman aynı: pil ömrünü uzatmak.</p><h3>Ne Anlatmak İstiyorum</h3><p>İster bir abonelik olsun, ister bir hayalimiz, ister aklımızdan geçen bir düşünce; “çalışmıyor, olmuyor, uygulama bozuk, ben yapamam” gibi önyargılar bizi hayatın güzelliklerinden uzaklaştırıyor. Eğer bir şeyi yapmak istiyorsak bu bahanelerin arkasına kaçmayı bırakmamız gerek. Ne zaman ki daha çözüm odaklı oluruz, işte o zaman yaşıyoruz demektir.</p><p>Son olarak bana hep çözüm odaklı yaklaşan <a href="https://medium.com/u/2b1bd5ee3ee8">Storytel Türkiye</a> ekibine teşekkür ederim.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a761eb49435e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Jetpack Compose Performans Optimizasyonu]]></title>
            <link>https://medium.com/@Hakan-Kuru/jetpack-compose-performans-optimizasyonu-a56bcb73e88a?source=rss-4b9d4551d026------2</link>
            <guid isPermaLink="false">https://medium.com/p/a56bcb73e88a</guid>
            <category><![CDATA[compose]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[android]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[jetpack-compose]]></category>
            <dc:creator><![CDATA[Hakan Kuru]]></dc:creator>
            <pubDate>Tue, 11 Feb 2025 23:51:02 GMT</pubDate>
            <atom:updated>2025-02-11T23:55:47.889Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/216/1*A08FPLXwentsNCi8jUfbwQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/273/1*Yh6KnUM6i45w9dlzmCYCOQ.png" /></figure><p>Jetpack Compose, Android geliştiricileri için modern, deklaratif bir UI oluşturma aracıdır. Doğru kullanıldığında esneklik ve hız kazandırır, ancak yanlış kullanımı ciddi performans sorunlarına neden olabilir. Kullanıcı arayüzünün beklenenden daha yavaş çalışması, uygulamanın donması veya cihazın aşırı kaynak tüketmesi gibi problemler, performans optimizasyonlarının göz ardı edilmesiyle ortaya çıkar.</p><p>Örneğin, gereksiz recomposition işlemleri CPU kullanımını artırırken, yanlış state yönetimi UI’nin yavaş ve düzensiz çalışmasına yol açabilir. Benzer şekilde, büyük veri kümelerini işlemek için yanlış listeleme bileşenlerinin kullanılması uygulamanın akıcılığını bozabilir. Bu yazıda, Jetpack Compose’un performansını optimize etmek için izlenmesi gereken en iyi uygulamaları detaylandıracağız.</p><h4>Jetpack Compose ve Recomposition Yönetimi</h4><p>Jetpack Compose, kullanıcı arayüzünü güncellemek için “Recomposition” adı verilen bir mekanizma kullanır. Bir state değiştiğinde, ilgili bileşenler yeniden oluşturulur. Ancak, gereksiz recomposition işlemleri performans kayıplarına yol açabilir.</p><p>Örneğin, bir state değişkeni remember kullanılmadan oluşturulursa, her recomposition sırasında tekrar oluşturulur ve bu gereksiz hesaplama yükü getirir. Bunun önüne geçmek için, değişmeyen veya sık değişmeyecek verileri remember ile saklamak gerekir. Benzer şekilde, hesaplamaların gereksiz yere çalışmasını önlemek için <strong><em>derivedStateOf</em></strong><em> </em>kullanarak sadece ilgili veriler değiştiğinde hesaplama yapmak en doğru yaklaşımdır.</p><p>Yanlış kullanım:</p><pre>var count = mutableStateOf(0) // Her recomposition&#39;da sıfırlanır</pre><p>Doğrusu:</p><pre>val count = remember { mutableStateOf(0) } // Değer korunur</pre><p>Yaygın bir hata da, UI bileşenlerinde gereksiz lambda ifadeleri kullanmaktır. Lambda fonksiyonları her çağrıldığında yeniden oluşturulabilir ve bu da gereksiz <strong><em>recomposition</em></strong>’lara sebep olabilir. Bunu önlemek için fonksiyon referansları kullanılmalıdır.</p><p>Yanlış kullanım:</p><pre>Button(onClick = { performAction() }) { Text(&quot;Tıkla&quot;) } // Her çağrıda yeni lambda oluşturulur</pre><p>Doğrusu:</p><pre>val updatedAction by rememberUpdatedState(performAction)<br>Button(onClick = { updatedAction() }) { Text(&quot;Tıkla&quot;) }<br>// Daha verimli</pre><h4>State Yönetimi ve Performans</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/299/1*-qyVfrXF7-ssf3ecdlvAyw.jpeg" /></figure><p>Jetpack Compose’da state yönetimi, performans üzerinde doğrudan etkili olan kritik bir konudur. Yanlış state kullanımı, gereksiz recomposition’lara sebep olabilir ve kullanıcı deneyimini olumsuz yönde etkileyebilir.</p><p>Örneğin, global olarak tanımlanmış state değişkenleri gereksiz recomposition’lara yol açabilir. Bunun yerine, yalnızca belirli bileşenler için gerekli olan state, mümkün olan en düşük kapsamda tutulmalıdır. State değişiklikleri gereksiz bileşenleri etkilememeli, yalnızca doğrudan bağlantılı olan bileşenleri güncellemelidir.</p><p>Yanlış kullanım:</p><pre>var username by mutableStateOf(&quot;&quot;) // Tüm bileşenleri etkileyebilir</pre><p>Doğrusu:</p><pre>val username = remember { mutableStateOf(&quot;&quot;) } // Sadece gerekli bileşen etkilenir</pre><p>Ayrıca, asenkron işlemler sırasında UI’nin donmasını önlemek için produceState ve LaunchedEffect gibi API’ler kullanılmalıdır. Örneğin, bir ağ isteği veya veritabanı sorgusu tamamlanana kadar UI’nin bloklanmasını önlemek için bu yaklaşımlar tercih edilmelidir.</p><h4>Lazy Lists Optimizasyonu</h4><p>Jetpack Compose, büyük veri kümeleri ile çalışırken <strong><em>LazyColumn</em></strong> ve LazyRow gibi bileşenleri kullanarak performans optimizasyonu sağlar. Ancak, yanlış kullanım performansı olumsuz etkileyebilir.</p><p>Yanlış yapılanlardan biri, LazyColumn yerine Column gibi statik bileşenlerin kullanılmasıdır. Bu durumda, Compose tüm öğeleri baştan oluşturur ve bellekte gereksiz yük oluşturur. Doğru yaklaşım, yalnızca görünen öğelerin oluşturulmasını sağlayan LazyColumn gibi bileşenleri kullanmaktır.</p><p>Yanlış kullanım:</p><pre>Column {<br>items.forEach { item -&gt;<br>Text(text = item.name)<br>}<br>}</pre><p>Doğrusu:</p><pre>LazyColumn {<br>items(items, key = { it.id }) { item -&gt;<br>Text(text = item.name)<br>    }<br>}</pre><p>Bir başka hata ise, LazyColumn içindeki öğelerin key() özelliğinin belirtilmemesidir. Key tanımlanmadığında, liste kaydırıldığında bile Compose hangi öğelerin değişmediğini anlamaz ve gereksiz yeniden çizim işlemleri gerçekleşir.</p><h4>Profiling ve Performans Ölçümü</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/225/1*KLueLyIlcglYUExAQCI8dg.jpeg" /></figure><p>Jetpack Compose’da performans sorunlarını tespit etmek ve gidermek için Android’in sunduğu analiz araçları kullanılmalıdır:</p><ul><li><strong>Layout Inspector</strong>: UI bileşenlerinin nasıl yeniden oluşturulduğunu ve gereksiz recomposition’ları görselleştirmek için kullanılır.</li><li><strong>Android Profiler</strong>: CPU, bellek ve UI performans analizlerini yapmak için kullanılır. Özellikle ağır çalışan işlemleri tespit etmek için faydalıdır.</li><li><strong>Compose Compiler Metrics</strong>: Compose bileşenlerinin recomposition ve yeniden çizim analizlerini yapmak için kullanılır. Derleme aşamasında, gereksiz recomposition’ları ve verimsiz kodları tespit etmeye yardımcı olur.</li><li><strong>JankStats API</strong>: UI performansını etkileyen gecikmeleri (jank) ölçmek için kullanılır. Kullanıcı deneyimini etkileyen kare düşüşlerini ve yavaşlıkları analiz etmeye yardımcı olur.</li></ul><p>Bazı geliştiriciler, performans ölçümleri için manuel zaman damgası alarak işlem süresi hesaplamaya çalışır. Ancak, bu yöntem güvenilir değildir ve yanıltıcı sonuçlar verebilir. Bunun yerine, Trace API gibi yerleşik araçların kullanılması önerilir.</p><h4>Diğer Performans İyileştirmeleri</h4><p>Jetpack Compose uygulamalarında performansı artırmak için şu teknikler de göz önünde bulundurulmalıdır:</p><ul><li><strong>Karmaşık UI bileşenlerini ayrı Composable fonksiyonlara bölmek</strong>: Büyük bileşenler, bağımsız parçalara ayrılmalıdır. Böylece gereksiz recomposition’lar en aza indirilebilir.</li><li><strong>Asenkron işlemleri optimize etmek</strong>: Ağ istekleri veya veritabanı işlemleri gibi işlemler LaunchedEffect, produceState veya rememberCoroutineScope ile yürütülmelidir.</li><li><strong>Görsel performansı artırmak</strong>: Ağır UI işlemleri için Canvas veya DrawScope gibi Compose’un optimize edilmiş çizim API’leri kullanılabilir.</li></ul><h4>Sonuç</h4><p>Jetpack Compose, modern Android UI geliştirmeyi hızlandıran güçlü bir araçtır. Ancak, yanlış kullanıldığında performans sorunlarına yol açabilir. Gereksiz recomposition’ların önlenmesi, state yönetiminin optimize edilmesi, Lazy list kullanımında dikkat edilmesi gerekenler ve performans analiz araçlarının etkin kullanımı ile daha hızlı ve akıcı bir kullanıcı deneyimi sağlanabilir.</p><p>Bu yazıda ele aldığımız en iyi uygulamalar, Jetpack Compose projelerinizde performansı artırmanıza yardımcı olacaktır. UI bileşenlerini nasıl yönettiğinize dikkat ederek, hem kullanıcılarınız hem de cihaz kaynakları için daha verimli uygulamalar geliştirebilirsiniz.</p><p>bir dahaki yazıda yine buluışmak dileğiyle…</p><p>Kaynakça:</p><p><a href="https://developer.android.com/develop/ui/compose/performance">Jetpack Compose Performance | Android Developers</a></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FSUkWZk0LuUI%3Fstart%3D82%26feature%3Doembed%26start%3D82&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DSUkWZk0LuUI&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FSUkWZk0LuUI%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/a23c157cf78a51e1c9147476613e7206/href">https://medium.com/media/a23c157cf78a51e1c9147476613e7206/href</a></iframe><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fs8h7GJTZa4E%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Ds8h7GJTZa4E&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fs8h7GJTZa4E%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/261442ff92f19854ed710a0ff5574859/href">https://medium.com/media/261442ff92f19854ed710a0ff5574859/href</a></iframe><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F_FtKhWvHiTg&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D_FtKhWvHiTg&amp;image=http%3A%2F%2Fi.ytimg.com%2Fvi%2F_FtKhWvHiTg%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/8e8ed84f6aa9f7e3c9b8541b9bd89fa4/href">https://medium.com/media/8e8ed84f6aa9f7e3c9b8541b9bd89fa4/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a56bcb73e88a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Yeni Bir Yıl, Yeni Bir Başlangıç]]></title>
            <link>https://medium.com/@Hakan-Kuru/yeni-bir-y%C4%B1l-yeni-bir-ba%C5%9Flang%C4%B1%C3%A7-7bcf3437f071?source=rss-4b9d4551d026------2</link>
            <guid isPermaLink="false">https://medium.com/p/7bcf3437f071</guid>
            <category><![CDATA[yeni-yıl]]></category>
            <category><![CDATA[başarı]]></category>
            <category><![CDATA[zaman]]></category>
            <category><![CDATA[planlama]]></category>
            <category><![CDATA[hedef]]></category>
            <dc:creator><![CDATA[Hakan Kuru]]></dc:creator>
            <pubDate>Thu, 16 Jan 2025 20:18:53 GMT</pubDate>
            <atom:updated>2025-01-16T20:18:53.655Z</atom:updated>
            <content:encoded><![CDATA[<h3>Zamanı Kontrol Etmek</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/696/0*9uKWr9lTHWH6zUfG.jpeg" /></figure><p><strong><em>“Mükemmellik bir eylem değil, bir alışkanlıktır.</em></strong><em>”</em> — Aristoteles</p><p>Takvimler 2025’i gösteriyor. Yeni bir yıl, yepyeni bir başlangıç. Hep olduğu gibi, bu yıl da hayatımızda değişiklikler yapmayı, kendimizi geliştirmeyi ve zamanımızı daha verimli kullanmayı hedefledik. Ama maalesef çoğumuzun bu kararları birkaç hafta içinde unuttuk. Peki, neden? 🤔</p><p>Ne demiş Aristoteles; değişim alışkanlıklarda gizli. Eylemi alışkanlık haline getirsek, artık ona odaklanmak zor olmuyor. Mesela sabahları dişlerinizi fırçalarken “Dişlerimi fırçalamalı mıyım?” diye sorgulamayız. Aynı şekilde, zamanı iyi yönetmek alışkanlık haline geldiğinde hayatınıza rahatça dahil olur.</p><p>Yeni bir yıl, her şeyi baştan değerlendirme fırsatı sunuyor. Ama unutmayalım ki değişim sadece hayallerle değil, somut adımlarla gelir. Bu yazıda, zamanı nasıl daha iyi yönetebileceğinizi konuşacak ve 2025’i hayatınızın en üretken yılına dönüştüreceğiz.<br>Bir düşünelim: Eğer zamanınızı kontrol altına alabilirsek, hayatımızı da kontrol altına almış olmaz mıyız? Hadi gelin, bunu nasıl başarabileceğimizi birlikte keşfedelim 🔑.</p><h3>Zaman Neden Kaçar Gibi Geliyor?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*3Efi_WzwgM_YJ8pr.png" /></figure><p>Bir düşünün: Yeni yılın ilk günündesiniz. Karar listenizi hazırladınız, daha üretken, daha düzenli ve hedef odaklı bir yıl geçirmek istiyorsunuz. Ama birkaç gün ya da hafta sonra bu heyecan kayboluyor. Kendinizi, 2024’teki aynı döngülerin içinde buluyorsunuz. Peki, neden?</p><p>Zamanı kontrol edemiyor gibi hissetmek çoğumuzun yaşadığı bir durum. Eminim bunun sebebi, dikkatimizi dağıtan bir işler ve yanlış alışkanlıklar yatıyor. Stanford Üniversitesi’nin yaptığı bir araştırma, insanların gün boyunca sürekli dikkatlerinin dağılmasının üretkenliği %40 oranında düşürdüğünü gösteriyor.</p><p>Bu durumdan kurtulmak için önce farkındalık geliştirmeliyiz. Zamanı kontrol etmenin sırrı, onun neden kayıp gittiğini anlamaktır. Dağınık bir masa, sürekli çalan telefon bildirimleri veya planlamanın eksikliği… Bunlar, zamanı düşman gibi hissettiren unsurlardır. Ancak bu düşmanı dostunuza çevirmek mümkündür 💪.</p><h3>Doğru Ortam, Doğru Başlangıç</h3><p>Her başarı bir başlangıçla başlar, ama bu başlangıcın gücü, çevrenizle doğrudan ilişkilidir. 2025’te sadece yeni kararlar değil, yeni bir düzen de oluşturmanız gerektiğini unutmayın.</p><p>Çevremiz genellikle üretkenliğimizin sessiz düşmanıdır. Karışık bir masa, dikkatinizi dağıtan bildirimler, huzursuz bir ortam… Bunlar, işlerinize odaklanmanızı engeller.</p><p>Bu değişimi başlatmak isterseniz, şu adımları izleyebilirsiniz:</p><ul><li><strong>Belirli bir çalışma alanı seçin:</strong> Bir masanız, bir odanız veya sevdiğiniz bir kütüphane olabilir 📚.</li><li><strong>Ritüeller oluşturun</strong>☕<strong>:</strong> Örneğin, her sabah kahvenizi içerken o günün planını yapabilirsiniz. Küçük alışkanlıklar, büyük düzenlerin temelini oluşturur. (Tam olarak hatırlamasam da, bir yazarın sabahları çalışmaya başlamadan önce her zaman bir pipo içtiğini duymuytum. Tabii siz benim gibi tütün ürünleri kullanmayın 😅 )</li></ul><p>Şimdi bir başlangıç yaptığımıza göre, Youtube’da rastladığım bir yöntemi anlatayım: Üç Şapka Kuralı.</p><h3>Üç Şapka: Mühendis, İşçi ve Yargıç</h3><p>Zaman yönetimi aslında bir role-play oyununa benzer 🎮. Her gün üç farklı şapka takmalısınız:</p><p>• <strong>Mühendis Şapkasını Takın: Planlamacı Olun<br></strong>Güne başlarken mühendis gibi düşünün 🧠. Hangi görevlerinizi tamamlamak istediğinizi netleştirin ve bunlar için makul süreler belirleyin. Parkinson Yasası’nı duydunuz mu? Bu yasa, bir işin ona ayrılan süre kadar uzayacağını söyler. Örneğin; bir ödev için size 1 ay süre verilirse, o ödev ne kadar kolay olursa olsun 1 ayda ancak biter.<br><strong><em>Öneri:</em></strong> Trello, Notion veya Google Calendar gibi dijital araçları kullanabilirsiniz. Bu uygulamalar işleri görselleştirmenize ve sıraya koymanıza yardımcı olur.</p><p>• <strong>İşçi Şapkasını Takın: Çalışmaya Başlayın<br></strong>Plan yapmak yeterli değildir; çalışmaya başlamak gerekir. Ama nasıl? Motivasyon eksikliği bazen harekete geçmeyi zorlaştırır. İşte burada <strong>“5 Dakika Kuralı”</strong> devreye giriyor. Mel Robbins’in bu yöntemine göre, bir işe yalnızca 5 dakika başlamak bile genellikle uzun bir süreye dönüşür.<br>Newton’un eylemsizlik yasasını hatırlayın:<strong><em> “Hareketsiz bir obje hareketsiz kalmaya devam eder. Ama hareket eden bir obje, hareket etmeye devam eder.”</em></strong> Başlamak, devam etmenin en büyük tetikleyicisidir.</p><p>• <strong>Yargıç Şapkasını Takın: Kendinizi Değerlendirin<br></strong>Günün sonunda, bir yargıç gibi değerlendirme yapın. Bu değerlendirme sadece işçiyi değil, mühendisi de kapsamalıdır. Kendinize şu soruları sorun:</p><p>• <em>Mühendis olarak:</em> Bugün kendime gerçekçi hedefler koymuş muydum? Önceliklerim doğru muydu? Planlama yaparken gözden kaçırdığım unsurlar nelerdi?</p><p>• <em>İşçi olarak:</em> Planladığım işleri ne kadar gerçekleştirdim? Hedeflerime ulaşmamı engelleyen şeyler nelerdi? Çalışma sürecimde dikkatimi dağıtan unsurlar var mıydı?</p><p>Bu tür bir değerlendirme, gelecekteki planlarınızın daha sağlam ve verimli olmasını sağlar.</p><p><strong><em>“Değerlendirme olmadan gelişim olmaz.” </em></strong>— Peter Drucker</p><h3>Somut Adımlarla Yeni Bir Başlangıç</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*qEdundC4E9hVFBIQ.png" /></figure><p>Yeni bir başlangıç yapmanın heyecanı harikadır ama bu heyecan somut bir plana dönüşmediğinde hızla kaybolur. Bir yerde okuduğuma göre; Japonların yıl sonu temizlik ritüeli gibi bir şey yapıyorlarmış. Bizde bundan ilham alarak, zihinlerimizi de temizlemek adına bir adım atmaya ne dersiniz?</p><p>Bu bölümde, hedeflerinizi somutlaştırmanın ve günlük hayatınıza entegre etmenin yollarını bulacaksınız. Büyük hayallerinizi küçük, ulaşılabilir parçalara bölerek ilerlemenin ne kadar kolay olabileceğini göreceksiniz 🌟.</p><h3>Son Söz: Kendi Yol Haritanızı Çizin</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*1jwYro6wLtZ7FABQ.jpeg" /></figure><p>Son bir not: Takvimler 2025’i gösteriyor. Ama unutmayın, bir yıl sadece takvimde değişen bir rakamdan ibaret olabilir ya da sizin için hayatınızın en anlamlı dönüm noktası haline gelebilir. Bunun tamamen sizin elinizde olduğunu biliyor musunuz?<br>2025, olmayı seçtiğiniz kişi için bir başlangıç olabilir 🌟. Bu yıl zamanı bir düşman değil, bir müttefik olarak görmeye başlayın. Çünkü zamanı yönetmek, hayatınızı yönetmektir.</p><p>Mutlu Yıllar! 🎊🎉<br>Ek olarak: Zaman yönetimiyle ilgili daha fazla bilgi almak istersen, aşağıdaki kaynakları inceleyebilirsin:</p><ul><li><strong>David Allen: Getting Things Done</strong></li><li><strong>Stephen Covey: 7 Habits of Highly Effective People</strong></li><li><strong>Brian Tracy: Eat That Frog!</strong></li><li><strong>Parkinson’s law or The pursuit of progress</strong></li></ul><p><a href="https://medium.com/@hsdfiratuniversity/yeni-bir-y%C4%B1l-yeni-bir-ba%C5%9Flang%C4%B1%C3%A7-982b89dd3edb">Yeni Bir Yıl, Yeni Bir Başlangıç</a></p><h3>REFERANSLAR</h3><p><a href="https://repository.lib.kit.ac.jp/repo/repository/10212/2284/D1-0761_h1.pdf"><strong>https://repository.lib.kit.ac.jp/repo/repository/10212/2284/D1-0761_h1.pdf</strong></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7bcf3437f071" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Importantance Of Clean Architecture In Modern Android Development]]></title>
            <link>https://medium.com/@Hakan-Kuru/importantance-of-clean-architecture-in-modern-android-development-7c6a539f4cf7?source=rss-4b9d4551d026------2</link>
            <guid isPermaLink="false">https://medium.com/p/7c6a539f4cf7</guid>
            <category><![CDATA[clean-architecture]]></category>
            <category><![CDATA[layers]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[android]]></category>
            <dc:creator><![CDATA[Hakan Kuru]]></dc:creator>
            <pubDate>Thu, 21 Nov 2024 13:08:34 GMT</pubDate>
            <atom:updated>2024-11-21T13:08:34.698Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/590/0*XfIQS_pp_5egyOyY" /></figure><p>Clean Architecture provides a framework for writing maintainable and testable code in Android projects. When building an application, getting the code architecture right is as critical as getting the building blocks right. The code architecture determines how the software will evolve, maintain and debug. Choosing the wrong architecture can lead to complexity as the project grows, and as a result can lead to wasted time and cost. For example, if you use an MVC (Model-View-Controller) architecture in a project, over time the Controller layer may become overloaded. In this case, the boundaries between business logic, user interface and data access layers become blurred. Clean Architecture prevents such problems and makes the code more maintainable and long-lasting.</p><p>We can liken this architecture to a building structure. Just as a building built on solid foundations will stand for years, a well-constructed architecture ensures that your project will remain solid in the long term. Just as a building with a weak foundation is bound to collapse after a while, a project with a complex and disorganized architecture will cause more problems as it grows. Clean Architecture separates the project into layers, making each component independent and testable.</p><h4>Testability, Modularity and Sustainability: Key Benefits of Clean Architecture</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/611/0*SnS6PY47IduzVdPz" /></figure><p>One of the biggest advantages of Clean Architecture is testability. Dividing the code into different layers ensures that each layer can be tested independently. This makes debugging easier and ensures a reliable software development process. So why is testability so important?</p><p>Unit tests form the heart of the project. It makes it possible to test each layer by isolating its external dependencies. This minimizes the possibility of making mistakes. For example, if a developer is having problems between the business logic and data layers, it is easier to test both layers in isolation. Mocking frameworks (e.g. Mockito) allow dependencies to be isolated and show how these structures fit in with modularity. With modularity, each component can work on its own, increasing the reliability of your application.</p><p>Clean Architecture also offers great advantages in terms of modularity. Structuring code in layers makes it easy to add new features to the project. Imagine you have an application and you want to make a small update to the user interface. If your application is modular, you can make changes only in the relevant layer without affecting other layers. This speeds up the development process and improves software quality.</p><p>At the same time, maintainability means that your project adapts to the future. Clean Architecture keeps the code organized, making future improvements easier. Even if the code gets more complex as the project grows, developers using this structure have no difficulty understanding the overall structure of the application. New team members have less difficulty getting involved in the project and maintenance costs are reduced in the long run.</p><h4>Fundamentals of Clean Architecture: Layered Structure</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/671/0*sTvOd05Tx97UMtYK" /></figure><p>The basic philosophy of Clean Architecture is to separate the application according to responsibilities so that each part can work independently of each other. This way, changes made in one layer do not affect other layers. Clean Architecture consists of four main layers: Entity, Use Case, Interface Adapter, and Frameworks &amp; Drivers. Let’s explain more clearly why and how each layer is used, as well as the responsibilities of each layer:</p><p><strong><em>Entity Layer:</em></strong> This layer contains the most basic building blocks and rules of business logic. Entities are the most abstract components of the application and are isolated from the other layers. This isolation ensures that the core of the application is not affected by external factors.</p><p>For example, an entity representing a user could look like this:</p><pre>data class User(<br>val id: Int,<br>val name: String,<br>val email: String<br>)</pre><p>The User class contains basic information about the user. The data in this layer exists only to reflect business logic and is not dependent on external systems. This isolation ensures that business rules are always consistent.</p><p><strong><em>Use Case Layer:</em></strong> Use cases are the layer that runs the business logic. It interacts with Entities to execute certain functions of the application. Use cases ensure that the functions that the application offers to users work in an organized and secure way.</p><p>For example, a use case that executes the process of saving the user could be like this:</p><pre>class SaveUserUseCase(private val userRepository: UserRepository) {<br>fun execute(user: User) {<br>if (user.name.isNotBlank() &amp;&amp; user.email.isNotBlank()) {<br>userRepository.saveUser(user)<br>} else {<br>throw IllegalArgumentException(&quot;Invalid user data&quot;)<br> }<br> }<br>}</pre><p>“<em>The SaveUserUseCase”</em> class validates the data before saving the user and saves only valid users. This business logic is completely UI and database independent.</p><p><strong><em>Interface Adapter Layer: </em></strong>This layer allows data to pass from one layer to another. For example, data from business logic is converted into a format suitable for the UI. This layer acts as a bridge between the outside world and the business logic of the application.</p><p>For example, a repository can be defined as follows:</p><pre>class UserRepositoryImpl(private val database: UserDatabase) : UserRepository {<br>override fun saveUser(user: User) {<br>database.insert(user)<br> }<br>}</pre><p>This code abstracts the process of registering a user in the database. The business logic does not deal with the details of the database; it just uses this adapter to register the user.</p><p><strong><em>Frameworks &amp; Drivers Layer:</em></strong> This outermost layer contains external dependencies (APIs, databases, system tools). These dependencies do not affect other layers of the application.</p><p>For example, we can make an API call with Retrofit as follows:</p><pre>interface ApiService {<br>@POST(&quot;users&quot;)<br>suspend fun createUser(@Body user: User): Response&lt;User&gt;<br>}</pre><p>This layer manages integrations with external resources and prevents other layers from being dependent on external systems.</p><p>Each layer has a specific responsibility and a clear separation of these responsibilities makes the code easier to manage and maintain. If the responsibilities between layers become unclear, it becomes very difficult to debug a project and add new features. Clean Architecture makes the software development process more efficient by clearly defining the role of each layer.</p><h4>Why the Need? Management Issues in Complex Projects</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*vzRn-OIk0vBN-c6C" /></figure><p>Android projects often start small, but as they grow over time, code management becomes difficult and complex. The lack of a layered structure leads to increased dependencies between different parts of the code. This creates major problems when a new feature is added to the project or when debugging. For example, if you want to change the function of just one button in an application, the whole project can be affected. Because certain parts of the code are tightly coupled to each other, a small change in one part can create unexpected errors in another part.</p><p>Thanks to the layered structure, each layer can be managed and modified independently. For example, if you want to change database operations, you only make changes to the Frameworks &amp; Drivers layer. This solves your problem without affecting the rest of the application. This is a big advantage for both the developer and the sustainability of the project.</p><h4>Future Architectural Design Trends: The Rise of Clean Architecture in Android Projects</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/315/0*LC5GzSuDUWV385f-" /></figure><p>As technology is constantly changing, software architectures are also evolving. Clean Architecture is becoming an increasingly preferred structure, especially in large and complex projects. Developers are starting to adopt Clean Architecture to increase the maintainability of their projects, ensure testability and provide a better user experience. With the rise of this trend, more and more projects in the software world will be implemented using this architecture.</p><p>As a result, Clean Architecture is becoming an indispensable tool in modern Android development. It simplifies the management of projects, increases testability and ensures long-term sustainability, making software development processes more efficient. By choosing the most appropriate architecture for your project, you can increase your chances of fewer problems and more success in the future.</p><p>for <a href="https://medium.com/@hsdfiratuniversity/modern-android-geli%C5%9Ftirmede-clean-architecture%C4%B1n-%C3%B6nemi-5823923f4e69">Turkish</a></p><h4>Bibliography:</h4><ul><li><a href="https://medium.com/@morganes56/from-junior-to-senior-modularization-in-clean-architecture-android-projects-8eb9de2a84a0">From Junior to Senior: Modularization in Clean Architecture Android projects</a></li><li><a href="https://proandroiddev.com/how-clean-architecture-in-android-can-help-for-an-efficient-estimation-28f08a37293a">How Clean Architecture in Android can help for an Efficient Estimation</a></li><li><a href="https://dotnetcopilot.com/what-is-clean-architecture/?source=post_page-----5823923f4e69--------------------------------">What is Clean Architecture - Dotnet Copilot</a></li></ul><p><a href="https://youtu.be/KmnEsiQdd0M">https://youtu.be/KmnEsiQdd0M</a></p><p><a href="https://youtu.be/uKlstDh_wLA">https://youtu.be/uKlstDh_wLA</a></p><p><a href="https://youtu.be/K1aC7eO6vbw">https://youtu.be/K1aC7eO6vbw</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7c6a539f4cf7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Java ve Kotlinin Temel Farkları]]></title>
            <link>https://medium.com/@Hakan-Kuru/java-ve-kotlinin-temel-farklar%C4%B1-4844b4c61042?source=rss-4b9d4551d026------2</link>
            <guid isPermaLink="false">https://medium.com/p/4844b4c61042</guid>
            <category><![CDATA[android]]></category>
            <category><![CDATA[androiddev]]></category>
            <category><![CDATA[kotlin]]></category>
            <category><![CDATA[java]]></category>
            <dc:creator><![CDATA[Hakan Kuru]]></dc:creator>
            <pubDate>Wed, 01 May 2024 16:41:17 GMT</pubDate>
            <atom:updated>2024-05-05T12:18:35.906Z</atom:updated>
            <content:encoded><![CDATA[<h3>Java ve Kotlin’in Temel Farkları</h3><p>Android alanında kendini geliştirmek isteyenlerin sorduğu ilk soru genellikle “hangi dil ile başlamalıyım” olur. Bunun cevabı kişiden kişiye değişmekte. Ben bu sorunun cevabını araştırdığımda aslında net bir cevabının olmadığını ve ne kadar Kotlin çoğunlukta olduğunu görsem de farklı kodlama dillerinin de olduğunu fark ettim. Bu kararı vermek için dillerin farkının ne olduğunu, neden o dili seçmem gerektiğini öğrendim ve bunu sizle de paylaşmak isterim ama öncelikle Kotlin ve Java hakkında biraz bilgi edinmemiz gerek.</p><h3><strong><em>Java</em></strong></h3><p>Java, Sun Microsystems tarafından geliştirilen ve şu anda Oracle Corporation tarafından sürdürülen bir programlama dilidir. Nesne yönelimli bir yapıya sahiptir, yani programlamada nesneleri kullanarak modüler ve sürdürülebilir kodlar oluşturmanıza olanak tanır.</p><p>İşte Java’nın bir kaç özelliği:</p><blockquote><strong><em>Platform bağımsızlığı</em></strong></blockquote><p>“Write Once, Run Everywhere”(Bir kez yaz, her yerde çalıştır) ilkesi, Java’nın önemli bir özelliğidir ve Java’nın taşınabilirliği ile ilgili bir prensiptir. Bu özellikten biraz bahsedelim.</p><p>Java programları yazıldıktan sonra Java Derleyicisi tarafından Java Bytecode’a dönüştürülür. Bu bytecode, Java Sanal Makinesi (JVM) üzerinde çalıştırılabilir. JVM, farklı işletim sistemleri için mevcut olduğundan, Bytecode’un farklı işletim sistemlerinde çalışması sağlanır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/562/1*eWbgSwaSluyFEl6weWPW2Q.png" /></figure><blockquote><strong><em>Exception handling</em></strong></blockquote><p>Java’da exception handling, programların çalışırken ortaya çıkabilecek hataları kontrol altına almayı ve bu hatalarla başa çıkmayı sağlar. Bir hata meydana geldiğinde program normal akışını sürdüremeyecek duruma gelirse, bir exception (istisna) fırlatılır ve bu istisna uygun şekilde işlenmelidir.</p><p>Exception handling, try-catch blokları kullanılarak gerçekleştirilir. Kod parçaları try bloğu içine yerleştirilir ve bu blokta hata olabilecek kodlar bulunur. Eğer bir hata meydana gelirse, programın çalışmasını durdurmadan catch bloğu devreye girer ve hata işlenir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/593/1*MGtsfFAWhZK1YFHQ5JoavQ.png" /></figure><blockquote><strong><em>Zengin kütüphanesi ve kullanıcı desteği</em></strong></blockquote><p>Java’nın kütüphanesi, veri yapılarından ağ programlamaya, grafik arayüzlerinden dosya işlemlerine kadar geniş bir yelpazede hizmet verir. Örneğin, java.util paketi veri yapıları ve koleksiyonlar için birçok sınıf içerirken, java.net paketi ağ programlaması için gerekli sınıfları sağlar. Swing ve JavaFX gibi kütüphaneler ise grafiksel kullanıcı arayüzü (GUI) geliştirmeyi destekler.</p><p>Java günümüzde hala sık kullanılan bir dildir. Bu sebepten Java öğrenmeye başlayan birsi geniş bir kullanıcı kitlesinden faydalanabilir</p><blockquote><strong><em>Nesne yönelimli</em> <em>programlama</em></strong></blockquote><p>Java, nesne yönelimli programlama (OOP) paradigmasına tam uyumlu olarak tasarlanmış bir programlama dilidir. OOP, kodun nesneler ve sınıflar aracılığıyla organize edilmesini sağlar, bu da kodun daha okunabilir, yönetilebilir ve yeniden kullanılabilir olmasını sağlar. Java’da her şey nesneler ve sınıflar üzerine kuruludur, kalıtım, kapsülleme, polimorfizm ve soyutlama gibi OOP prensiplerini tam olarak destekler. Bu özellikler, Java’nın geniş çapta kullanılmasını ve büyük ölçekli yazılım projelerinde tercih edilmesini sağlar.</p><h3>Kotlin</h3><p>Kotlin Java Sanal makinesi (JVM) için tasarlanmış ve geliştirilmiş bir dildir. Bu sebepten Kotlin Java’nın güçlü özelliklerini ve yeteneklerini korurken, daha modern ve kullanışlı bir dil olarak tasarlamıştır. Kotlin web sitesinde bu durumu 3 kelime ile açıklar; modern , concise and safe.</p><p>Kotlin’in öne çıkan özellikleri aşağıdaki gibidir</p><blockquote><strong><em>Syntax ve Smart cast</em></strong></blockquote><p>Kotlin basit bir Syntax’a sahiptir. bu sayede kodlar rahatça anlaşılabilir ve yazılabilir. Değişkenleri otomatik olarak typecast etme özelliği sayesinde manuel olarak yazma ihtiyacını oldukça azaltır. Bu özellikler programcının işini oldukça kolaylaştırır</p><blockquote><strong><em>Nullability</em></strong></blockquote><p>Kotlin’in en önenmli yanlarından birisi Null güvenliğini sağlamasıdır</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/473/1*38Z-Vh48MKTlce4Ehyvb2w.png" /></figure><p>Bu örnekte, main fonksiyonunda checkNull fonksiyonu çağrılırken, null kontrolü doğrudan if ifadesi içinde gerçekleştirilmiştir. checkNull fonksiyonu, nullable olan bir String değerini parametre olarak alır (value: String?) ve null kontrolü yapar. Eğer değer null değilse &quot;Değer: ...&quot; şeklinde bir yazı döndürür, eğer null ise &quot;Değer null&quot; yazısını döndürür.</p><blockquote><strong><em>Coroutine</em></strong></blockquote><p>Kotlin’deki coroutines (korumalı işlemler) çok güçlü bir konudur ve asenkron programlamayı kolaylaştırır. Coroutines, uzun sürecek işlemleri veya yoğun işlem gerektiren görevleri arka planda çalıştırırken ana programın bloke olmasını engeller.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/428/1*7Bz2Be6X57LlOEAkBn31vw.png" /></figure><p>Bu örnekte runBlocking ile bir coroutine scope oluşturuyoruz. launch fonksiyonuyla yeni bir coroutine başlatıyoruz ve readDataFromFile isimli suspend fonksiyonunu çağırıyoruz. Bu fonksiyon içinde withContext kullanarak dosya okuma işlemini arka planda çalıştırıyoruz.</p><p>Coroutine’ler, asenkron işlemleri yönetmek için oldukça kullanışlıdır ve Kotlin’in bu özelliği sayesinde asenkron programlama daha okunabilir ve yönetilebilir hale gelir.</p><blockquote><strong><em>Java ile uyumu ve kütüphane paylaşımı</em></strong></blockquote><p>Kotlin yaratılırken Java’nın güçlü yönlerini alıp üzerine iyi geliştirmeler yapılmıştır. Bununla birlikte kotlin kodunuzda bir Java kütüphanesini sorunsuz bir şekilde kullanabilirsiniz.</p><p>Kotlin’in ve Java’nın öne çıkan özellikleri böyleydi. Şimdi Kotlin ve Java’yı karşılaştırarak farklarını biraz daha anlayalım.</p><h3>Karşılaştırma</h3><p>Java ile Kotlin’in farklarını listeleyecek olursak akla gelen başlıklar şunlardır:</p><h4><strong><em>1- Syntax</em></strong></h4><p>Kotlin’in Syntax’ı Java’ya kıyasla çok daha özgündür. Bu yüzden okunabilirliği ve daha kolay</p><p>yazılmasıyla Java’dan daha kullanışlı olduğu söylenebilir.</p><p>Aşağıda Java diliyle tanımlanmış bir class, bu class’da tanımlanmış private bir parametre ve birkaç degişken görmekteyiz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/428/1*BwV4woKSeRxOYNEdmfbkuw.png" /></figure><p>Burada ise aynı kodların Kotlin’deki karşılıkları;</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/573/1*iGJGNGj_usTWzQPGTIQBCw.png" /></figure><p>Buna ek olarak Kotlin’de değişken türünü açıkça belirtmeniz gerekmez. Compiler bunu bizim için yapmakta.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/861/1*G7eQOS2Tu2CTJlp1tUoeWA.png" /></figure><p>Java’da ise değişkenin türünü açıkça yazmalısınız. Bu kodunuzu daha ayrıntılı hale getirecektir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ylcJ3ccozbBsBWTZoVmIeQ.png" /></figure><p><em>“Kotlinin özelliklerinden biri güçlü bir tipleme ve nullability özelliklerinin iyi bir kombinasyonudur”</em></p><p><strong>Mark Zaslavskiy, ITMO üniversitesi</strong></p><h4><strong><em>2- Scabality(Ölçeklenebilirlik)</em></strong></h4><p>Java gibi diller genellikle büyük projeler için kullanılırken bu dillerin yapısal özellikleri sebebiyle ölçeklenebilirlikleri sınırlı olmaktadır. Özellikle büyük projelerde bu durum uygulamanın şişmesine (bloat) ve performans düşüklüklerine neden olabilir.</p><p>Koltin’de ise durum öyle değil. modern bir dil olarak ölçeklenebilirliğe daha fazla odaklanmıştır. Daha basit ve temiz sözdizimi geliştiricilerin kodu daha etkili bir şekilde yönetilebilmesini ve ölçeklendirilmesini sağlar.</p><h4><strong><em>3- NPE (NullPointerException)</em></strong></h4><p>Örnekteki gibi Java’da boş bir değişken tanımladığınızı düşünelim ve bu değişkeni kullanalım.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1001/1*7tymsQ6Zuh9f3Y31xGkFoQ.png" /></figure><p>Burada “nullPointException” hatası alacaksınız. Bir değişkenin null olma ihtimaline karşı Java’da şu şekilde tedbir alınır:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rIUhT5r-D6fbiX1OW1UcCg.png" /></figure><p>Bu kodun satır sayısını arttırdığı gibi devamlı bu tür ‘if-else’ blokları açmak kodun okunabilirliğini düşürecek ve performansını azaltacaktır.</p><p>‘If-else ’bloklarının avantajı ise programcıya esneklik sağlaması. Değişkenin “null” olma durumunda farklı bir işlem yapmak istenirse bu ‘if’ bloğuna ekleyebilir.</p><p>Kotlin’de ise durum şu şekilde ;</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QUsOmn8bx7SPXF8m1SB7sg.png" /></figure><p>Kodun karmaşasının ne kadar azaldığını görmüşsünüzdür. Bununla birlikte Java’da bahsettiğimiz esneklik aynı şekilde burada da geçerli, üstelik sadece isteğe bağlı;</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/771/1*hRprvbjk614fWdvTIXGPbg.png" /></figure><h4>4- Lambda</h4><p>Kotlin’de lambda kullanımı daha basittir. Örnek bir kodu şu şekilde gösterebiliriz;</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*JnyQlWjXhDZpFQNWNpWNUQ.png" /></figure><p>Javada ise lambda kullanımı daha karmaşık ve daha az okunabilir düzeydedir. Örnek bir kod göstermek gerekirse:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/870/1*mPe0iNogGgEYn49Su1CS5w.png" /></figure><h4><strong><em>5- Fonksiyonel operatörler ve yüksek seviyeli fonksiyonlar</em></strong>:</h4><p>Kotlin fonksiyonel programlama paradigmalarını destekler. Bu konuda javadan daha iyidir</p><p>Kotlin’de ‘filter’, ’map’, ’reduce‘ gibi işlevsel operatörler ve yüksek seviyeli fonksiyonlar kullanılabilir</p><p>Java’da ise fonksiyonel operatörler ve yüksek seviyeli fonksiyonlar lambda ifadeleri ve Stream API gibi özelliklerle sağlanır ancak Kotlin’e göre daha karmaşık ve kullanımı daha az doğaldır</p><p>Hangisi kullanılmalıdır? Bu sorunun cevabı kişiden kişiye ve ilerlemek istediğiniz alana göre değişir. Bununla birlikte Android geliştirici olmak istiyorsanız önceliğiniz Kotlin olmalı. Hem daha modern bir dil hem de artık Kotlin çok daha öncelikli</p><h3>Teşekkürler…</h3><p>Kaynakça:</p><p><a href="https://learningdaily.dev/kotlin-vs-java-which-programming-language-should-you-learn-0506f9a49612">https://learningdaily.dev/kotlin-vs-java-which-programming-language-should-you-learn-0506f9a49612</a></p><ul><li><a href="https://rezaramesh.medium.com/kotlin-vs-java-a-comprehensive-analysis-for-modern-development-1975b95a47eb">Kotlin vs. Java: A Comprehensive Analysis for Modern Development</a></li><li><a href="https://kotlinlang.org/">Kotlin Programming Language</a></li></ul><p><a href="https://www.freecodecamp.org/news/kotlin-vs-java-whats-the-difference/">https://www.freecodecamp.org/news/kotlin-vs-java-whats-the-difference/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4844b4c61042" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>