ham string sabitleri (raw string literals)

Bir string sabiti içinde \ (ters bölü) ya da ” (çift tırnak) karakterlerini kullanmak istediğimizde bu karakterleri bir kaçış dizgesi (escape sequence) olarak ifade etmek zorundayız. Yani \ karakterinin kendisini, string sabiti içinde \\ olarak ve ” karakterinin kendisini de \” olarak yazmalıyız. Örneğin kullanıcı ekranına

yazısını yazdırmak isteyelim:

Böyle bir kodu yazmak ya da okumak zahmetli, değil mi?
İyi ama neden böyle bir string sabitini kodda  kullanmak zorunda kalalım ki? Düzenli ifadeler (regular expression), HTML, XML ile ilgili C++ kodlarında bu çok sık karşımıza çıkan bir durum.

string sabitleriyle ilgili bir başka kural daha bizi ilgilendiriyor. Bir string sabitini bir kod satırında başlatıp bir sonraki kod satırında devam ettiremiyoruz. String sabitlerini birden fazla  kod satırına yaymak istiyorsak her kod satırının sonuna \ (ters bölü) karakterini koymamız gerekiyor.

Yukarıdaki kodda kullanılmak istenen string sabitinin yazımı geçerli değil. Aşağıdaki yazım ise geçerli:

C++11 ile birlikte böyle string sabitlerini yazmayı ya da okumayı kolaylaştıran yeni bir araç dile eklendi:  Ham string sabitleri (raw string literals).

Bir ham string sabitini yazmak için

ve

atomlarını kullanıyoruz. Tek yapmamız gereken string sabitimizin ifade edeceği yazıyı bu atomlar arasına yazmak:

Peki bu neyi değiştiriyor? Ham string sabitleri içinde yazılan karakterlere özel bir anlam yüklenmiyor. Ters bölü karakteri ve çift tırnak karakteri bir ham string sabitinin içinde doğrudan kullanılıyor. string sabitinin birden fazla satıra yayılması için özel bir karakter kullanılması gerekmiyor. Şimdi örneklere bakalım:

Yukarıdaki programın ekran çıktısı şöyle olacak:

Normal string sabitleriyle ham string sabitlerinin arasındaki farkı görmek için aşağıdaki kodu derleyip çalıştırabilirsiniz:

Peki ya oluşturmak istediğimiz yazı sabitinin içinde )” karakterleri geçiyor ise ne olacak?
Kullanıcı ekranına

yazdırmak istediğimizi düşünelim:

Yukarıdaki kod derlenmeyecek. Çünkü )” karakterleri görüldüğünde ham string sabiti kapatılmış olacak.  Kural koyuclar bu senaryoyu da düşünmüşler:
ham string sabiti içinde )” karakterlerini kullanabilmek için bir sınırlayıcı (delimiter) kullanabiliyoruz. Aslında ham string sabiti oluşturmanın tam sözdizimi şöyle:

Burada delim yazılan yerde boşluk karakteri, parantez, ters bölü ve çift tırnak dışındaki karakterlerden seçilmek üzere en fazla 16 karakter kullanılabiliyor.

Yukarıdaki kodda yer alan ham string sabitinde sınırlayıcı (delimiter) olarak ~~ karakterleri seçildi.

Necati Ergin

C ve Sistem Programcıları Derneğinde eğitmen olarak çalışıyor.

Bunlar da ilginizi çekebilir

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kod Eklemek İçin Okuyun