JavaScript Değişkenler
Tags: javascript, variables, webdev, computerscience
Published: 2020-10-28 13:06:54

JavaScriptte değişken tanımlamak için kullandığımız 3 adet anahtar kelime var; bunlar var, let ve const anahtar kelimeleri. EcmaScript 6 ile JS literatürüne giren let ve const anahtar kelimelerine daha sonra değinelim ve şimdi var anahtar kelimesi üzerinden değişkenlerimizi tanımlayalım.

Örneğin arabımızın markasını tutacak bir değişken tanımlamak istiyor olalım ve bu değişkenin ismi arabaMarkasi olsun. Tanımlamamız şu şekilde olur;

<code>var arabaMarkasi;</code>

Değeri ekrana bastırmak için console.log ‘u kullanabiliriz, şu anda bir değişken tanımladık ama değişkenimize herhangi bir değer atamadık yani kısaca araba markası “Audi” veya araba markası “Mercedes” diye bir değer ataması yapmadık. Bu yüzden değişkeni direkt konsol ekranına yazdırdığımızda undefined yazısı ile karşılaşırız. Yani değişkenin bildirilmiş (tanımlanmış ) olduğunu ama herhangi bir değer ataması yapılmadığını ifade eder.

<code>console.log(arabaMarkasi);</code>

