ÃoÄu zaman JavaScript uygulamaları bilgi ile çalıÅır. Ãrnek vermek gerekirse:
- Online MaÄaza â satılacak ürün bilgileri.
- Sohbet Uygulaması â Kullanıcı ve mesaj bilgisi.
DeÄiÅkenler bu bilgileri tutmak için kullanılırlar.
DeÄiÅken
DeÄiÅken âisimlendirilmiÅ hafızaâ olarak adlandırılır. DeÄiÅkenler ile kullanıcıları, ürünleri ve diÄer tipteki bilgileri tutabiliriz.
JavaScript dilinde deÄiÅken let kelimesiyle üretilir.
AÅaÄıdaki cümle âmesajâ isminde bir deÄiÅken üretir (diÄer bir deyiÅle tanımlar):
let mesaj;
Artık bunun içerisine bilgi koyulabilir. Bunu atama operatörü ile = yapabilirsiniz.
let mesaj;
mesaj = 'Merhaba'; // Merhaba karakter dizisini mesaja atadınız
Artık karakter dizi deÄiÅken ile ilintili olan hafıza bölgesine kaydedildi. Artık deÄiÅken ismi kullanarak bu deÄere eriÅilebilir.
let mesaj;
mesaj = 'Hello!';
alert(mesaj); // deÄiÅkenin içeriÄini gösterir.
Daha açıklayıcı olması açısından deÄiÅkeni aynı anda tanımlayıp deÄer atayabilirsiniz.
let mesaj = 'Merhaba!'; // DeÄiÅken tanımlandı ve deÄer atandı
alert(mesaj); // Merhaba!
Birden fazla deÄiÅkeni bir satırda tanımlamak da mümkündür.
let kullanici = 'Ahmet', yas = 25, mesaj = 'Merhaba';
Kısa görünse bile yukarıdaki yazım önerilmez. Okunabilirlik açısından her deÄiÅkenin bir ayrı bir satırda yazılması daha iyi olacaktır.
Tabi her deÄiÅken için ayrı satır kullanırsanız biraz uzun olur fakat okunması açısından daha kolaydır.
let kullanici = 'Ahmet';
let yas = 25;
let mesaj = 'Merhaba';
Bazı programcılar ise Åu Åekilde kullanmaktadırlar:
let kullanici = 'Ahmet',
age = 25,
mesaj = 'Merhaba';
Hatta bazıları Åu Åekilde kullanır:
let kullanici = 'Ahmet'
, yas = 25
, mesaj = 'Merhaba';
Teknik olarak bu yazımların hepsi doÄrudur. Gerisi sizin yazım tarzınıza kalmıÅ. Her yiÄidin yoÄurt yiyiÅi farklıdır.
let yerine var kullanmaEski kodlarda let yerine var kullanıldıÄını görürsünüz.
var mesaj = 'Merhaba';
var kelimesi neredeyse let ile aynı anlama gelmektedir. var kelimesi de deÄiÅken üretmeye yarar fakat bunu eski tarzda yapar.
let ile var arasında nüans farkı vardır. İkisi de istediÄimizi yerine getirir. Bunun ile ilgili detaylı bilgi Eski tip "var" konusuna gelindiÄinde verilecektir.
Gerçek hayat ile benzeÅim
âDeÄiÅkenâ konsepti âkutuâ olarak tanımlanabilir. Her kutunun üzerinde farklı bir etiket yapıÅtırılmıÅtır.
ÃrneÄin mesaj deÄiÅkeni üzerinde "mesaj" yazısı olan ve deÄeri "Merhaba!" olan bir kutu olarak hayal edilebilir.
Kutuya istediÄiniz deÄeri koyabilirsiniz. Ayrıca içerisindeki deÄeri istediÄiniz kadar deÄiÅtirebilirsiniz.
let mesaj;
mesaj = 'Merhaba!';
mesaj = 'Dünya!'; // deÄer deÄiÅti
alert(mesaj);
DeÄer deÄiÅtiÄinde, deÄiÅkenin eski deÄeri silinir.
Ayrıca iki deÄiÅken tanımlayıp içerilerindeki deÄerleri bir diÄerine aktarabilirsiniz.
let merhaba = 'Merhaba Dünya!';
let mesaj;
// merhaba deÄiÅkeninin içeriÄini mesaj deÄiÅkenine aktarın
mesaj = merhaba;
// artık iki deÄiÅken de aynı deÄeri taÅır.
alert(merhaba); // Merhaba Dünya!
alert(mesaj); // Merhaba Dünya!
İlginç bir bilgi olarak Scala veya Erlang gibi fonksiyonel diller deÄiÅkenin deÄerinin deÄiÅtirilmesine izin vermez.
Böyle dillerde deÄer bir kutunun içerisinde sonsuza kadar saklanır. EÄer farklı bir deÄer kaydetmek istenirse bu diller bizi yeni bir kutu oluÅturmaya iter. Eskisi yeniden kullanıp deÄeri deÄiÅtirilemez.
İlk baÅta biraz garip gelse de, bu diller genel olarak ciddi iÅlerin yapılabildiÄi dillerdir. DeÄiÅkenlerin tekrar atanamaması kodların paralel bir Åekilde çalıÅmasında oldukça etkin öneme sahiptir. Bu diller üzerine çalıÅmanız programlamaya farklı açılardan bakmanızı saÄlar.
DeÄiÅken isimlendirme
JavaScript dilinde deÄiÅken oluÅtururken iki sınırlama vardır.
- DeÄiÅken ismi sadece harfler, rakamlar,
$ve_karakterlerinden oluÅabilir. - İlk karakter rakam olamaz.
Geçerli birkaç örnek Åu Åekildedir:
let kullaniciAdi;
let test123;
EÄer isim birden fazla kelime kullanıyorsa deveHörgücü veya camelCase küçük harfle baÅlanıp her kelimenin baÅ harfi büyük olacak Åekilde devam etme yöntemine deveHörgücü yöntemi denir. Bu yöntem yaygın bir Åekilde kullanılır. ÃrneÄin : benimUzunDegiskenim gibi.
'$' iÅareti ve '_' iÅareti de isimlerde harf gibi kullanılabilir. Farklı bir anlamı yoktur.
AÅaÄıdaki isimlendirmeler geçerlidir:
let $ = 1; // "$" adında bir deÄiÅken üret ve deÄerini 1 yap.
let _ = 2; // "_" adında bir deÄiÅken üret ve deÄerini 2 yap.
alert($ + _); // 3
Geçersiz isimlendirmeler:
let 1a; // Rakam ile baÅlanılmaz.
let my-name; // isimlendirmede '-' karakteri kullanılamaz.
elma ve Elma iki farklı deÄiÅken tanımlar. Bu deÄiÅkenler birbirlerinden farklıdır.
Herhangi bir dili kullanmak mümkündür. Hatta aÅaÄıdaki gibi resim yazısı bile kullanabilirsiniz:
let Ð¸Ð¼Ñ = '...';
let æ = '...';
Teknik olarak bir hata olmamasına ve bu Åekilde kullanıma izin verilesine raÄmen genel olarak uluslararası gelenek olarak deÄiÅkenler İngilizce isimlendirilirler. En basit bir kod parçasının bile önünde uzun bir hayat olabilir. DiÄer ülkedeki insanların bu kodları okuması gerekebilir.
DeÄiÅken olarak kullanılamayacak dilin kendisine saklı tuttuÄu isimler mevcuttur.
ÃrneÄin : let, class, return, function gibi kelimeleri deÄiÅken ismi olarak adlandıramazsınız.
AÅaÄıdaki örnek yazım yanlıÅı (syntax error) verecektir:
let let = 5; // deÄiÅken ismi "let" verilemez, hata!
let return = 5; // deÄiÅken ismi return verilemez, hata!
use strict kullanmadan deÄer atamaNormalde deÄiÅkeni kullanmak için önce tanımlamanız gerekmektedir. Fakat eski zamanlarda tanımlamadan da , let kullanmadan da , deÄer atamak mümkündü. EÄer use strict kullanmıyorsanız hâlâ eskisi gibi kullanabilirsiniz. Bu davranıŠeski kodlarla uyumluluk açısından olduÄu gibi bırakılmıÅtır.
// not: bu örnekte "use strict" kullanılmamıÅtır
num = 5; // eÄer "num" deÄiÅkeni daha önce yaratılmadıysa yaratılır ve 5 deÄeri atanır.
alert(num); // 5
Bu kötü bir kullanımdır. EÄer sıkı moda geçerseniz hata alırsınız.
"use strict";
num = 5; // error: num tanımlanmadı.
Sabitler
Sabit(deÄiÅmeyen) tanımlamak için let yerine const kullanabilirsiniz.
const benimDogumGunum = '18.04.1982';
const ile tanımlanan deÄiÅkenler âconstantsâ (Sabit) olarak tanımlanır. Bunlar deÄiÅtirilemezler, deÄiÅtirilmek istendiÄinde hata alınır:
const benimDogumGunum = '18.04.1982';
benimDogumGunum = '01.01.2001'; // hata, sabit'in deÄeri deÄiÅtirilemez!
Programcı deÄiÅkenin deÄerinin deÄiÅmeyeceÄine eminse const bunu garantiler. Ayrıca bu kodu kullanan herkese bunun garantilendiÄini bildirmiÅ olur.
Sabitlerin Büyük Harf İle İsimlendirilmesi
Genel kullanımda sabitler büyük harf ile isimlendirilirler. EÄer birden fazla kelimeden oluÅuyorsa â_â ile bu kelimeleri ayırmak mümkündür.
ÃrneÄin:
const RENK_KIRMIZI = "#F00";
const RENK_YESIL = "#0F0";
const RENK_MAVI = "#00F";
const RENK_TURUNCU = "#FF7F00";
// ...Resim seçmek istediÄimizde
let renk = RENK_TURUNCU;
alert(renk); // #FF7F00
Yararları:
RENK_TURUNCU"#FF7F00"a göre hatırlanması daha kolaydır."#FF7F00"yazarken yanlıŠyazma olasılıÄıRENK_TURUNCUâya göre yüksektir.- Kodu okurken
RENK_TURUNCU#FF7F00âdan daha fazla anlam ifade eder.
Sabitler için ne zaman büyük harf kullanılmalı ne zaman kullanılmamalı ?
âSabitâ deÄeri hiç deÄiÅmeyen demek. Fakat bazı deÄiÅkenler örneÄin kırmızının hexadecimal karÅılıÄı çalıÅmadan önce bilinirken bazıları çalıÅma zamanında hesaplanır fakat sonrasında deÄiÅmez.
ÃrneÄin
const sayfaYuklenmeSuresi = /* Sayfanın yüklenme süresini tutar. */;
sayfaYuklenmeSuresi çalıÅmadan önce deÄeri bilinmeyen bir deÄerdir. Bundan dolayı normal isimlendirme kullanılır. ÃalıÅtıktan sonra sadece bir defa tanımlanıp daha da deÄiÅmeyen bir deÄer olduÄundan hâlâ âsabitâ denilebilir.
DiÄer bir deyiÅle büyük harfle yazılan deÄiÅken isimleri sadece önceden bilinen deÄerleri tanımlamak için kullanılır.
İsimlendirmeyi doÄru yapmak
İsimlendirmeden konuÅuyorsak düzgün isimlendirmeyi atlamamak gereklidir. Aslında en önemli konu da budur. EÄer deÄiÅken için isim bulamıyorsanız lütfen biraz daha düÅünüp mantıklı bir isim bulun.
Proje daha karmaÅıklaÅtıkça isimlendirmenin önemi daha da anlaÅılır. DeÄiÅken isimlerine göre kodun yeni kodlamaya baÅlayan birisi tarafından mı yoksa tecrübeli birisi tarafından mı yazıldıÄını anlaÅılabilir.
ÃoÄu projede zaman var olan kodların deÄiÅtirilmesi, bu kodlardan yeni fonksiyonlar yapılması üzerinedir. Yeni bir Åey yapılacaÄında çoÄunlukla eskisinin üzerine yapılır. Eski kodlara baktıÄınızda deÄiÅkenlere bakarak konuyu anlamak daha kolay olacaktır.
Lütfen deÄiÅkenleri isimlendirirken iyice düÅünün sonrasında çok iÅinize yarayacak.
Birkaç kural Åu Åekildedir:
-
İnsan-okuyabilir deÄiÅken ismi verin
kullaniciAdiveyaalisverisSepetigibi. -
a,b,cgibi kısaltmaları kullanmayın. Tabi ne yaptıÄınızı kesin olarak biliyorsanız kullanabilirsiniz. -
İsimlerin açıklayıcı olmasına önem verin. ÃrneÄin
verivedegeradindaki deÄiÅkenler bir Åey ifade etmezler. Tabi eÄer kod bloÄunda bunların bir anlamı var ise kullanılabilir. -
Bazı tanımları kafanızda takımınızın kullandıÄı Åekil ile uyumlu Åekilde oturtun. ÃrneÄin siteyi ziyaret eden kiÅi
kullaniciise kullanıcı ile olan deÄiÅkenlerianlikKullaniciveyayeniKullanicigibi kullanın fakatyeniZiyaretciveyayeniCocukgibi kullanmayın.
Basit deÄil mi? Gerçekten öyle, fakat pratikte bu kadar da basit deÄil. Umarım bunu siz gerçekleÅtirirsiniz.
Son olarak. Bazı miskin programcılar yeniden deÄiÅken yaratmaktansa eskisini kullanmayı yeÄlerler.
Sonuç olarak deÄiÅken bir kutu gibidir üstüne yapıÅtırdıÄınız etiketi deÄiÅtirmeden içerisine farklı Åeyler atılabilir. Fakat sonunda kutunun içinde ne olduÄunu anlamak için tekrar tekrar kontrol etmek gerekir.
Böyle programcılar tanımlarken biraz zaman kazanırlar fakat bunun 10 mislini kodu takip etmek için harcarlar.
Fazladan bir deÄiÅken düÅman deÄildir.
Modern JavaScript sıkıÅtırıcılar ve tarayıcılar kodları oldukça iyi optimize etmektedirler. Hatta farklı deÄerler için farklı deÄiÅken isimleri kullanmak JavaScript motorunun optimize etmesine yardımcı bile olabilir.
Ãzet
Verileri saklamak için deÄiÅken tanımlayabilirsiniz. Bu iÅlemi var veya let veya const ile yapabilirsiniz.
letâ modern deÄiÅken tanımlama. Chrome üzerindeletile deÄiÅken tanımlamak istiyorsanız sıkı modda (strict mode) çalıÅmanız gerekmekte.varâ eski tip deÄiÅken tanımlama. Yeni kodlarda çok nadir kullanılır, belki yakında hiç kullanılmayacak. Bu konu ilerideletilevararasındaki nüans farkı Eski tip "var" bölümünde incelenecek.constâ bu daletgibi fakat deÄeri deÄiÅtirilemez.
DeÄiÅkenler bulundukları yerdeki anlamlarına göre isimlendirilmelidirler.
Yorumlar
<code>kullanınız, birkaç satır eklemek için ise<pre>kullanın. EÄer 10 satırdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)