0Pricing
Java Academy · Ders

Kısa Yapıcılar ve Doğrulama

Veri bütünlüğünü sağlamak için kısa yapıcıların içine doğrulama mantığı ekleyin.

Kısa Yapıcılar ve Doğrulama, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Kısa Kurucular

Bir kayıttaki kısa kurucu, bileşenler atanmadan önce çalışır. Bileşen atamalarını tekrarlamadan verileri doğrulamanızı veya normalleştirmenizi sağlar.

Standart ve Kısa Kurucu

Standart kanonik kurucu, bileşenleri açıkça atar. Kısa kurucuda parametre listesi ve atamalar bulunmaz; gövde çalıştıktan sonra bunlar otomatik olarak gerçekleştirilir.

// Standard canonical constructor
record Range(int min, int max) {
    Range(int min, int max) {
        if (min > max) throw new IllegalArgumentException("min > max");
        this.min = min;  // explicit assignment
        this.max = max;
    }
}

// Compact constructor (same behavior, less code)
record Range2(int min, int max) {
    Range2 {  // no parameter list, no assignments
        if (min > max) throw new IllegalArgumentException("min > max");
        // components are assigned automatically after this block
    }
}

Kısa Kurucularda Doğrulama

Kısa kurucular, kayıt verilerini doğrulamanın standart yoludur. Değişmez koşulları zorunlu kılmak için hataları erkenden fırlatın.

record Email(String address) {
    Email {
        if (address == null || address.isBlank())
            throw new IllegalArgumentException("Email cannot be blank");
        if (!address.contains("@"))
            throw new IllegalArgumentException("Invalid email: " + address);
        address = address.toLowerCase().strip(); // normalize (Java 16+)
    }
}

Email e = new Email("  Alice@Example.com  ");
System.out.println(e.address()); // alice@example.com

try { new Email("not-an-email"); }
catch (IllegalArgumentException ex) { System.out.println(ex.getMessage()); }

Kısa Kurucularda Normalleştirme

Bileşen değişkenlerini, atanmadan önce kısa kurucunun içinde değiştirebilirsiniz. Böylece veriler oluşturulurken normalleştirilir.

record PersonName(String firstName, String lastName) {
    PersonName {
        firstName = capitalize(firstName);
        lastName  = capitalize(lastName);
    }

    private static String capitalize(String s) {
        if (s == null || s.isEmpty()) return s;
        return Character.toUpperCase(s.charAt(0)) +
               s.substring(1).toLowerCase();
    }

    public String fullName() { return firstName + " " + lastName; }
}

PersonName name = new PersonName("jOHN", "DOE");
System.out.println(name.fullName()); // John Doe

Koruyucu Kopyalama

Diziler veya koleksiyonlar gibi değişebilir bileşenler için değişmezliği korumak amacıyla kısa kurucuda koruyucu bir kopya oluşturun.

import java.util.*;

record Snapshot(List<String> items) {
    Snapshot {
        items = List.copyOf(items); // defensive copy — unmodifiable
    }
}

List<String> mutable = new ArrayList<>(List.of("a", "b", "c"));
Snapshot snap = new Snapshot(mutable);
mutable.add("d"); // doesn't affect snapshot
System.out.println(snap.items()); // [a, b, c]

try {
    snap.items().add("e"); // UnsupportedOperationException
} catch (UnsupportedOperationException e) {
    System.out.println("Snapshot is truly immutable!");
}

Sınırlı Range Kaydı

min <= max koşulunu sağlayan ve kullanışlı yardımcı yöntemler sunan uygulamalı bir Range kaydı.

record Range(int min, int max) {
    Range {
        if (min > max) throw new IllegalArgumentException(
            "min (" + min + ") must be <= max (" + max + ")");
    }

    public boolean contains(int value) { return value >= min && value <= max; }
    public int size()  { return max - min; }
    public int clamp(int value) { return Math.max(min, Math.min(max, value)); }
}

Range valid = new Range(1, 10);
System.out.println(valid.contains(5));  // true
System.out.println(valid.clamp(15));    // 10
System.out.println(valid.size());       // 9

Kısa Kurucu Mantığını Zincirleme

Karmaşık doğrulamalar için yardımcı yöntemleri ayıklayın ve bunları kısa kurucudan çağırın.

record CreditCard(String number, String cvv, int expiryMonth, int expiryYear) {
    CreditCard {
        validateNumber(number);
        validateCvv(cvv);
        validateExpiry(expiryMonth, expiryYear);
        number = number.replaceAll("[^0-9]", ""); // strip spaces/dashes
    }

    private static void validateNumber(String n) {
        String digits = n.replaceAll("[^0-9]", "");
        if (digits.length() < 13 || digits.length() > 19)
            throw new IllegalArgumentException("Invalid card number length");
    }
    private static void validateCvv(String cvv) {
        if (!cvv.matches("[0-9]{3,4}"))
            throw new IllegalArgumentException("Invalid CVV");
    }
    private static void validateExpiry(int m, int y) {
        if (m < 1 || m > 12) throw new IllegalArgumentException("Invalid month");
        if (y < 2024)         throw new IllegalArgumentException("Card expired");
    }
}