![1_iGorWnwuLI9yPEjlynKO5Q](https://dev-to-uploads.s3.amazonaws.com/i/ql7kadj6t6qlcxjs5f8b.png)
görüldüğü üzere konsola undefined yazıldı

şimdi ise değişkenimize bir değer atması yapalım örneğin arabamızın markası “BMW” olsun atama yaptıktan sonra konsola araba markamızı bastıralım bakalım neler göreceğiz.

<code>arabaMarkasi = “BMW”;
console.log(arabaMarkasi);</code>

![1_ckVfbYpbKtYxDbHOxn-EmA](https://dev-to-uploads.s3.amazonaws.com/i/kdvevbxjh1hbnsndlrva.png)

değer ataması yapıldıktan sonra görüldüğü gibi “BMW” değerini arabaMarkasi değişkenimize atadığımız için konsola bastırdığımızda undefined yerine şimdi “BMW” değerini görmekteyiz. 

Şu ana kadar değişken tanımlayı, değişkene değer atamayı, o değişkeni konsola bastırmayı ve kodlarımızın yukarıdan aşağıya doğru yorumlandığını öğrendik.

Bu değişkeninde (arabaMarkasi) esasında bir değişken tipi var ve bu da string tipte fakat bunun ayrıntısına bir sonraki yazıda değineceğim,. Değişken tipleri nedir ve nasıl öğrenilir, değişken tipleri nasıl birbirine çevrilebilir bunları bir sonraki yazıda görelim şimdi biraz daha değişken tanımlayalım.

<h2>Değişken tanımlanırken değer ataması yapmak</h2>
 Değişkeni tanımladıktan sonra değer atamak yerine değişkeni tanımlarken de değer ataması yapabiliriz. Örneğin bu sefer bir personelYas değişkeni oluşturalım ve yaş bilgisini tutsun ama bu değişkenin değerini, değişkeni oluştururken atayalım. Örneğin;
<code>var personelYas = 21;
console.log(personelYas);</code>

![1_WwWWBVaAv7cx1DKOEWMaQg](https://dev-to-uploads.s3.amazonaws.com/i/tfrfoj97ew5fnr8svd2z.png)

görüldüğü üzere bu sefer değişkeni tanımlarken değer atamasını da yaptığımız için undefined yazmadı ve atadığımız 21 sayısal değerini konsola yazdı. 

<h2>Değişkenin değerini değiştirmek</h2>

Az önce personelYas isimli bir değişken tanımlayıp 21 sayısal değerini atamıştık. Diyelim ki aradan 1 yıl geçti ve personel artık 22 yaşında değişkenin değerini var anahtar kelimesi ile tanımladığımız için tekrar değer ataması yaparak değiştirebiliriz.

<code>personelYas = 22;
console.log(personelYas);</code>

![1_3Bs9_pzzkJpQJJITd-D-rg](https://dev-to-uploads.s3.amazonaws.com/i/jhjycs8z67ih1c1awi9t.png)
görüldüğü gibi personel yaşı artık 22

<h3>Değişken tanımlama kuralları</h3>
- Değişkene isim verilirken arada boşluk kullanılamaz
örn: var ad soyad; yanlış bir tanımdır.
bunun yerine adSoyad, ad_soyad kullanılabilir
- Programlama dillerinde kullandığımız komut kelimeler ile tanımlama yapamayız.
örn: var for; yanlış bir tanımdır.
- Değişkenler sayısal ifade ile başlayamaz.
örn: var 1arabaMarkasi; yanlış bir tanımdır.
- Tanımlamalarımız büyük küçük harf duyarlıdır değişken tanımlarken ve kullanırken buna dikkat edilmelidir.
örn: var adSoyad; ile var AdSoyad; ayrı değişkenlerdir.

<h3>EcmaScript 6 ile gelen let ve const anahtar kelimeleri</h3>

EcmaScript6 ile birlikte let ve const anahtar kelimeleri ile de değişken tanımlaması yapabiliyoruz. let neden kullanılır ondan bahsedecek olursak aslında var ile yapılan tüm işlemler let ile de yapılabilir. Fakat aralarında scope ve tekrar bildirim kısıtlama farklılığı vardır. Örneğin let ile bir değişken tanımlayalım;

<code>let depoHacmiLt = 1500;
console.log(depoHacmiLt);</code>

![1_plIZZ54iZD_c8SZDmIY-SQ](https://dev-to-uploads.s3.amazonaws.com/i/hqoah9ghi8skf37929a2.png)

görüldüğü gibi 1500 değerini konsola bastı aynısını var anahtar kelimesi ile yapabilirdik pek bir farkını şu an göremedik. Şimdi ise tekrar bir değer ataması yapalım ve burada anahtar kelimeyi tekrar dahil edelim yani tekrar tanımlayarak değer atayacağız o da şöyle;

<code>let depoHacmiLt = 1500;
console.log(depoHacmiLt);
let depoHacmiLt = 2000;
console.log(depoHacmiLt);</code>

![1_SiKxWb5MdLzJzKmN_CBzrw](https://dev-to-uploads.s3.amazonaws.com/i/oyj0n5zd3fd78xzeebqt.png)

görüldüğü üzere tekrar tanım ifadesi kullanarak değer atamasını yaparken bize bu ifadenin zaten tanımlandığı söylüyor ve hata veriyor. Tanımlama yapmadan sadece değer atasaydık herhangi bir hata almayacaktık.

<code>let depoHacmiLt = 1500;
console.log(depoHacmiLt);
depoHacmiLt = 2000;
console.log(depoHacmiLt);</code> 

![1_i_YnGidHP81weNkt0QCc4w](https://dev-to-uploads.s3.amazonaws.com/i/exs22v9u8o3skedp4d5t.png)

görüldüğü üzere depohacmi tekrar tanımlanmadı sadece değer ataması yapıldı tekrar tanımlanmadan sadece değer ataması yapıldığında let anahtar kelimesi ile tanımladığımız değişkenin değer ataması başarılı bir şekilde gerçekleşti ve 1500 olan değer görüldüğü gibi 2000 olarak güncellendi.

<b>let anahtar kelimesi ile tanımladığımız değişkenler sadece bir kere tanımlanabilir ama birden çok kere değer ataması yapılabilir.</b>  

var anahtar kelimesi kullanıyor olsaydık ve tekrar tanımlayarak değer ataması yapmaya çalışsaydık burada bir hata almayacaktık.

<code>var depoHacmiLt = 1500;
console.log(depoHacmiLt);
var depoHacmiLt = 2000;
console.log(depoHacmiLt);</code>

![1_fFhvyQCa_J2Zdr2Yp-YPNg](https://dev-to-uploads.s3.amazonaws.com/i/0e59m14pfe9wxo0yucg8.png)

görüldüğü üzere var anahtar kelimesi ile tekrar tanımlayarak değer atadık aradaki en temel fark aslında bu oluyor let ve var anahtar kelimeleri burada tamamen birbirinden ayrılıyor. Peki bu bize ne sağlar? Sadece bir kere tanımlayacağımız programın başka yerinde aynı isimli bir değişken tanımlamamamız gereken fakat değeri de değişebilecek bir değişken istiyorsak let anahtar kelimesi ile tanımlayabiliriz. Aslında artık let anahtar kelimesi var anahtar kelimesinin yerini aldı diyebiliriz. Eksiği yok fazlası var!

const anahtar kelimesi ise bizim değerinin değişemeyeceği değişkenler tanımlamamızı sağlar. Örneğin bir kişinin doğum tarihi aynıdır ve hiç değişmez, o kişi ne zaman doğdu ise doğum tarihi o’dur işte böyle değerlerin aynı kalmasını, dışarıdan değişmemesini istiyorsak const anahtar kelimesi ile tanımlayabiliriz.

<code>const dogumYili = 1999;
console.log(dogumYili);</code>

![1_HBC99HGBOWw2UeXR3YGysA](https://dev-to-uploads.s3.amazonaws.com/i/9ikvs9vq7ehyv26ji98e.png)

şu an let ve var ile pek bir farkı olduğunu söyleyemeyiz şimdi const anahtar kelimesi ile tanımladığımız dogumYili değişkeninin değerini değiştirmeye çalışalım. Yapacağımız şey sadece tekrar bir değer ataması yapmaya çalışmak olacak;

<code>const dogumYili = 1999;
console.log(dogumYili);
dogumYili = 2000;
console.log(dogumYili);</code>

![1_5q-_cjZvZSCKpOxx07noRQ](https://dev-to-uploads.s3.amazonaws.com/i/a80fqin28el7d7s0njtx.png)

görüldüğü gibi sadece tekrar yeni bir değer atamaya çalışıyorum tekrar const anahtar kelimesini bile kullanmadım! Fakat bana hata veriyor, yani const anahtar kelimesi ile yaptığımız değişken değerleri değişmez.

İlerleyen yazılarda referans tip ve değişken tip’i ele alırsak bir üst paragrafta kullandığım cümle ile ilgili birtakım garipsemeler yaşayabilirsiniz. Çünkü örneğin const ile bir dizi tanımı yapıldığında yeni bir eleman eklediğimizde ekleme işlemi başarılı olur. Ee işte dizinin değeri değişti, yani değişken değeri değişti? const ile tanımlanınca değer değişmiyordu? Burada devreye referans tip ve değer tip kavramları giriyor ama onları dediğim gibi sonraki yazılarda değineceğiz. Görürseniz şaşırmayın diye bahsetmek istedim sadece.

Artık JavaScriptte değişken nasıl tanımlanır? Hangi anahtar kelimeler kullanılır? Bu anahtar kelimelerin temel farkları nelerdir? Değişken tanımlama kuralları nedir? Değişkene yeni değer ataması yapılabiliyor ise nasıl yapılır? bunları kavradığımızı düşünüyorum. EcmaScript 6 ile ilgili konulara değinirken bu anahtar kelimelerin farkında daha çok değineceğim o zaman da scope özelliklerine bakarız. Okuduğunuz için teşekkür ederim JavaScript’e yeni giriş yaptıysanız veya EcmaScript 6 ile const ve let anahtar kelimelerini keşfettiyseniz de yolunuz buraya düşmüş ise açıklayıcı bir yazı olmuştur. Kendinize çok iyi bakın, iyi davranın ve bol bol kodlayın!