Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

String İşlemleri

BERK'te string işlemleri güvenli, hızlı ve kullanışlıdır. UTF-8 desteği, zengin stdlib API'si ve zero-copy operasyonlar.

String Oluşturma

Literal Stringler

değişken isim = "Ali"
değişken mesaj = "Merhaba Dünya!"
değişken çok_satırlı = """
    Bu bir
    çok satırlı
    string'dir
"""

Escape Karakterleri

değişken yeni_satır = "Satır 1\nSatır 2"
değişken tab = "Kolon\tDeğer"
değişken tırnak = "O dedi: \"Merhaba\""
değişken unicode = "\u{1F600}"  // 😀

Temel İşlemler

Birleştirme (Concatenation)

değişken ad = "Ali"
değişken soyad = "Yılmaz"

// + operatörü
değişken tam_ad = ad + " " + soyad

// format! makrosu
değişken mesaj = format!("Merhaba {}, yaşınız {}.", isim, yaş)

Uzunluk ve Boş Kontrol

değişken s = "Merhaba"
yazdır(s.uzunluk())      // 7
yazdır(s.boş_mu())       // yanlış
yazdır(s.karakter_sayısı()) // UTF-8 karakter sayısı

String Modülü Fonksiyonları

Büyük/Küçük Harf Dönüşümü

kullan string;

değişken metin = "Merhaba Dünya"
yazdır(string::büyüt(metin))         // "MERHABA DÜNYA"
yazdır(string::küçült(metin))        // "merhaba dünya"
yazdır(string::baş_harfi_büyüt(metin)) // "Merhaba dünya"

Trim ve Pad

değişken s = "  merhaba  "
yazdır(string::trim(s))         // "merhaba"
yazdır(string::trim_start(s))   // "merhaba  "
yazdır(string::trim_end(s))     // "  merhaba"

değişken x = "42"
yazdır(string::pad_left(x, 5, '0'))  // "00042"

Bölme (Split)

değişken metin = "elma,armut,muz"
değişken parçalar = string::böl(metin, ",")
// ["elma", "armut", "muz"]

// Satırlara böl
değişken çok_satır = "Satır 1\nSatır 2\nSatır 3"
değişken satırlar = string::satırlara_böl(çok_satır)

Değiştir (Replace)

değişken metin = "Merhaba Dünya"
değişken yeni = string::değiştir(metin, "Dünya", "BERK")
yazdır(yeni)  // "Merhaba BERK"

// Tüm oluşumları değiştir
değişken s = "test test test"
yazdır(string::değiştir_tümü(s, "test", "deneme"))

Arama ve Kontrol

İçerir (Contains)

değişken metin = "Merhaba Dünya"
yazdır(string::içerir(metin, "Dünya"))  // doğru
yazdır(string::içerir(metin, "Java"))   // yanlış

Başlar ve Biter

değişken dosya = "resim.png"
yazdır(string::ile_başlar(dosya, "resim"))  // doğru
yazdır(string::ile_biter(dosya, ".png"))    // doğru

Bul (Find)

değişken metin = "Merhaba Dünya"
değişken index = string::bul(metin, "Dünya")

eşleştir index yap
    Bir(i) => yazdır("Bulundu: " + i),
    Hiçbiri => yazdır("Bulunamadı")
son

String Formatla

// Basit interpolasyon
değişken isim = "Ali"
değişken yaş = 25
değişken mesaj = format!("İsim: {}, Yaş: {}", isim, yaş)

// İsimlendirilmiş parametreler
değişken m = format!("x: {x}, y: {y}", x: 10, y: 20)

// Sayı formatlama
değişken pi = 3.14159
yazdır(format!("Pi: {:.2}", pi))  // "Pi: 3.14"

Unicode ve UTF-8

Karakter İterasyonu

değişken metin = "Merhaba 🌍"

için karakter içinde string::karakterler(metin) yap
    yazdır(karakter)
son

// Byte iterasyonu
için byte içinde string::byte_lar(metin) yap
    yazdır(byte)
son

Türkçe Karakter Desteği

değişken türkçe = "çalışma ığğöüş"
yazdır(string::büyüt(türkçe))  // "ÇALIŞMA IĞĞÖÜŞ"
yazdır(türkçe.uzunluk())       // Doğru byte sayısı
yazdır(türkçe.karakter_sayısı()) // Görünen karakter sayısı

Regex Desteği

kullan regex::Regex;

değişken re = Regex::yeni(r"\d{3}-\d{4}")
değişken telefon = "555-1234"

eğer re.eşleşir(telefon) yap
    yazdır("Geçerli telefon")
son

// Tüm eşleşmeleri bul
değişken metin = "Email: ali@test.com ve ayse@test.com"
değişken re2 = Regex::yeni(r"[a-z]+@[a-z]+\.[a-z]+")
için eşleşme içinde re2.tüm_eşleşmeler(metin) yap
    yazdır(eşleşme)
son

String Builder

Verimli string birleştirme için:

kullan string::StringBuilder;

değişken sb = StringBuilder::yeni()
sb.ekle("Merhaba")
sb.ekle(" ")
sb.ekle("Dünya")
sb.ekle_satır("!")

değişken sonuç = sb.inşa_et()
yazdır(sonuç)  // "Merhaba Dünya!\n"

Performans İpuçları

  1. StringBuilder kullan (çoklu birleştirmeler için)

    // ❌ Yavaş
    değişken s = ""
    için i içinde 0..1000 yap
        s += "x"
    son
    
    // ✅ Hızlı
    değişken sb = StringBuilder::yeni()
    için i içinde 0..1000 yap
        sb.ekle("x")
    son
    
  2. String slice kullan (kopyalama yapmadan)

    değişken s = "Merhaba Dünya"
    değişken alt = s[0..7]  // "Merhaba" (zero-copy)
    
  3. Önceden boyut ayır

    değişken sb = StringBuilder::with_capacity(1000)
    

Özet

  • ✅ UTF-8 native desteği
  • ✅ Türkçe karakter desteği
  • ✅ Zengin stdlib API
  • ✅ Zero-copy operasyonlar
  • ✅ Regex desteği
  • ✅ String interpolasyon
  • ✅ StringBuilder performansı