Java yazarken basit bir POJO(Plain Old Java Object) sınıfı oluşturmak istediğinizde getter, setter, equals, toString, hashCode gibi metodları yazmanız gerekir. Bazı durumlarda bu metodlar işimizde yarasa da gereksiz yere büyük sınıfların yazılması ve yönetilimesi zor olmaktadır. Kotlin, bu sorunu çözmek ve geliştiricinin hayatını biraz daha kolay hale getirmek için data class
yapısını içerisinde barındırıyor.
Allta yazdığımız User classını javada tanımlamak ve tüm metodları kullanmak istersek şöyle yazmamız gerekiyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
public class User { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; if (id != user.id) return false; if (age != user.age) return false; return name != null ? name.equals(user.name) : user.name == null; } @Override public int hashCode() { int result = id; result = 31 * result + (name != null ? name.hashCode() : 0); result = 31 * result + age; return result; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } } |
ve aynı classı Kotlinde data class yapısıyla alttaki gibi yazıyoruz.
1 |
data class User(var id: Int, var name: String, var age: Int) |
Evet yanlış görmediniz. Onlarca satırlık java kodu sadece tek satırda hallediliyor.
Data class yapısı size equals(), toString(), hashCode()
gibi metodları sağlıyor. Artık tek yapmanız gereken bu sınıftan bir nesne türetip metodları ya da propertylere veri yazmak/okumak.
1 2 3 4 5 6 7 8 9 |
val user = User(1, "Emre", 25) val user2 = User(2, "Ahmet", 36) println(user.age) user2.name = "Leyla" if (user.equals(user2)) { println("Aynı kullanıcı") } |
Yine data class yapısını kullanarak class içindeki değerlere component metoduyla ulaşabilirsiniz.
component1()
metodu id değerini döndürür.component2()
metodu name değerini döndürür.component3()
metodu age değerini döndürür.
ve bu metodlar compiler tarafından otomatik olarak generate edilir.
1 2 3 |
println(user.component1()) // id değeri döner println(user.component2()) // name değeri döner println(user.component3()) // age değeri döner |
Gördüğünüz gibi data class yapısı kullanmak oldukça kolay. Sadece bu yapı bile Kotline geçiş yapmak için bir sebep olabilir 🙂
Kotlin ile alakalı Udemy üzerinde verdiğim eğitim setine bloğuma özel fiyata ulaşmak için bağlantıya tıklayabilirsiniz.
Umarım faydalı olmuştur.
Bol kodlu günler.
https://kotlinlang.org/docs/reference/data-classes.html