İçeriğe geç

Java record nedir ? Nasıl kullanılır ?

Hepimizin bildiği gibi Java büyük bir dil değil aynı zamanda büyük bir okyanus. Bugün java 16 ile birlikte eklenen record yapısından bahsedeceğiz ve bu okyanusu biraz daha keşfetmeye çalışacağız. Hadi başlayalım ve yinede her ihtimale karşı can simitlerimizi yanımıza alalım 🙂

Java record nedir: Record, sınıfları temsil etmek, daha kolay yönetmeyi sağlamak ve daha çok basit veri saklama işlemleri için kullanılan bir yapıdır. Bu cümlenin çok havada kaldığının farkındayım ve dilerseniz basit bir örnekle daha iyi anlatmaya çalışalım.

Şimdi aşağıda ki koda bir göz atın ve anlamaya çalışın.

public class Ogrenci {
    public String isim;
    public String soyisim;
    public int sinif;
    public List<String> dersler;

    public String getIsim() {
        return isim;
    }

    public void setIsim(String isim) {
        this.isim = isim;
    }

    public String getSoyisim() {
        return soyisim;
    }

    public void setSoyisim(String soyisim) {
        this.soyisim = soyisim;
    }

    public int getSinif() {
        return sinif;
    }

    public void setSinif(int sinif) {
        this.sinif = sinif;
    }

    public List<String> getDersler() {
        return dersler;
    }

    public void setDersler(List<String> dersler) {
        this.dersler = dersler;
    }

    @Override
    public String toString() {
        return "Ogrenci{" +
                "isim='" + getIsim() + '\'' +
                ", soyisim='" + getSoyisim() + '\'' +
                ", sinif=" + getSinif() +
                ", dersler=" + getDersler() +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Ogrenci ogrenci = (Ogrenci) o;
        return sinif == ogrenci.sinif &amp;&amp; Objects.equals(isim, ogrenci.isim) &amp;&amp; Objects.equals(soyisim, ogrenci.soyisim) &amp;&amp; Objects.equals(dersler, ogrenci.dersler);
    }

    @Override
    public int hashCode() {
        return Objects.hash(isim, soyisim, sinif, dersler);
    }
}

Gördüğünüz gibi bu sınıfta isim, soyisim, sınıf ve dersler değişkenlerimiz, setter, getter, toString, hashCode ve equals metotlarımız var.

Eminim buna benzer bir kod örneğini java öğrenirken bir kursta yada bir bootcampte gördünüz. Yine eminim ki bir main metodunda bu sınıfı türettiniz ve değerlerini atadınız. Eğer bir sorun yoksa şimdi bu sınıfın temel amacına bakalım ve record ihtiyacı nerden çıkmış onu bi netleştirelim.

Bu sınıf öğrenci bilgilerini tutabilmemizi sağlayan sıradan çinko karbon bir sınıf. Biz new Ogrenci diyerek bu sınıftan bir obje yaratıyoruz ve verdiğimiz bilgileri saklamasını bekliyoruz. Her şey gayet normal. İyide bu sınıfta öğrenci bilgileriyle ilgili bir işlem yapmıyorsak, bu bilgileri işlemiyorsak, sadece tutuyorsak ne diye bu 60 satır kodu yazalım ki ? İşte tam da burada record kullanımına ihtiyacımız var. Şimdi gelin bu senaryo üzerinden aynı sınıfı çok daha az kod kullanarak yazalım.

public class Main {
    public static void main(String[] args) {
        Ogrenci ogr1 = new Ogrenci("Emrullah", "Tanima", 12, List.of("JAVA", "PHP"));
    }

    record Ogrenci(String isim, String soyisim, int sinif, List<String> diller) {

    }
}

Bu kullanım yukarıda ki kod bloğuyla eş değer. Peki nasıl oluyor ? Makalenin başında söylediğimiz “basit veri saklama işlemleri için kullanılan” tanımına dönelim. Basit veri saklama sınıflarımız için genelde getter ve setterları toString ve equals gibi metotlar kullanırız. İlk örneğimizde bunu gördük. İşte tam da bu noktada record yapısı işimize yarıyor.

Record ile tanımladığımız bir sınıf, kendiliğinden getter, setter*, toString, equals, hashCode metotlarını içeriyor. Bu metotlar dışında başka bir metot eklemek istersek yine record sınıfı içerisinden bunu ekleyebiliriz. Örneğin:

record Ogrenci(String isim, String soyisim, int sinif, List<String> diller) {
        public void SinifinAdiniYaz() {
            System.out.println("Ogrenci sınıfı");
        }
    }

Java record sınıflar *setter metodu içeriyor dedik ancak bu kısmı biraz daha açalım daha doğrusu düzeltelim. Evet record sınıflarda değişkenlere değer atayabiliriz ancak değerini değiştiremeyiz. Record sınıf içerisinde yer alan değişkenler (immutable) yani değiştirilemez olarak gelir. Örneğin ogr1.isim = “Yeni isim”; diyerek bu değişkenin değerini değiştiremeyiz. Bu özellik sayesinde verilerin güvenli bir şekilde kullanılmasını da sağlamış oluruz.

Yok ben illa bu değeri değiştiricem dersenizde çözümü basit birtane daha obje oluştururuz olur biter 🙂 Örnek:

public static void main(String[] args) {
        Ogrenci ogr1 = new Ogrenci("Emrullah", "Tanima", 12, List.of("JAVA", "PHP"));
        Ogrenci ogr2 = new Ogrenci("Emrullah", "JAVA", 12, List.of("record"));
    }

Ve bu örneğimiz ile Java record kullanımı makalemizin sonuna gelmiş bulunuyoruz. Umarım açıklayıcı ve faydalı olmuştur. Eklemek veya düzeltmek istediğiniz kısımları yorum olarak ekleyebilirsiniz. Bir sonraki yazımızda görüşmek üzere. Sevgilerle…

Kategori:JAVA

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir