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 DoeKoruyucu 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()); // 9Kı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.0876Kanonik 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.00Değ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()veyasuper()ç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()); // 10Kı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
- Record'lara Giriş
- Kısa Yapıcılar ve Doğrulama
- Record'larda Özel Yöntemler
- Record'lar, Sınıflar ve Lombok