Birden Çok Kısa Kurucu Örüntüsü

Kısa kurucularda kullanılan yaygın doğrulama örüntüleri.

record Percentage(double value) {
    Percentage {
        if (value < 0 || value > 100)
            throw new IllegalArgumentException(
                "Percentage must be 0-100, got: " + value);
        value = Math.round(value * 100.0) / 100.0; // round to 2 dp
    }

    public double asFraction() { return value / 100.0; }
}

Percentage tax = new Percentage(8.756);
System.out.println(tax.value());       // 8.76
System.out.println(tax.asFraction()); // 0.0876

Kanonik Olmayan Kurucular

Kayıtların ek kurucuları olabilir, ancak bunlar this(...) kullanarak kanonik kurucuya devretmelidir.

record Point(double x, double y) {
    // Non-canonical constructor: origin point
    Point() { this(0.0, 0.0); }

    // Non-canonical: polar coordinates
    static Point fromPolar(double r, double theta) {
        return new Point(r * Math.cos(theta), r * Math.sin(theta));
    }

    public double distance(Point other) {
        double dx = this.x - other.x;
        double dy = this.y - other.y;
        return Math.sqrt(dx*dx + dy*dy);
    }
}

Point origin = new Point();
Point p = Point.fromPolar(5, Math.PI/4);
System.out.printf("Distance: %.2f%n", origin.distance(p)); // 5.00

Değişmez Koleksiyon Kaydı

Oluşturma sırasında doğrulama ve normalleştirme yapan, kullanıcı tercihlerinin değişmez bir anlık görüntüsünü tutan bir kayıt.

import java.util.*;

record UserPreferences(String theme, Set<String> enabledFeatures, int fontSize) {
    private static final Set<String> VALID_THEMES = Set.of("light", "dark", "system");
    private static final Set<String> VALID_FEATURES = Set.of("ai", "beta", "analytics");

    UserPreferences {
        if (!VALID_THEMES.contains(theme))
            throw new IllegalArgumentException("Unknown theme: " + theme);
        if (!VALID_FEATURES.containsAll(enabledFeatures))
            throw new IllegalArgumentException("Unknown feature in: " + enabledFeatures);
        if (fontSize < 10 || fontSize > 24)
            throw new IllegalArgumentException("fontSize must be 10-24");
        enabledFeatures = Set.copyOf(enabledFeatures); // defensive copy
    }
}

Kısa Kurucuların Sınırlamaları

Kısa kurucuda yapamayacağınız işlemler:

  • Bileşenleri açıkça atayamazsınız (bloktan sonra otomatik olarak atanırlar)
  • this() veya super() çağıramazsınız
  • Bir hata fırlatmak, tüm bileşen atamalarını engeller
record Safe(int value) {
    Safe {
        // CAN: validate and modify component variables
        if (value < 0) value = 0; // normalized to 0 if negative
        // value = this.value; // NOT NEEDED — assignment happens after block
    }
}

System.out.println(new Safe(-5).value());  // 0 (normalized)
System.out.println(new Safe(10).value());  // 10

Kısa Denetim

Kısa bir kurucuda bileşen değişkenlerinde yaptığınız değişikliklere ne olur?

Özet: Kısa Kurucular ve Doğrulama

Temel çıkarımlar:

  • Kısa kurucular, bileşen atamasından önce çalışır; açık atamalar gerekmez
  • Bileşenleri doğrulamak, normalleştirmek veya koruyucu kopyalamak için bunları kullanın
  • Değerleri normalleştirmek için bileşen değişkenlerini değiştirin (küçük harfe çevirme, boşlukları kırpma, kopyalama)
  • Değişmez koşulları zorunlu kılmak için geçersiz verilerde IllegalArgumentException fırlatın
  • Değişebilir koleksiyon bileşenleri için List.copyOf / Set.copyOf kullanın
  • Kanonik olmayan kurucular, this(...) ile kanonik kurucuya devretmelidir

Sıkça Sorulan Sorular

“Kısa Yapıcılar ve Doğrulama” dersi ücretsiz mi?

Evet — “Kısa Yapıcılar ve Doğrulama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“Kısa Yapıcılar ve Doğrulama” dersinde ne öğreneceğim?

Veri bütünlüğünü sağlamak için kısa yapıcıların içine doğrulama mantığı ekleyin. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Kısa Yapıcılar ve Doğrulama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Record'lara Giriş
  2. Kısa Yapıcılar ve Doğrulama
  3. Record'larda Özel Yöntemler
  4. Record'lar, Sınıflar ve Lombok
← Java Academy Sayfasına Dön