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ı:
\nve+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.formatgibi).
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ılabilir1// 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}Ornek2
çalıştırılabilir1// 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}