Kotlin Yazıları #4 Kotlinle DiaHelp'e sıfırdan başlıyoruz

    Merhaba,

        Yazılara yine uzun bir ara verdim kusura bakmayın. Neler yaptığımdan bahsetmem gerekirse (ki gerekir) bi askere kadar gidip geldim. Bedelli askerlik değil bildiğiniz kısa dönem 6 ay askerlik yaptım.(10 Eylül 2018 - 24 Şubat 2019 = 168 Gün) Aaa iyiymiş nasıl geçti diye sorduğunuzu duyar gibi oluyorum. Çok güzeldi. Çok farklı bir tecrübeydi. Çok güzel arkadaşlıklar edindim. Çok farklı kişiliklerde insanlar tanıdım. Kimi zaman sevindim kimi zaman ağladım güldüm eğlendim üzüldüm Özledim... Sivil hayatta sevmediğim halde bol bol küfür ettim. Adım uzun olduğu için bile azar yedim. "Bitmiyor verdiği tekmil Allahtan memleketi Kahramanmaraş değilmiş" dedi bi komutan. Diğerleri de hunharca güldü. Bi gün bi komutan... Şaka tabiiki askerlik anısı okumak için gelmediğinizin farkındayım. Askerliğin öncesi yoğun iş temposuyla geçti. Sonrası da yoğun iş arama dönemiyle geçiyor. Yazıyı yazdığım tarih olan 04.04.2019 itibariyle hala iş arıyorum. İyi gidiyor ama kesin birşey yok henüz. Bilirsiniz bizim sektörde işe alma olayı Kibar Feyzo'daki ırgat seçimi gibi sen gel sen gel sen gelme şeklinde değil. O yüzden süreçler uzun oluyor biraz. Olsun hayırlısıyla güzel bi işim olsun da 3 5 gün fazla bekleyiveririm. 168 gün bekledim be. Bu ne ki.

      Bu arada blogumun okunduğunu farkettim ve bir yazı yazayım dedim. KarbonhidratSayar'ı anlattığım şu yazımı okuduysanız eğer bilirsiniz ki Tip 1 Diabet hastaları için bir uygulama geliştirmekteydim. Ancak acaba ne kadar indirilmiş bi bakayım dediğimde uygulamanın Google Play Store'dan kalktığını gördüm. Çok üzüldüm. Ve projeyi GitHub hesabımda sıfırdan Kotlin kullanarak yazmaya karar verdim. Hem Kotlin dilinde kendimi geliştireceğim için hem de bu projenin canlandığını göreceğim için heyecanlıydım. Ve blog yazılarım dahil pek çok yerde verdiğim sıfırdan Kotlin kullanarak proje geliştirme sözümü tutacağım için ayrıca mutluyum. Ancak yazıyı yazdığım zamanlarda çoktan projeye başlamıştım ve biryerlere getirmiştim. Hatta projede bayağı ilerlediğim için ne yapacağımı şaşırmış vaziyetteyim. Uygulamanın içeriği hakkında bilgi sahibi olmak isterseniz yukarıda bahsettiğim KarbonhidratSayar uygulamasına ait yazıma başvurabilirsiniz. O halde başlayalım.

      Baştan başlayacağım derken şaka yapmıyordum. Gerçekten baştan başlayacağım. Projeyi bile sıfırdan açacağım. Projeyi açarken Kotlin destekli açarsanız iyi olur. Tabi direk Kotlin kullanarak başlamak istiyorsanız. Sıfırdan başladığım her projede yaptığım gibi öncelikle versiyonlama sistemini eklerim. İş hayatında (Protel'de) öğrendiğim bu güzel sistemin ne işe yaradığını Google'a versioning system yazarak öğrenebilirsiniz. Ancak en sevdiğim kaynak tabiiki Android'in resmi sitesidir Ama benim İngilizcem yok demeyin. Olsun. Olmalı. Öğrenin. Dili herkes öğrenmeli. GitHub'daki ilk commitimde göreceğiniz üzere ilk işim tabiiki versiyonlama sistemini kurmak oldu. Bunun Kotlin ile ilgisi yoktur ancak versiyonlama önemlidir yapılmalıdır eklenmelidir. Kullanıcı sever. Google sever. Herşey daha düzenli olur. Commitlerden de anlaşılacağı gibi package ismini yanlış vermişim. com/e/diahelp/ şeklinde vermişim. O e ifadesini yok etmeye kastım birkaç commit. Olsun bu tip sorunlar varsa projenin başlangıç zamanlarında çözmek daha doğrudur. Aman canım hallederiz gibi yaklaşımlar yanlış olur.

 

      İlk Sayfa : Giriş Yap

      Projeye ekleyeceğim ilk sayfa tabiiki Giriş yap Kayıt ol sayfasıydı. Bir splash ekranına bile gerek duymadım. Splash ekranlarının uygulamada boşa yer kapladığını düşünen bir çok otorite var bu arada. Her projeye eklenmesi gerekmeyen bir sayfa. Karbonhidratsayar'a Giriş yap Kayıt ol sayfalarını eklemek istediğimde ne yazık ki projeyi birlikte yaptığım arkadaşlara Google aracılığı ile giriş yapmanın ne kadar basit ve pratik olduğunu anlatamamıştım. Ancak proje artık bana kaldığı için istediğim gibi at koşturabilirdim :) O yüzden ilk eklediğim özellik tabiiki Google Signin oldu. Küçük çaplı bir MVP denemem de oldu bu comitte ancak Google Signin kullandığım için gerek kalmadığını düşündüm. Projenin ilerleyen safhalarında belki gerek olur diye base sistemini projede hala tutuyorum. Kayıt ol Giriş yap operasyonlarında Google Signin kullanmamın bir diğer sebebi ise çok çok çok pratik ve hızlı yapılabiliniyor olması. Bir Web Service gerekse bi de backend'ci aramayla uğraşacağım. Firebase kullansam başka bir terane bir sürü uzun süren işe girmek yerine direkt olarak ekleyip geçiverdim valla. Çok da güzel oldu. Çok da iyi oldu. Google Signin tuşu her zaman aktif değil. Tabiiki Kullanıcı Sözleşmesi okunup tik işaretlendiğinde aktif oluyor. Bu yüzden hemen Kullanıcı Sözleşmesi için bir Fragment hazırladım. Derken burada bir Kotlin arası verelim. Bu son birkaç commit içerisinde Kotlin ile alakalı neler öğrendiğimden bahsetmek istiyorum:

companion object {
        private const val TAG = "GoogleActivity"
}
MainActivity.TAG     
                     

class
EventManager {
        companion object FirebaseManager {
 }  }
val firebaseManager = EventManager.FirebaseManager

 

Eğer bir sınıfın objesine sahip değilseniz ama yine de o sınıf içerisindeki bir method veya değişkene ihtiyacınız varsa companion yapısını kullanmanız gerekmektedir. Java'dan bildiğimiz static anahtar kelimesinin yerine Kotlin'de companion object yapısı kullanılıyor yani. Yukarıdaki kod bloğunda TAG değişkeni static olmuş oldu. const yapısı ise compile time constant anlamına geliyor. Burada const ile val ifadelerinin farkından bahsetmem gerekiyor. Const val yapısını kullandığımız bir değişkene Runtime da yeni bir değer atayamayız. Ancak sadece val ile tanımladığımız bir değişkene runtime da değer atayabiliriz. 

Normalde null olmayan değişkenler constructor da tanımlanmalıdır. Ancak bazen bu uygun olamayabilir. Örneğin Dependency Injection aracılığı ile tanımlanan değişkenler. Buna rağmen sürekli null-check yapmaktan da kaçınmak isteyebilirsiniz. Böyle durumlarda imdadınıza yetişecek olan yapı lateinit ' tir. lateinit tanımlayacağınız bir değişken primitive olamaz. Initialize edilmeden önce bu değişkene ulaşmaya çalışmak exception a yol açar.

private lateinit var auth: FirebaseAuth

 

Bu değişkenin initialize edilip edilmediğini kontrol etmek için de isInitialized yapısını kullanmamız gerekmektedir. Bu şekilde kullanılır : :: yapısı ile property referance değerine erişmiş oluruz.

if ( ::auth.isInitialized ) {
    println(foo.bar)
}

 

Committe göreceğiniz bir başka güzel olay ise yeni setOnClickListener'dır. 

signInButton.setOnClickListener { signIn() }

 

 İlk sayfadan şimdilik bu kadar. Eğer kodunda değişiklik olursa yazıyı düzenlerim. Okuduğunuz için teşekkür ederim. Bana alp.develioglu@gmail.com üzerinden her zaman ulaşabilirsiniz. :)

Blog yazılarına abone olmak ister misiniz ?

Her yeni blog yazısı çıktığında veya soru yayınlandığında bildirim almak için e-mail adresinizi yazmanız yeterli.