Programlama dilinin sözcüksel yapısı bu dilde nasıl program yazacağını belirten varlıklar kümesidir.Bu kısa başlıkta javascriptin sözlüksel yapısından bahsedeceğiz.

1.Karakter Kümesi

Javascript programları Unicode karakter kümesi kullanılarak yazılır.Unicode, ASCII ve Latin-1 ‘in bir üst kümesidir ve şuanda gezengende kullanılan hemen hemen her yazı dilini destekler.

1.1.Harf Duyarlılığı

Javascript harf duyarlılığı olan bir dildir.Yani değişkenlerde fonksiyon adlarında ve diğer tanımlamalarda büyük küçük harf ayrımı vardır. “while ” anahtar sözcüğü ile “While” yada “WHILE” aynı şeyler değildir.Benzer şekilde “online” adında bir değişken tanımlamışsak bu değişkenin yanında “Online“,”OnLine” şeklinde değişken tanımlayabiliriz.Çünkü javascript için bu değişkenlerin adları aynı olsa bile harf duyarlılığı(büyük-küçük harf) olduğu için bunları farklı birer değişken olarak alacaktır.

Ayrıca unutmamanız gereken bir şey daha: HTML’de harf duyarlılığı yoktur.Kafanız karışmaması açısından bir örnek verelim.Örneğin HTML onclick olay işleme özelliği bazen onClick olarak kullanıldığını görmüşsünüzdür.Bunu HTML içerisinde büyük-küçük harf duyarlılığı olmadığı için bu şekilde kullanabilirsiniz fakat javascript kodunda (yada XHTML )  onclick olarak kullanmak zorundasınız.

1.2 Whitespace , Satır Sonları ve Biçimsel Karakterler

Javascript, programlarda dizgelerin arasındaki boşlukları görmezden gelir. Çoğunlukla satır sonlarınıda görmezden gelir.Çünkü program yazarken kodun anlaşılması ve okunması için boşluklar bırakırız, yeni satırlara geçeriz işleyişe göre bazı yerlere girdiler vererek bir düzen içinde programı yazarız.

Düzenli boşluk karakterine (/u0020) ek olarak ,whitespace(tab,enter) gibi karakterleride javascript tanır.

1.3.Unicode Escape Dizisi

Bazı bilgisayar donanımı ve yazılımlarında Unicode karakterleri dizisinin tamamı olmayabilir.Mesela é karakteri klavyelerimizde yok.Bu karakteride yazılım içinde yazmak zorundayız.Pekala burada ne yapacağız? Javascript bunun için escape dizisi tanımlamıştır.Bu Unicode escapeler \u ile başlar takibinde 16 lık sistemde 4 tane sayı gelir. Unicode escape javascript string literallerde , düzenli ifadeler literalinde ve tanımlamalarda uygulanabilir(ancak dil anahtar sözcüklerinde değil). Yukarıda verdiğimiz örneği koda dökelim:


"café" === "caf\u00e9" // => true

1.4 Açıklama Satırları

Javascriptte iki şekilde açıklama bırakabiliriz.Eğer tek satırlık bir açıklama ekleyeceksek iki eğik çizgi //, eğer uzun bir açıklama yaapcaksak yani açıklamamız bir kaç satır sürecekse açıklamamızı  /*  açılama */ şeklinde /* karakterlerinin arasına yazarız.

// tek satırlık bir açıklama
/* Buda bir açıklama */ // ve buradada başka bir açıklama
/*
 * Çok satırlı açıklama
 *
 */

1.5. Literaller

Bir literal programda doğrudan görülen veri değeridir.Tüm literaller aşağıdaki gibidir:

12 // sayı 12

1.2 // sayı 1 nokta 2

"hello world" // string

'Hi' // başka bir string

true // A boolean değer

false // başka bir boolean değer

/javascript/gi // "regular expression" bir literal

null // Bir nesnenin olmaması

İleri ki yazılarda string ve nümerik literallerin detaylarından bahsedeceğim.Onun için şimdi fazla uzatmıyorum.

1.6. Tanımlayıcılar ve Özel Amaçlı sözcükler

Tanımlayıcılar basit birer isimdir.Javascriptte, tanımlayıcıları değişkenlere ve fonksiyonlara ad vermek için kullanırız.Bir javascript tanımlayıcısı bir harf ,altçizgi(_) veya dolar işareti($) ile başlamalıdır.Daha sonraki karakterler harf, rakam ,altçizgi veya dolar işareti olabilir.Örnek tanımlayıcılar:

i
my_variable_name
v13
_dummy
$str

Tanımlayıcılarda düzenleme kolaylığı ve taşınabilirlik için sadece ASCII harfleri ve rakamlarının kullanımı yaygındır.Javascript değişken adı olarak matematiksel sembollerede izin verir.

 
var sí = true;
var π = 3.14;
 

Ayrıca javascript kendisinin kullanması için ayırdığı bazı sözcükler vardır.Bunlar “reverse words” yani “özel yapılı sözcükler” şeklinde çevirebiliriz.Ama ben “reverse words” diyeceğim.Bunları aşağıda listeledim.

1.6.1 Reversed Words

Javascriptin kullandığı bazı anahtar sözcükler vardır.Bu anahtar sözcükleri programlarda tanımlayıcı olarak kullanamazsın.Akılda kalması açısından şu şekilde diyebiliriz:Javascriptin yapısında kendine ait rezervleri var.Yani kendine ayırdığı bir bir sözlük kümesi.Bu kümedeki sözcükler:

