Eğitim Portalı/Java/Java 13 Yenilikleri (2019)
Java01-java/59-java13-yenilikleri

Java 13 Yenilikleri (2019)

Java 13, iki önizleme özelliğiyle dil ergonomisini ileri taşıdı: çok satırlı metni dertten kurtaran text blocks ve switch ifadelerini tamamlayan yield anahtar kelimesi. İkisi de sonraki sürümlerde standartlaştı ve JDK…

Java 13 Yenilikleri (2019)

Java 13, iki önizleme özelliğiyle dil ergonomisini ileri taşıdı: çok satırlı metni dertten kurtaran text blocks ve switch ifadelerini tamamlayan yield anahtar kelimesi. İkisi de sonraki sürümlerde standartlaştı ve JDK 21'de tam çalışır.

Text blocks (çok satırlı metin)

Java'da uzun süre çok satırlı metin yazmak acı vericiydi: her satır için \n, her parça için +. Text block bunu üç tırnakla (""") çözer:

String json = """
        {
          "ad": "Ada",
          "yas": 30
        }""";

Avantajları:

  • \n ve + birleştirme yok — gerçek satırlar yazılır.
  • Tırnak kaçışı (\") çoğu zaman gereksiz.
  • Girinti otomatik kırpılır: Kapanış """'ün konumuna göre "tesadüfi boşluk" (incidental whitespace) atılır; sen kodu rahatça girintilersin.
  • .formatted(...) ile yer tutucular doldurulur (String.format gibi).

JSON, SQL, HTML, XML gibi gömülü metinleri okunaklı yazmak için idealdir. Örnek 1 (./Ornek1.java) JSON, SQL ve formatted() örnekleri gösterir. (13'te önizleme, 15'te standart.)

switch yield

Java 12'nin switch ifadeleri tek-satırlık case X -> deger için harikaydı. Ama bir case gövdesi birden çok satır gerektirdiğinde ne olacak? İşte yield burada devreye girer: bir bloktan değer üretir:

int sonuc = switch (op) {
    case TOPLA -> a + b;            // tek ifade
    case BOL -> {                   // çok satırlı gövde
        if (b == 0) yield 0;
        yield a / b;                // bloktan değeri üret
    }
};

yield x;, "bu switch ifadesinin değeri x'tir" demektir (return değildir — metottan değil, yalnızca switch'ten çıkar). Hem ok (->) hem eski iki nokta (case :) söz dizimiyle kullanılır. Örnek 2 (./Ornek2.java) çok ifadeli case gövdelerini gösterir.

Önizleme → standart yolculuğu

Java'nın yeni dil özellikleri genelde önce preview (önizleme) olarak gelir; geri bildirimle olgunlaşıp birkaç sürüm sonra standartlaşır:

  • Text blocks: 13 (preview) → 14 (preview) → 15 (standart)
  • switch expressions: 12-13 (preview) → 14 (standart)

Bu yüzden bir özelliği "hangi sürümde geldi" derken "preview mi standart mı" ayrımı önemlidir.

Özet

Java 13'ün iki ergonomi yeniliğini öğrendik: çok satırlı metni \n/+ derdinden kurtaran text blocks (Örnek 1) ve çok ifadeli switch case gövdelerinden değer üreten yield (Örnek 2); "önizleme → standart" yolculuğuna değindik. Sırada, switch ifadelerinin ve pattern matching'in standartlaştığı sürüm: Java 14.

Kod Örnekleri(2)

Ornek1

çalıştırılabilir
Ornek1.java
1// Ornek1: Java 13 — text blocks (çok satırlı metin). (13'te önizleme, 15'te standart; JDK 21'de çalışır.)
2// Çalıştırma: java Ornek1.java
3public class Ornek1 {
4
5    public static void main(String[] args) {
6        // ÖNCESİ: çok satırlı metin = \n ve + cehennemi
7        String eskiJson = "{\n" +
8                "  \"ad\": \"Ada\",\n" +
9                "  \"yas\": 30\n" +
10                "}";
11
12        // SONRASI (text block): üç tırnak, kaçış ve + yok, gerçek satırlar.
13        String json = """
14                {
15                  "ad": "Ada",
16                  "yas": 30
17                }""";
18        System.out.println("Text block JSON:\n" + json);
19        System.out.println("\nEski ile aynı mı? " + eskiJson.equals(json));
20
21        // SQL — okunaklı çok satırlı sorgu:
22        String sql = """
23                SELECT ad, fiyat
24                FROM urun
25                WHERE fiyat > 100
26                ORDER BY fiyat DESC""";
27        System.out.println("\nSQL:\n" + sql);
28
29        // formatted(): text block içinde yer tutucuları doldur (String.format gibi)
30        String sablon = """
31                Merhaba %s,
32                bakiyeniz: %.2f TL""".formatted("Burak", 1250.5);
33        System.out.println("\nformatted():\n" + sablon);
34
35        System.out.println("""
36
37                --- Java 13: text blocks ---
38                Üç tırnak (\"\"\") ile çok satırlı metin: \\n ve + birleştirme DERDİ YOK.
39                Girinti, kapanış tırnağının konumuna göre otomatik kırpılır (incidental whitespace).
40                JSON/SQL/HTML/XML gibi gömülü metinleri okunaklı yazmak için idealdir.
41                .formatted(...) ile yer tutucular doldurulur. (13 önizleme, 15 standart.)""");
42    }
43}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.

Ornek2

çalıştırılabilir
Ornek2.java
1// Ornek2: Java 13 — switch ifadesinde 'yield' (çok ifadeli case gövdeleri).
2// Çalıştırma: java Ornek2.java
3public class Ornek2 {
4
5    enum Islem { TOPLA, CIKAR, CARP, BOL }
6
7    public static void main(String[] args) {
8        int a = 12, b = 4;
9        for (Islem op : Islem.values()) {
10            // case gövdesi tek ifade değilse blok + yield kullanılır (değer "üretilir").
11            int sonuc = switch (op) {
12                case TOPLA -> a + b;          // tek ifade -> doğrudan
13                case CIKAR -> a - b;
14                case CARP -> a * b;
15                case BOL -> {                 // çok satırlı gövde -> blok + yield
16                    if (b == 0) yield 0;      // erken üret
17                    int bolum = a / b;
18                    yield bolum;              // bloktan değer üret
19                }
20            };
21            System.out.println(op + ": " + sonuc);
22        }
23
24        // yield, eski 'case :' (iki nokta) söz dizimiyle de kullanılabilir:
25        int gun = 3;
26        String mevsimGrubu = switch (gun) {
27            case 12, 1, 2: yield "kış";
28            case 3, 4, 5: yield "ilkbahar";
29            default: yield "diğer";
30        };
31        System.out.println("\nayar (eski söz dizimi + yield): " + mevsimGrubu);
32
33        System.out.println("""
34
35                --- Java 13: switch 'yield' ---
36                Bir case gövdesi tek ifade DEĞİLSE (birden çok satır), blok açılır ve değer 'yield' ile üretilir.
37                'yield x;' = "bu switch ifadesinin değeri x'tir" (return değil; sadece switch'ten çıkar).
38                Ok söz dizimi (->) tek ifade için kısadır; karmaşık gövde için { ... yield ...; } kullanılır.""");
39    }
40}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.