🚀Kotlin'in Java'ya Göre Avantajları (Kotlin vs Java)
Kotlin’i Java’ya nazaran daha kullanışlı, avantajlı (ve havalı) kılan nedir, Kotlin'in avantajları nelerdir, neden Android için Kotlin kullanmalıyız? (kotlin vs java, java vs kotlin).
val reasonMsg = when (reason) {
WifiP2pManager.P2P_UNSUPPORTED -> "P2P desteklenmiyor"
WifiP2pManager.ERROR -> "hata oluştur"
WifiP2pManager.BUSY -> "cihaz başka bir bağlantı ile meşgul"
else -> ""
}
💁♂️ Functional Arguments
💦 Gereksiz yere parantez ( kullanımı yoktur
⚙️ Bu yapı ile otomatik olarak son fonksiyona tanımlanan işlemler atanır
🎯 Range metodu kullanılarak diziler parçalanabilmekte
🐥 Çok kolay kullanımı vardır
🐍 Python dizi parçalama işlemlerine benzemektedir
val byteArray = ByteArray()
val slicedByteArray: List<Byte> = BUFFER.slice(3..5)
val bas = 10
val son = 100
val slicedByteArray2: List<Byte> = BUFFER.slice(bas..son)
💱 Dizileri Dönüştürme
🚀 toTypedArrayeklentisi ile direkt olarak List'i argümana çevirebilirsiniz
📈 Java'dan çok daha verimli
val quakes: List<Quake>
val args: Array<out Quake> = quakes.toTypedArray()
/* Java
List<String> yourList = List.of("hello", "world");
yourVarargMethod(yourList.toArray(new String[0]));
*/
🧙♂ Detaylı bilgi için Fonksiyonlar alanına bakabilirsin.
💎 Keyword Argument
✨ Değişkenlerin adları ile onlara değer atayabilirsin
👇 Metotların üzerine geldiğinizde (hover) açıklamasında doküman linki olur
⭐ Link üzerinden kullanım örneklerine erişirsiniz
📃 XML ID'lerini Koda Import Etme
🔗 Kotlin otomatik olarak xml idlerini projeye dahil eder
👨💻 import kotlinx.android.synthetic.main.<layour>.* ile dahil edilir
💦 findViewByID metoduna gerek yoktur
👮♂️ İzinlerin Kontrolü
📢 İzin tanımlanmadığında hata verir
💁♂️ @SupressLint("MissingPermission") ile bunu engelleyebilirsiniz
🤭 "Ne yaptığımın farkındayım, bana bulaşma" demek gibi
🚧 Coroutine
🕊️ Thread işlemlerini kolaylaştıran bir hafif yapıdır
👷♂️ Coroutine ile inline thread kullanabilirsin
👮♂️ Main (UI), IO, Default thread yapıları ile arka plan işlemlerini yönetirsiniz
✨ Otomatik olarak optimize edilirler
🧱 Dispatchers.Main
🔣 Dispatchers.IO
🎳 Dispatchers.Default
UI Thread işlemleri
Disk ve network işlemleri
CPU gerektiren işlemler
Fonksiyon çağırma
Database
Liste sıralama
View işlemleri
Dosya okuma & yazma
JSON parsing
LiveData işlemleri
Ağ işlemleri
DiffUtils
🧙♂ Detaylı bilgi için Coroutine alanına bakabilirsin.
🗃️ RoomDB Coroutine Scope
👮♂️ suspend anahtar kelimesi ile thread gerektiren metotlar belirlenir
❌ Thread gerektiren metotlar UI Thread üzerinde çalıştırılamaz
🌌 Coroutine scope içerisinde kendilerine özgü thread ile çalıştırılır
👋 AsyncTask'a elveda (zaten sevmedim 🙄)
ViewModel
fun refreshQuakes(quakes: List<Quake>) = viewModelScope.launch {
repository.deleteAll() // Dao üzerinden suspend metottur
repository.insert(quakes.toTypedArray())
}
/*
@Dao
abstract class QuakeDao {
@Query("DELETE FROM ${Quake.TABLE_NAME}")
abstract suspend fun deleteAll() // Burada suspend ile thread istiyoruz
}
*/
🧙♂ Detaylı bilgi için RoomDB - Android sayfasına bakabilirsin.