break    delete    function    return    typeof
case     do        if          switch    var
catch    else      in          this      void
continue false     instanceof  throw     while
debugger finally   new         true      with
default  for       null        try       static
class    const     enum        export    extends
import   super   

Ayrıca aşağıdaki sözcüklerde javascript strict modda geçerlidir:

implements, let, private, public, yield, interface, package, protected

Ayrıca katı modda aşağıdakilerin kullanımınada kısıtlamalar getirilmiştir.Onlar tam rezerv edilmemiştir, fakat değişken ,fonksiyon veya parametre adı olarak kullanılmasına izin verilmemiştir.

arguments eval

Javascriptte önceden tanımlanmış global değişkenler ve fonksiyonlar vardır ve kendi değişkenlerinizde ve fonksiyonlarınızda onların da adını kullanmamalısınız.Bu adlar:

arguments   encodeURI           Infinity  Number      RegExp
Array       encodeURIComponent  isFinite  Object      String
Boolean     Error               isNaN     parseFloat  SyntaxError
Date        eval                JSON      parseInt    TypeError
decodeURI   EvalError           Math      RangeError  undefined
Function    decodeURIComponent  NaN       URIError    ReferenceError

Her özel javascript yapısının( client-side, server-side,etc.) kendine ait global özellikleri var.Javascript uygulamalarında bu listeyi aklında tutmalısın.

1.7 İsteğe Bağlı Noktalı Virgül

İfadeleri birbirinden ayırmak için birçok programlama dilinde olduğu gibi javascriptte de noktalı virgül (;) kullanılır.Bu kodunuzun anlaşılması için önemlidir.Ayrı satırlarda yazılan ifadeler varsa iki ifade arasına noktalı virgül koymayabilirsin.Bir çok javascript programcısı ifadelerin sonuna noktalı virgül koyar, fakat gereklide değildir.Yani koymasakta kodumuz çalışır.Fakat noktalı virgül kullanmamız gereken bir kaç durum var.Javascriptte seçime bağlı noktalı virgül kullanımında anlaman gereken bir kaç yer var.

Aşağıdaki koda bakalım.Farklı satırlardaki iki ifade.İki farklı satrıda oldukları için biz a dan sonra noktalı virgül kullanmamız gerekli değildir.

a = 3;
b = 4;

Fakat aşağıdaki gibi yazarsak mutlaka a değikeninden sonra noktalı virgül kullanmalıyız.

 a=3; b=4;

Javascriptte her satır sonunun noktalı virgül olarak kullanılmadığını, satır sonlarının ancak noktalı virgüller olmaksızın kod çözümlenemeyeceği zamanlarda noktalı virgül olarak kullanıldığını unutmayın.Biraz karışmış olabilir aşağıdaki örneğe bakalım:

var a
a
=
3
console.log(a)

Javascript bunu şu şekilde yorumlar:

 var a; a = 3; console.log(a); 

Javascript ilk satır sonunu noktalı virgül olarak yorumlamaz.Çünkü bir noktalı virgül olmadan kodu çözümleyemez yani anlayamaz.İkinci a , tek başına a; şeklinde yorumlanabilir, fakat javascript İkinci satır sonunu noktalı virgül olarak yorumlamaz.Çünkü ifadenin devamına bakar ve daha uzun bir ifade a=3; ifadesinin tümleşik olduğunu çözümleyebilir.

İfade sonlandırma kuralları bazen şaşırtıcı durumlara yok açabilir.Yeni bir satırla ayrılmış iki ifade bulunan aşağıdaki koda bakalım:

var y = x + f
(a+b).toString()

Burada ikinci satırdaki parantezleri javascript  ilk satırdaki f ile birleştirir ve bir fonksiyon çağrıyormuşsun gibi yorumlar.Javascriptin bu kodu nasıl yorumladığını gösterelim:

var y = x + f(a+b).toString();

Eminim kodun yazarı bu şekilde yorumlanacağını düşünmez.Ama bilgisayarlar salak varlıklardır diye boşuna demiyoruz.Biz ona ne söylediysek o kendi kuralları çerçevesinde(sözlüksel yapı) yorumlar.Neyse konudan sapmayalım.Yukarıdaki örnekte görüldüğü gibi noktalı virgülün gerektiği yerlerde vardır.

Genel manada, bir ifade (,[,/,+ yada – ile başlarsa öncesindeki ifadenin devamı olarak yorumlanabilir.İfadelerin /,+ ve – karakterleri ile başlaması pratikte çok nadirdir.Fakat javascriptin bazı programlama stillerinde ifadeler  ( ve [ ile başlayabilir.Bazı programcılar ,eğer ifade öncesi değişiklik olursa ve öncesindeki noktalı virgül sonlandırılması kaldırılabilir diye ifade başlarına defansiv noktalı virgül koyarki ifade devamında düzgün çalışsın:

var x = 0 // noktalı virgül unutulmuş
;[x,x+1,x+2].forEach(console.log) // defansive noktalı virgül kullanılarak bu iki ifade ayrılmış

Yukarıda anlattıklarım tamamıyla bana ait olmayıp “JavaScript: The Definitive Guide” kitabından derlenmiştir.

 

Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Share on TumblrEmail this to someone