JavaScript'te kullanılabilen veri tiplerini önceki yazımızda öğrenmiş, değişken ve sabit kavramlarına değinmiştik. Bu bölümde verileri bildirmenin başka bir yolu olan literal kullanımı üzerinde duracağız. Literaller durağandır, yani çeşitli ifadeler içinde yer alabilen ama değiştirilemeyen değerlerdir. Bu özellikleriyle kesin olarak değişkenlerden ayrılırlar. Şimdi farklı veri tiplerinin literal olarak nasıl ifade edilebildiğini görelim.
Dizi Literaller (Array Literals)
Bir dizi literal, sıfır veya daha fazla ifade içermektedir. Dizi öğelerinin(elemanlarının) her biri köşeli ayraçlar arasına alınarak temsil edilir. Dizi literal kullanarak bir dizi yarattığımızda bu dizi, dizi elemanı olarak belirlenmiş değerlerle başlar ve uzunluğu dizideki toplam eleman sayısı kadardır.
Aşağıdaki örnekte dört elemanlı "BuyukSehirler" dizisi oluşturulmuştur. Aynı zamanda dizinin uzunluğu da dörttür.
| BuyukSehirler = ["İstanbul", "İzmir", "Ankara", "Adana"] |
Eğer script bloğunun en üst kısmında literal kullanılarak bir dizi yaratılmışsa, JavaScript her zaman diziyi yorumlayarak dizi literalin içeriğini değerlendirir; literal bir fonksiyonun içinde kullanılıyorsa fonksiyon her çağrıldığında dizi yeniden yaratılır.
Dizi literalleri aynı zamanda dizi nesneleridir(array objects). İlerleyen bölümlerde dizi nesneleriyle ilgili detaylı bilgi edinebileceksiniz.Dizi Literallerde Fazladan Virgül Kullanımı
Tüm elemanları bir dizi içinde belirtme olanağına sahip değiliz. Eğer bir sıraya iki virgül konulmuşsa, dizi, belirtilmemiş elemanlar için boşluklarla birlikte yaratılır :
| yabanciDiziler = ["X-Files", , "Angel"] |
Örnekteki dizinin, değeri belirtilmiş iki elemanla birlikte bir de boş elamanı vardır. Bu elemanlar yabanciDiziler[0] = "X-Files", yabanciDiziler[1] = undefined, yabanciDiziler[1] = "Angel" şeklinde sıralanır.
Eğer dizinin son elamanını izleyen bir virgül varsa, bu virgül görmezden gelinir. Aşağıdaki örnekte üç elemanlı bir dizi belirtilmiştir, son virgül dışındaki tüm virgüller yeni bir elemanı göstermektedir.
| hobilerim = ["Kitap", "Müzik", "Sinema", ]; |
Şimdiki örneğimizde ise dizinin uzunluğu dört olmakla beraber ilk eleman(hobilerim[0]) ve üçüncü eleman(hobilerim[2]) eksiktir :
hobilerim = [ , "Müzik", , "Sinema"];
Son olarak şu örneği inceleyelim :
hobilerim = ['Kitap', , 'Müzik', , ]; |
Uzunluğu dört olan bu dizide, hemen farkedilebileceği gibi değerler tek tırnak arasına alınmış, hobilerim[1] ve hobilerim[3] elemanlarının değeri belirtilmemiştir. Sadece son virgül görmezden gelinir.Mantıksal Literaller (Boolean Literals)
Boolean tipi iki literal değerden birine sahip olabilir : true ve false... Bir önceki yazıda gördüğümüz ilkel doğru(true) ve yanlış(false) Boolean değerlerini, Boolean nesnesinin(Boolean object) true ve false değerleriyle karıştırmamak gerekir. İlerleyen bölümlerde Boolean nesnesi hakkında detaylı bilgi edineceğiz.
Kayan-Noktalı Literaller(Floating-Point Literals)
Kayan noktalı bir literalde aşağıdaki kısımlar bulunabilir :
- Bir desimal(onluk) tam sayı
- Bir desimal(onluk) nokta
- Bir kesir (başka bir desimal sayı)
- Bir üs
Üs kısmı, desimal tam sayıyı izleyen bir "e" veya "E" harfinden ibarettir. Kayan noktalı bir literal mutlaka en az bir basamağa ve desimal nokta veya "e" harfinden herhangi birine sahip olmalıdır.
Bazı örnek kayan-noktalı(floating-point) literaller : 3.14, -4.25E18, .2E12 ve 1E-12
Tam Sayı Literaller (Integer Literals)
Tam sayılar decimal(ondalık - 10 tabanı), hexadecimal(onaltılık - 16 tabanı) ve octal(sekizlik - 8 tabanı) olarak belirtilebilir. Sekizlik bir tam sayı önüne getirilen bir 0(sıfır) ile belirtilir; onaltılık sayıları belirtmek içinse önlerine 0x(veya 0X) getirilir. Onaltılık tam sayılar (0-9) aralığındaki rakamlardan ve a-f(veya A-F) aralığındaki harflerden oluşabilirken sekizlik tam sayılar sadece (0-7) aralığındaki rakamlarla ifade edilir.
Sekizlik tam sayı literaller şiddetle reddedilmiş ve ECMA-262, Edition 3 standartından kaldırılmıştır. JavaScript 1.5 sekizlik tam sayı literalleri geriye-uyumluluk adına desteklemeye devam etmektedir.
Örnek tam sayı literaller : 31, 0172, 0xABC ve -6428
Nesne Literalleri (Object Literals)
Kaşlı ayraçlar({}) arasına eklenen nesne literalleri, sıfır veya daha fazla özellik adı(property name) eşleştirmesinin ve bir nesnenin ortaklığa girmiş değerlerinin listesidir. Bir nesne literalini bir ifadeye başlarken kullanmamak gerekir; bu hataya neden olabilir veya bizim beklediğimiz sonucu vermeyebilir, çünkü { işareti yeni bir bloğun başlangıcı olarak yorumlanmaktadır.
Takip eden satırlarda bir nesne literali örneğine yer verilmiştir :
var Satilik = "Doğan";
function arabaTipleri(arabaAdi){
if(arabaAdi == "Murat")
return arabaAdi;
else
return "Kusura bakmayın ama biz " + arabaAdi + "satmıyoruz.";
}
araba = {benimki: "Anadol", alinacak: arabaTipleri("Murat"), ozel: Satilik}
document.write(araba.benimki); // Anadol
document.write(araba.alinacak); // Murat
document.write(araba.ozel); // Doğan
|
İlk satırda "Satilik" adında bir değişken tanımlanmış ve "Doğan" string değeri bu değişkene atanmıştır.
"arabaTipleri()" fonksiyonu kendisine gönderilen değeri "Murat" değeriyle karşılaştırır ve aynılarsa bu değeri , aynı değillerse bir uyarı iletisini çağrıldığı yere geri döndürür. (if-else karşılaştırma ifadelerini daha sonra ayrıntılı olarak açıklayacağız)
"araba" nesnesinin ilk elemanı "benimki" adında bir özellik(property) tanımlamaktadır; ikinci eleman olan "alinacak" özelliği "arabaTipleri()" fonksiyonunu çağırır; üçüncü eleman, yani "ozel" adindaki ozellik ise "Satilik" değişkenini kullanmaktadır.
Nesnenin elemanları "document.write()" ifadesiyle yazdırıldığında sonuçlar sırasıyla "Anadol", "Murat" ve "Doğan" olacaktır.
Özellik adı olarak string veya sayısal literal kullanabilir veya bir nesneyi başka bir nesnenin içine yerleştirebiliriz. Aşağıdaki örnek bu seçenekle ilgilidir :
araba = {bizim: {benimki: "Anadol", alinacak: "Murat", ozel: "Doğan"}, 4: "Kartal"}
document.write(araba.bizim.alinacak); // Murat document.write(araba[4]); // Kartal |
String Literaller (String Literals)
Bir string literal çift tırnak(") veya tek tırnak(') işaretleri arasına alınan sıfır veya daha fazla karakterden oluşur. Stringler mutlaka aynı tipteki tırnak işaretleriyle sınırlandırılmalıdır. Buna göre bir string değer, çift tırnak işareti veya tek tırnak işaretinden sadece biri kullanılarak yazılabilir. Aşağıda bazı string literal örneklerine yer verilmiştir :
- "Acaba mı?"
- 'Acaba mı?'
- "0123456789"
- "bir satır \n başka bir satır"
String literal değeri içindeki String nesnesi yöntemlerinden(methods) herhangi birini çağırabiliriz; JavaScript otomatik olarak string literali geçici bir String nesnesine çevirir, yöntemi(metodu) çağırır ve son olarak geçici String nesnesini temizler. String.length özelliğini aynı zamanda bir string literal ile birlikte kullanabiliriz.
String nesnesi kullanımı zorunlu olmadığı sürece string literalleri kullanmak gerekir. İlerde String nesnesiyle ilgili ayrıntıları öğrenme olanağına kavuşacağız.
String İçinde Özel Karakter Kullanımı
Aşağıdaki örnekte gösterildiği gibi, bir string içerisinde olağan karakterlerin yanı sıra özel karakterler de kullanabiliriz :
"bir satır \n başka bir satır"
Örneğimizde kullanılan "\n" özel karakteri JavaScript tarafından tek bir karakter olarak algılanıp, yeni satıra geçiş şeklinde yorumlanır. JavaScript'te kullanılan özel karakterlerin tam listesini aşağıdaki tabloda görebilirsiniz.
Tablo : JavaScript özel karakterleri
| Karakter | Anlamı |
\b | Backspace (Geri al)
|
\f | Form feed (Form beslemesi)
|
\n | New line (Yeni satır)
|
\r | Carriage return (Satır başı)
|
\t | Tab (Tab - özel aralık)
|
\v | Vertical tab (Dikey tab)
|
\' | Apostrophe - Single quote (Kesme imi veya tek tırnak)
|
\" | Double quote (Çift tırnak)
|
\\ | Backslash character (Ters eğik çizgi)
|
\XXX | Latin-1 standartında kodlanmış karakterleri göstermek için 0 ile 377 aralığında değer alabilen üç haneli octal(sekizlik) sayı. Örneğin \251 octal sıralaması Copyright sembolü(©) için kullanılır.
|
\xXX | Latin-1 standartında kodlanmış karakterleri göstermek için 00 ile FF aralığında değer alabilen iki haneli hexadecimal(onaltılık) sayı. Örneğin \xA9 sıralaması Copyright sembolü(©) için kullanılır.
|
\uXXXX | Unicode karakterleri göstermek için dört haneli hexadecimal(onaltılık) sayı. Örneğin \u00A9 sıralaması Copyright sembolü(©) için kullanılır. |
Karakter Kaçırma (Escaping Characters)
Yukarıdaki tabloda listelenmeyen karakterlerin önüne getirilen ters eğik çizgiler dikkate alınmaz. Ancak böyle bir kullanım şeklinden kaçınılmalıdır.
Tırnak işaretlerini önlerine ters eğik çizgi getirilerek string içinde kullanabiliriz. Bu yöntem tırnak işaretinden kaçmak(escaping) olarak bilinir. Örneğin,
var alinti = "Bana \"Merhaba dünya\" dediler.";
document.write(alinti);
ifadesi - Bana "Merhaba dünya" dediler. - sonucunu verir.
Bir stringin içine literal ters eğik çizgi eklendiğinde, ters eğik çizgi karakterinden kaçılmalıdır. Örneğin "c:\windows\system" şeklinde bir dizin yolunu string olarak tahsis ettiğimizi varsayarsak bu stringin yazımı aşağıdaki gibi olacaktır :
var sistem = "c:\\windows\\system"
UNICODE
Unicode, yazılabilir dillerin en önemlilerini görüntülemek ve değiştirmek için kullanılan evrensel bir karakter-kodlama standartıdır. Amerika, Avrupa, Orta Doğu, Afrika, Hindistan, Asya ve Pasifik dillerinin yanında tarihi metinleri ve teknik sembolleri kapsar. Unicode değişikliğe, işlemeye ve çoklu-dilde yazılan metinlerin görüntülenmesine izin verdiği gibi ortak teknik ve matematiksel semboller için de kullanılabilir.
Unicode karakter seti bilinen tüm kodlamalarda karşılık bulmaktadır. Unicode, ASCII(American Standard Code for Information Interchange) karakter setinden sonra modellenmiştir. Her bir karakter için sayısal bir değer ve ad kullanır. Karakter kodlaması, karakterin kimliğini ve sayısal değerini(kod pozisyonu) belirtir. 16-bit sayısal değer(kod değeri) hexadecimal(onaltılık) sayı olarak tanımlıdır ve "U" ön ekini alır. Örneğin U+0041 kodlaması A harfini temsil eder. LATIN CAPITAL LETTER A bu ifade için eşsiz ad olarak belirlenmiştir.
Unicode ASCII karakterlerle uyumludur ve pek çok program tarafından desteklenir. İlk 128 Unicode karakteri ASCII karakterlerle uyuşur ve aynı byte değerlerine sahiptir. U+0020 ile U+007E aralığındaki Unicode karakterler, 0x20 ile 0x7E aralığındaki ASCII karakterlerine eşittir. Fark olarak ASCII, Latin alfabesini destekler ve 7-bitlik karakter setini kullanırken, Unicode her karakter için bir 16-bitlik değer kullanır. Unicode aynı zamanda genişletme mekanizmasını da destekler; UTF-8 bir milyondan fazla karakterin 16-bitlik karakter eşleşmesi kullanılarak kodlanmasına izin vermektedir. UTF güncel bitleri kodlar.
Unicode uluslararası standart ISO/IEC 10646-1 ile tam olarak uyumludur ve ISO UCS-2(Universal Character Set) standartını destekler.
JavaScript ve popüler internet tarayıcılarının Unicode'u desteklemesi, JavaScript programlarında non-Latin, uluslararası ve yerel karakterler ile özel teknik sembollerin kullanılabildiği anlamına gelmektedir. Unicode çoklu-dilde yazılan metinleri kodlamak için standart bir yol sağlar. ASCII ile uyumlu hale geldiğinden bu yana, programlar ASCII karakterleri kullanabilir. JavaScript ASCII olmayan(non-ASCII) Unicode karakterlerin yorumlarda, string literallerde, belirteçlerde ve düzenli ifadelerde kullanılmasına izin verir. JavaScript 1.3 versiyonundan itibaren Unicode kodlamayı desteklemektedir.
Unicode Kaçış Serisi
Unicode kaçış serisini string literaller, düzenli ifadeler ve belirteçlerde kullanabiliriz. Kaçış serisi altı ASCII karakterden oluşur : \u ve dört-haneli bir hexadecimal(onaltılık) sayı. Örneğin \u00A9 Copyright sembolünü(©) temsil eder. Her Unicode kaçış serisi JavaScript tarafından bir karakter olarak yorumlanmaktadır. Aşağıdaki kod Copyright sembolünü ve "www.ceviz.net" stringini c değişkenine değer olarak atar.
c = "\u00A9 www.ceviz.net"
Aşağıdaki tabloda sık sık kullanılan özel karakterleri ve bu karakterlerin Unicode değerlerini bulabilirsiniz.
Tablo : Özel karakterlerin Unicode değerleri
| Kategori | Unicode değer | Ad | Format adı |
Boş alan değerleri
Satır sonlandırıcı değerleri
Ek Unicode kaçış serisi değerleri | \u00009
\u000B
\u000C
\u0020
\u000A
\u000D
\u0008
\u0009
\u0022
\u00027
\u005C | Tab
Dikey Tab
Form Beslemesi
Boşluk
Satır Beslemesi
Satırbaşı
Geri al
Yatay Tab
Çift Tırnak
Tek Tırnak
Ters Eğik Çizgi | <TAB>
<VT>
<FF>
<SP>
<LF>
<CR>
<BS>
<HT>
"
'
\ |
JavaScript'teki Unicode kaçış serisi kullanımı Java'dan farklıdır; kaçış serisi asla ilk seferde özel karakter olarak yorumlanmaz. Örneğin, satır sonlandırıcı kaçış serisini bir stringin içine yerleştirdiğimizde fonksiyon tarafından yorumlanmadan önce stringi sonlandırmaz. JavaScript kaçış serilerini eğer yorum içinde kullanılmışlarsa görmezden gelir. Java'da ise bir kaçış serisi tek satırdan oluşan bir yorumda kullanılmışsa Unicode karakter olarak yorumlanır. Java derleyicisi bir string literal için kaçış serisini ilk olarak yorumlar. Örneğin, bir satır sonlandırıcı kaçış karakteri(\u000A) Java içinde kullanılmışsa bu karakter string literali sonlandırır. Bu Java'da hataya neden olur, çünkü satır sonlandırıcılarının string literal içinde kullanımı yasaklanmıştır. Satır beslemesi için kesinlikle \n karakteri kullanılmalıdır. JavaScript'te kaçış karakteri tıpkı \n gibi çalışır.
Unicode ile ilgili daha fazla bilgi için Unicode birliğinin web sitesine(Unicode Consortium Web site) ve Addison-Wesley tarafından 1996 yılında yayınlanan Unicode standartına(The Unicode Standard, Version 2.0) bakabilirsiniz.
JavaScript'teki literaller ve Unicode standartı hakkındaki uzun yazımız burada son buluyor dostlarım; umarım sıkılmadan ve yorulmadan okumuşsunuzdur. Aklınıza takılan noktalarla ilgili her türlü soruyu web forumlarında(örneğin forum.ceviz.net) bana veya konuyla ilgilenen başka arkadaşlarımıza yöneltebilirsiniz. Artık kimi bulursanız :)
FixMan