Predictive Code Completion Nedir?
Yapay zeka işimizi elimizden aldı, alıyor, alacak auuuuvv 🫨 diye isyan edenler, hadi toplaşıp bi’ bakalım bakalım, ayağımızın dibine kadar gelen bu Tahmini Kod Tamamlama özelliği neymiş, ne değilmiş.
Yine tanımla başlayalım. Sonra bol bol örnek göreceğiz. En son da sonuç olarak bu meret işimizi elimizden alır mı almaz mı ona karar vereceğiz. Belki çiğ köfteci açarız 🤦
Xcode 16 Release Notes sayfası, şöyle bir bilgi içeriyor.
Xcode 16, Swift ve Apple SDK’leri için özel olarak eğitilmiş bir makine öğrenme modeli tarafından desteklenen tahmini kod tamamlama özelliğini içeriyor. Tahmini kod tamamlama, macOS 15 çalıştıran Apple silicon’a sahip bir Mac gerektirir.
Buradan itibaren Predictive Code Completion kavramını Tahmini Kod Tamamlama olarak Türkçe olarak kullanmaya çalışacağım. TKT de olabilir. Ona bakarız.
Öncelikle bu özelliğin Xcode 16 ile birlikte hayatımıza girdiğini tekrar etmekte fayda var. Yani daha eski versiyonlarda bu özelliği kullanmak mümkün değil. Xcode’u güncelleyip tekrar açtığınızda otomatik olarak bu özelliği içeren bir indirme süreci başlıyor. Sonrasında kullanmaya hazırsınız. ⚡️
E akla ilk gelen örneğimizle kurcalamaya başlayalım. İlk örnekte func
anahtar kelimesini yazıyorum ve bekliyorum. Bana printHello()
fonksiyonu öneriliyor. TAB tuşuna basarak bu öneriyi kabul ediyorum ve fonksiyon gövdesi otomatik olarak oluşturuluyor.
Hemen ardından da bu fonksiyonun yapabileceği işlev, otomatik olarak fonksiyonun gövdesinde öneriliyor. Basit ama etkili. Sevdim. 🎖️
Şimdi bir adım daha ileri taşıyalım.
İngilizce sum
yani toplama ifadesini func
anahtar kelimesinden sonra yazıp bekliyorum. Bir toplama işlemi uygulamak için 2 Int değer alan ve 1 Int değer geri döndüren bir fonksiyon benim için hazırlanıyor. Anladık, çalışıyor 🤨
Bu basit örneklerden sonra gerçekçi bir deneme yapıyorum.
User isimli bir dosya oluşturdum ve bu dosyada aynı isimle bir struct
oluşturuyorum. İlk özelliğim otomatik olarak name
şeklinde tahmin ediliyor. Çoğu senaryo için yerinde bir tahmin. Bu tahminler işime yaradığı sürece TAB
tuşuna basarak devam ediyorum.
age
, isActive
, isAdmin
benim için yerinde tahminler. Bunları kabul ederek devam ediyorum. isSuperAdmin
yerine başka bir öneri istiyorum. Bu yüzden silerek tekrar deniyorum ancak aynı öneriyi vermeye devam ediyor. Bu noktada bir çeşit geri bildirim iletebilmek isterdim. Bunu istemiyorum, başka bir şey öner gibisinden.
Bir alt satıra geçtiğimde de bana CodingKeys
önerisinde bulunuyor. Backend’den gelecek verilerin anahtarlarında herhangi bir harf hassasiyeti ya da ‘_’ işareti bulunmadığı için şimdilik bunları da onaylıyorum. Başarılı.
İşi biraz daha karmaşıklaştırmak istiyorum. Yeni bir Movie dosyası içinde aynı isimle bir obje oluşturalım bakalım neler olacak.
Öncelikle Movie objesini public olarak öneriyor, istemediğim için siliyor ve kendim yazmaya başlıyorum. Codable
ve Identifiable
protokollerini öneriyor. Ben sadece Codable
istiyorum ve sonrasında da mümkün olduğunca öneri görebilmek için tüm özellikleri onaylıyorum.
Sonlara doğru bağlamdan uzaklaşıyor ve daha çok suggestion
ile ilgili öneriler vermeye başlıyor. Bu noktada suggestion
‘ı yeni bir obje olarak önermesi daha mantıklı olabilirdi diye düşünüyorum. 🤔
Ancak bu beklentimi poster
yazdığımda karşılıyor ve bunun yeni bir obje olmasını öneriyor. Ben bu öneriyi şimdilik kabul etmiyorum.
Burada bir önemli adım daha atıyor ve computed property olarak oluşturmak istediğim posterURL
özelliğini mantıklı bir link ile, posterPath
özelliğimi de kullanarak oluşturuyor. ✅
Şimdi de basit bir servis yazdıralım bakalım.
İnternetten movie
objelerinden oluşan bir array çekebileceğimiz basit bir fonksiyonu oluşturabiliyor. İlk tercihi completion
temelli protokol oluşturmaya dayalı bir yaklaşım. Ben asenkron bir fonksiyon istediğim için biraz yönlendiriyorum.
Verdiği fonksiyon ilk başta compile edilmiyordu. Fonksiyon sonunda ufak bir değişiklik yaparak data.0
yaptığım yeri öğrendi ve bir sonraki fonksiyonda uyguladı. Burası bence önemli. Müdahale ederek gelecekteki olası hataların önüne geçebiliyoruz.
Şimdi de bu servisi adım adım daha ileri taşımak istersek neler yapabiliyoruz görelim. ⚒️
Artık direkt olarak asenkron fonksiyonlar öneriyor. Bunu da öğrendi kerata. 🦴
fetchMovie
isimli fonksiyonu id ile tek film, fetchMovies
fonksiyonunu ise array return edecek şekilde hazırladı. Okuduğunu da anlıyor maşallah. 🧿
Ve bence en keyifli tarafı. TKT’yi yorumlarla yönetmek mümkün. 🥳
Bir fonksiyon istiyorum, sadece 1999 yılında çekilmiş filmleri bana getiren bir fonksiyon olsun diye de önceden yorum şeklinde beklentimi iletiyorum. Ve bu doğrultuda bir fonksiyon elde ediyorum. Yani TKT yorumlarımızı okuyor ve dikkate alıyor.
Peki bakalım TKT, Türkçe biliyor mu 🧐
Görünüşe göre biliyor, ama biraz daha gelişmesi gerek. Özellikle de yapacağımız işlemi detaylandırmaya başladığımızda ortaya çıkan sonuç tatmin edici olmayabiliyor.
Sonuç:
Bu yazımın sonucunda güncel teknolojilerden birini daha iyi anlama şansı elde ettik. TKT’nin bana göre artı ve eksilerini sıralayarak konuyu kapatalım.
- Oldukça hızlı çalışıyor. ✅
- Türkçe biliyor. ✅
- Yorumlarla yönlendilirebiliyor. ✅
- Kullanıldığı bağlamda yapılan işlemleri öğreniyor ve bir sonraki benzer uygulamada aynı yoldan ilerliyor. ✅
- Çalışıp çalışmadığını anlayamıyoruz, ama çok bekletmiyor. 🟡
- Öneri alternatifleri olmamasından şikayetçiyim. 🔴
- Geri bildirimde bulunamamaktan şikayetçiyim. 🔴
- Detaylı işlemlerde tatmin edici sonuçlar vermiyor. 🔴
- Compile edilmesi mümkün olmayan kodlar da önerebiliyor. 🔴
Bir sonraki yazıda görüşmek üzere 👋
Anlamadığınız, açık olmadığını düşündüğünüz ya da gözden kaçırdığıma inandığınız yerlerle ilgili benimle çekinmeden bağlantı kurabilir, irtibata geçebilirsiz. 👇
https://www.linkedin.com/in/eyupmert/
Kaynaklar: