Kazanimlar:
- Yapay zekaya kod ürettirmeden önce MVVM gibi bir mimari dayatarak ve katman katman, küçük parçalar halinde isteyerek bakımı kolay ve test edilebilir kod elde edebilme
- Kotlin'de null güvenliği ve coroutine, Swift'te optional ve bellek döngüleri gibi dile özel tuzakları tanıyıp üretilen kodu bunlara karşı denetleyebilme
- Platformlar arası (Flutter, React Native) projelerde izin ve yapılandırmayı her platform için ayrı doğrulayabilme
Mobil geliştirmenin kalbi koddur ve YZ'nin en somut kazancı burada görünür. Ama "YZ bana kod yazsın" cümlesi tek başına bir strateji değildir. İyi kod üretimi; doğru dili, doğru mimariyi, doğru sınırları ve doğru doğrulamayı bir araya getirmeyi gerektirir. Bu ünitede iOS'un dili Swift, Android'in dili Kotlin ve tek kod tabanıyla iki platforma birden çıkan platformlar arası (cross-platform) araçlar için YZ'yi verimli ve güvenli kullanmayı öğreneceğiz. Amaç, YZ'yi bir "kod otomatı" değil, mimarisini sizin belirlediğiniz bir hızlandırıcı olarak konumlandırmaktır.
Önce mimari, sonra kod
En sık yapılan hata, YZ'den mimari planı olmadan doğrudan kod istemektir. Bu, temel atmadan duvar örmeye benzer. Mobilde en yaygın mimari MVVM'dir (Model-View-ViewModel — veriyi, ekranı ve ekranın mantığını ayıran tasarım deseni). Bunun anlamı şudur: ekran (View) sadece görünümdür, mantık ve durum (state — ekranın o anki verisi) ViewModel'de yaşar, veri ise Model katmanındadır. YZ'ye bu ayrımı en baştan dayatmazsanız, tüm mantığı ekran koduna tıkıştıran, test edilemez ve bakımı zor bir yapı üretir.
Adım adım sağlıklı bir kod üretimi akışı:
- Bağlamı ver. Platform, dil, sürüm, mimari, kullanılan kütüphaneler.
- Katman katman iste. Önce veri modeli, sonra ağ/veri katmanı, sonra ViewModel, en son ekran.
- Küçük parçalar iste. Tek bir ekran veya tek bir fonksiyon; 500 satırlık dev dosya değil.
- Her parçayı doğrula. Derle, test et, entegre et; sonra bir sonraki parçaya geç.
- Refactor (kodu iyileştirme) iste. Çalışan koddan sonra "bunu daha okunur ve test edilebilir yap" adımı.
İpucu: YZ'ye "kodu MVVM'e göre böl: hangi kısım View, hangisi ViewModel, hangisi Model olmalı, ayrı ayrı ver" deyin. Bu tek cümle, üretilen kodun mimari kalitesini dramatik biçimde yükseltir.
Kotlin ve Swift: dile özel dikkat noktaları
Kotlin (Android) ve Swift (iOS) modern, güvenli dillerdir ama tuzakları farklıdır. Kotlin'de null güvenliği (bir değişkenin "boş" olabilme durumunun tip sistemiyle kontrolü) YZ tarafından bazen gevşek yazılır; gereksiz !! operatörü (null ise çökmeye zorlayan işaret) uygulamayı çökertebilir. Swift'te ise optional (değeri olabilen ya da olmayan tip) yönetimi ve bellek döngüleri (retain cycle — iki nesnenin birbirini tutup bellekten silinememesi) kritiktir; YZ closure'larda (kapanış — sonradan çalıştırılan kod bloğu) [weak self] eklemeyi unutabilir ve bu bellek sızıntısı yaratır.
Bu yüzden dil seçtiğinizde istemi o dile göre keskinleştirin: "Kotlin'de null güvenliğini koru, !! kullanma" ya da "Swift'te closure'larda güçlü referans döngüsünü önle" gibi.
Dikkat: YZ'nin ürettiği eş zamanlı (asynchronous — aynı anda birden çok işi yürüten) kod özel dikkat ister. Kotlin coroutine'lerinde yanlış scope (kapsam) seçimi veya Swift'te async/await içinde ana iş parçacığını (main thread — arayüzü çizen tek hat) bloklamak, uygulamayı dondurur. Bu hataları YZ sıkça yapar; teste sokmadan güvenmeyin.
Platformlar arası geliştirme: Flutter ve React Native
Tek kod tabanıyla hem iOS hem Android'e çıkmak isteyenler için Flutter (Google'ın Dart diliyle çalışan araç seti) ve React Native (Meta'nın JavaScript tabanlı çözümü) öne çıkar. YZ bu ortamlarda da güçlüdür, ancak platform farklarını (izinler, mağaza kuralları, cihaza özel davranış) bazen atlar. Örneğin Flutter'da kamera izni iOS ve Android'de farklı dosyalarda tanımlanır; YZ yalnızca birini yazabilir. Platformlar arası kodda "her iki platform için de gerekli izin ve yapılandırmayı ayrı ayrı ver" demek şarttır.
Seçim özeti:
Yaklaşım
Ne zaman
YZ ile dikkat
Native (Kotlin/Swift)
En yüksek performans, cihaz-derin entegrasyon
Her platform ayrı kod; iki kez doğrula
Flutter
Tek ekip, hızlı, tutarlı UI
Platform-özel izin/ayarları elle kontrol et
React Native
Web/JS ekibi mevcut
Köprü (native bridge) kısımlarını dikkatle test et
Üç mini vaka
Vaka 1 — Coroutine tuzağı. Bir Android ekibi, YZ'den ürün listesini çeken bir fonksiyon aldı. Kod ağ isteğini ana iş parçacığında yapıyordu; test cihazında sorun görünmedi ama zayıf ağda uygulama 4 saniye dondu ve ANR (Application Not Responding — sistemin uygulamayı yanıt vermiyor sayması) uyarısı verdi. YZ'ye "ağ işini IO dispatcher'da yap" denildiğinde düzeldi. Ders: eş zamanlılık her zaman denetlenir.
Vaka 2 — Bellek sızıntısı. Bir iOS geliştiricisi, YZ'nin ürettiği bir ekranı 20 kez açıp kapadıktan sonra uygulamanın belleğinin 40 MB'tan 180 MB'a çıktığını gördü. Sebep, closure'da eksik [weak self] yüzünden ViewController'ın (ekran denetleyicisi) bellekten silinememesiydi. Xcode'un bellek grafiği (memory graph) tuzağı gösterdi. Ders: bellek profili native geliştirmede zorunlu.
Vaka 3 — Platform farkı. Bir Flutter ekibi YZ'den galeri erişimi kodu aldı, Android'de çalıştı ama iOS'ta çöktü. Sebep, Info.plist dosyasına fotoğraf kütüphanesi izni açıklamasının (NSPhotoLibraryUsageDescription) eklenmemesiydi; YZ yalnızca Android tarafını yazmıştı. 15 dakikalık bir düzeltme, ama yakalanmasa mağaza reddi olurdu.
Zayıf prompt / Güçlü prompt
Zayıf prompt:"Ürünleri API'den çeken Kotlin kodu yaz."
Güçlü prompt:"Android/Kotlin için ürün listesini REST API'den çeken kodu üret.- Retrofit ile ağ katmanı, suspend fonksiyon- Ağ işi Dispatchers.IO'da; ana iş parçacığını bloklama- MVVM: Repository -> ViewModel -> StateFlow ile UI state- Hata durumları: ağ yok, 4xx, 5xx için ayrı sealed class state- Null güvenliği koru, !! kullanmaKatmanları ayrı dosyalar halinde ver, her birini 1 cümle açıkla."
Güçlü istem, üretilen kodun az önceki vakalardaki tuzaklara düşmesini baştan engeller.
Kopyalanabilir şablonlar
Katmanlı üretim şablonu:"[Platform/dil] için [özellik] geliştir. Sırayla üret:1) Veri modeli (data class/struct)2) Ağ veya veri kaynağı katmanı3) Repository4) ViewModel (state yönetimi)5) Ekran (UI)Her katmanı ayrı ver, aralarına entegrasyon notu ekle."
Dile özel güvenlik şablonu (Kotlin):"Bu Kotlin kodunu gözden geçir:- !! ve platform-type kullanımını temizle- Coroutine scope ve dispatcher seçimini doğrula- Ana iş parçacığını bloklayan çağrı var mı?[kod]"
Dile özel güvenlik şablonu (Swift):"Bu Swift kodunu gözden geçir:- Closure'larda retain cycle riski (weak/unowned self)- Optional force-unwrap (!) kullanımı- Ana thread dışına taşınması gereken ağır işler[kod]"
Platformlar arası kontrol şablonu:"Bu [Flutter/React Native] özelliği için hem iOS hem Android'degereken tüm izin, yapılandırma ve platform-özel kodu listele.Info.plist ve AndroidManifest.xml girişlerini ayrı ayrı ver."
Sık yapılan hatalar
- Mimari dayatmadan kod istemek. Sonuç: her şeyi ekrana tıkıştıran test edilemez yapı.
- Eş zamanlı kodu test etmeden güvenmek. Ana iş parçacığı blokları ve yanlış scope en sık çökme sebebi.
- Bellek yönetimini gözden kaçırmak. Özellikle iOS closure'larında sızıntı; profil almadan fark edilmez.
- Platform farklarını atlamak. Platformlar arası araçlarda izin ve yapılandırma iki platformda ayrı yazılır.
- Kütüphane sürümünü doğrulamamak. YZ eskimiş Retrofit/Alamofire API'si önerebilir; resmi belgeyle kontrol edin.
- Tek dev dosya üretmek. Bakımı ve doğrulaması imkânsız; katman katman isteyin.
Özetle
YZ ile kod üretimi, mimariyi siz belirlediğinizde güçlüdür. Önce MVVM gibi bir yapı dayatın, sonra katman katman ve küçük parçalar halinde isteyin, her parçayı derleyip test edin. Kotlin'de null güvenliği ve coroutine, Swift'te optional ve bellek döngüleri özel dikkat ister. Platformlar arası araçlarda izin ve yapılandırma her platform için ayrı yazılır. Güçlü istem dili, sürümü, mimariyi ve dile özel güvenlik kurallarını en baştan söyler; bu, en sık görülen çökme ve sızıntı hatalarını üretim aşamasında engeller.
Uygulama görevi
Bir liste ekranı (örneğin "kişi listesi") için seçtiğiniz platformda (Kotlin veya Swift) "Katmanlı üretim şablonu"nu kullanarak YZ'den kod isteyin. Üretilen kodu bir projeye ekleyin, derleyin ve şu iki kontrolü yapın: (1) ağ/uzun işlem ana iş parçacığında mı çalışıyor, (2) null/optional güvenliği doğru mu? Bulduğunuz sorunu YZ'ye dile özel güvenlik şablonuyla düzelttirin.
Kontrol listesi
- [ ] Kod istemeden önce mimariyi (MVVM vb.) belirttim
- [ ] Katman katman, küçük parçalar halinde istedim
- [ ] Eş zamanlı kodun ana iş parçacığını bloklamadığını test ettim
- [ ] Null/optional güvenliğini ve bellek yönetimini kontrol ettim
- [ ] Platformlar arası projede iki platformun izin/ayarını ayrı doğruladım
- [ ] Kütüphane sürümlerini ve API imzalarını resmi belgeden doğruladım