JavaScript Temelleri

Bölüm 2

Temel Bilgiler

2.4 - JavaScript Programlama Dilinde Atama İşlemleri

Bölüm 2 Sayfa 4

2.4.1 - Atama İşlemleri Ve Atama İşlemcisi

JavaScript programlama dilinde, atama işlemi, iki işlenenli atama işlemcisi kullanılarak yapılır. Atama işlemcisinin çalışma şekli,

sol işlenen = sağ işlenen;

olarak tanımlanır. Sağ işlenen, sonucu hesaplanabilen her türlü basit veya karmaşık ifade, fonksiyon veya nesne olabilir.

İşlemcilerin öncelik sıraları, 1.1.2.1 deki öncelik tablosunda açıklanmıştır. Bu tablodan görülebileceği gibi atama işlemcisinin işlem önceliği çok düşüktür. Bu nedenle, atama işleminde öncelik sırası sağ işlenendedir. Önce ikinci taraf (sağ taraf) ifadesinin değerlendirilmesi yapılır. Değerlendirme sonunda hem bir sonuç, hem de geçerli veri tipi saptanır. Bu ön hesap herhangibir nedenden dolayı gerçekleşemezse, (örnek olarak sağ işlenin değeri belli değilse) atama işlemi başarısız olur ve program hata verir (bir istisna fırlatılır) ve hata yakalanmazsa programın çalışması kesilerek bir hata mesajı görüntülenir.

JavaScript programlama dilinin programcıya çok özgürlük tanıyan yapısı ve başka program dilleri ile karşılaştırılaması bölüm 1.6.4 de yapılmıştır. Bu konunun yeniden okunması yaralı olacaktır.

JavaScript programlama dilinin esnek ve kullanıcı dostu programlama kuralları, atama işlemlerinde kendini gösterir. Programcılar, atama işleminde atamasın yapılacağı değişkeni ve tipini önceden belirtimek zorunluluğunda değillerdir. Atamada veri tipi belirtilmez. Veri tipini JavaScript yorumlayıcısı, atanacak literali inceleyerek kendine göre saptar ve atanacak değişken ile ilişkilendirir. Değişkenin değeri değişmedikçe, değişkenin değeri ve veri tipi, program sonuna kadar program belleğinde (stack memory) saklanır. En basit bir atama, içsel (implicit) atamadır. Örnek,

g = 16.9;
		

Yukarıdaki örnekte olduğu gibi, içsel atamalarda, JavaScript yorumlayıcısı g değişkenini yaratır ve atanacak literalin değer ve tipini saptayarak g değişkenine atar. İçsel değişkenler daima globaldir yani, programın he tarafından erişilebilirler. Global ve yerel kapsamlar biraz sonra açıklanacaktır. İçsel değişkenler delete işlemcisi ile silinebilirler bunu da biraz sonra göreceğiz.

Değişken isimlerinin oluşturulması için, Javascript programlama dilinde de, Java programlama dili geleneği devam ettirilir. Bu geleneğe göre değişken isimleri daima küçük harfle başlar. Birden çok sözcük içermesi istenen değişken isimleri için, deveHörgücü gibi bir düzenleme yapılır veya deve_Hörgücü şeklinde bir alt bağlaç kullanılır.

JavaScript programlama dilinde, bir değişkene bir atama yapıldığında, aynı değişkene farklı tipte bir veri atanabilir. Bu atamaya "Tahrip Edici Atama" adı verilir. Tahrip edici atama sonunda, değişkenin eski değeri kaybolur, yeni değer ve tipi eskisinin yerine geçer. Örnek,

x = 'Ahmet';ilk atama !
x = 23.45;Tahrip edici atama !
		

Yukarıdaki örnekte ik olarak x değişkenine bir karakter dizigisi tipinde literal atanmışken, ikinci atamada sayısal bir değer atanmış ve ilk atamanın değer ve tipi kaybolmuştur. Tahrip edici atamanın yararı, değişken sayısını arttırmaması ve bu şekilde program belleğinde fazla tüketimin önüne geçilmesidir.

JavaScript programlama dilinin özgürrlükçü yapısı küçük programlar için bri avantaj gibi görünmesine karşın genelde programlarda bir dağınıklık ve düzensiz kodlama stili sonucu doğurmaya yatkın olduğu gözlenmiştir. Bu mükemmel program dilinin hakkını vererek kullanılmasının sağlanması için, kullanıcıların uyması halinde daha okunabilir ve birbirine uyumlu yazılımlar elde edilebileceği kodlama standartları geliştirilmişir. Bu kodlama standartları atama işlemleri için,

bir konvansiyon olarak topluma sunulmuştur. Tüm deneyimli programcılar bu kurallara uymanın kendi yararlarına olacağını algılamışlardır. Büyük çoğunluk bu kurallara uymaktadır.

2.4.2 - Kısayol Atama İşlemleri

Atama işlemcisinin çok düşük önceliğe sahip olmasından dolayı, atama işlemlerinde sağ işlenendeki ifade çözümlendikten sonra, sonuç sol işlenene atanır. Fakat, bazı ifadelere çok sık rastlandığından, bu ifadelerin atama işlemlerinde çabuk kodlanabilmeleri için bir tür stenografik kodlar geliştirilmiştir. Bu kodlara, kısayol atama işlemleri adı verilmektedir.

Kısayol atama işlemleri, aşağıdaki gibi tanımlanır:

Kısayol Atama İşlemcileri

Kısayol Atama İşlemi

İşlem Tanımı

x+=y; x=x+y;
x-=y; x=x-y;
x*=y; x=x*y;
x/=y; x=x/y;

Bu tabloda görüldüğü gibi, kısayol atama işlemlerinde, işlemlerin yürüyüşü açık ve basittir, fakat bu işlemleri gerçekleştiren ifadeleri akılda tutmak kolay olmayabilir. Yine de profesyonel programların çoğunda kullanıldıklarından, hatırda tutmak yararlı olacaktır. (Kısayol atama işlemcilerinin hatırda tutulması için sağlık verilen bir yöntem, bu işlemcileri, x'e y'i ekle (sonucu x'e ata) , x'den y'i çıkar (sonucu x'e ata) , x'i y ile çarp (sonucu x'e ata) , x'i y ile böl (sonucu x'e ata) şeklinde okumaktır).

Kısayol atama işlemcilerinin bir uygulaması, JavaScript kodları aşağıda görülen bir uygulamada verilmiştir.

/* <![CDATA[  */
			
/* Bu Program bdelib.js Kitaplık Programını Kullanmaktadır */

function sonuç() {

var s ='1;
var e ='23;

e += s;
bilgiYaz(e, 'b2.4.2-uyg-1-sonuç');
}


sayfaYüklendiktenSonraÇalıştır(sonuç);

/* ]]> */
		

Sonuç :
e =

Kısayol atama işlemleri, kodlara profesyonel bir görünüm vermelerine karşın, programın okunabilirliğini de önemli ölçüde azaltmaktadır. Bu açıdan kullanılmaları tamamı ile programcının kişisel seçimine bağlı olmaktadır.

2.4.3 - var Bildirimi

JavaScript programlama dilinde, var bildiriminin kullanımın zorunlu olduğu yerler fonksiyon içeriğinde tanımlanan bir değişkenin yerel kapsamda olmasının sağlanması ve tanımlanan bir değişkenin delete işlemcisi ile silinebilirliğinin önlenmesidir.

Bu işlevlerin dışında kullanımı zorunlu olmamasına karşın, Ek-2 de verilmiş olan JavaScript kodlama konvansiyonu, yukarıda görülen kurallara göre, var bildirimini, JavaScript programlarında, Java programlarına yakın bir şekilde kullanımını öngörmektedir. Bu bildirimin kullanımı,

var değişken1 [ = değer [, değişken2 [ = değer ,...]
		

şeklindedir. Bir değişkenin tanıtılması sırasında başlangıç değerinin verilmesi isteğe bağlıdır. Fakat, önceden tanıtılıp değeri belirtilmememiş bir değişken ile değer gerektiren bir işlem yapılmak istenirse, program hata vererek durdurulur. Bu yüzden, değişkenlerin ilk bildirimi sırasında başlangıç değerlerinin verilmesi uygun olacaktır. İlk atama sırasında başlangıç değeri verilmek istenmezse, aşağıdaki gibi null değeri verilebilir.

var bilgi = null;
		

Burada null değeri, bir tür yer tutucu işlevini yapar. Değişkenin değeri ilk fırsatta gerçek bir değerle değiştirilmelidir.

İyi programlama yöntemleri, tüm değişkenlerin programın başında var bildirimi ile bildirilmelerini öngörmektedir.

var Bildirimi ile tanıtılmış değişkenler, delete işlemcisi ile program belleğinden kaldırılamazlar.

Fonksiyon içinde var bildirimi ile tanıtılmış olan değişkenlerin, kapsam alanı, yerel kapsamla sınırlandırılırlar, aynı zamanda delete işlemcisi ile program belleğinden kaldırılamazlar. JavaScript kodlama konvansiyonu, değişkenlerin fonksiyon içinde var bildirimi ile yerel kapsamda kalacak şekilde tanıtılmasını öngörmektedir.

Aynı başlangıç değerini paylaşan birden çok değişkenin tanıtımında,

...
var a = b = c = d = 0;
...
		

şeklinde bir tanıtım olanağı bulunmasına karşın, Douglas Crokford´un yazmış olduğu bir JavaScript kod yazılım doğrulayıcısı olan JSLint bu ifade yerine,

...
var a = 0, b = 0, c = 0, d = 0;
...
		

şeklinin kullanılmasını sağlık vermektedir.

2.4.4 - Global Değişkenler

JavaScript program kodlarının bir Web sayfası içinde çalıştırılmasının sağlanmasının incelendiği Bölüm 1.3.1 de görülmüş olduğu gibi, bir XHTML Web sayfasında tüm <script> elementlerinin içeriği olan tüm alanlar, aşağıda görüldüğü gibi, tek bir alan olarak kabul edilirler ve bu alana Global Kod Çalıştırma Alanı veya Üst Düzey Programlama Alanı adı verilir.

<script type"text/javascript">
program adımları (Global Kod Çalıştırma Alanı), (Üst Düzey Programlama Alanı)
</script>
		

Global Kod Çalıştırma Alanı veya Üst Düzey Programlama Alanı adı verilen alanda çalışabilecek tüm program kodları çalışır. Bir Web sayfasına bir JavaScript kod sayfası bağlı ise, nekadar kod sayfası bağlanmış olursa olsun, tümünün içeriği tek ve tümü Global Kod Çalıştırma Alanı veya Üst Düzey Programlama Alanı olarak kabul edilir. Bunu kısaca sadece Global Alan olarak adlandırabiliriz.

Global alanda ister implicit olarak ister var bildirimi ile tanımlansın, tüm tanımlanan değişkenler, global değişken niteliğindedir. Global değişkenler, tüm programlama alanında fonksiyon alanları dahil olarak tanımlı olurlar.

Global değişkenlerin kullanımından kaçınılması konusunda kesin uyarılar bulunmaktadır. Bunun ilk ve en önemli nedeni, global değişkenlerin fonksiyon içeriklerinde de tanımlı olması ve fonksiyonlara dışarıdan bilgi giriş/çıkışına olanak sağlamasıdır. Oysa ki, yapısal program akışı prensiplerine göre, fonksiyonlara tek bilgi girişi, argümanları aracılığı ile, tek bilgi çıkışı ise, return bildirimi ile olmalıdır. Global değişkenlerin etkisi, fonksiyonun, fonksiyon dışı ortamdan sterilitesini yoketmekte, yapısal programlama prensiplerini ortadan kaldırmaktadır.

Global değişkenlerin bir başka sakıncalı tarafı da özellikle uzun programlarda, değerinin kontrolünün güçleşmesi ve kaza ile değerinin değişmesi olasılığının bulunması ve bunun program sonuçlarının yanlış olarak hesaplanmasına neden olacağıdır.

Bir fonksiyon içinden, global bir değişken çağrıldığında, JavaScript yorumlayıcısı bu global değişkeni bulana kadar, yukarıya doğru tüm kapsam zincirlerinde arama yapar. Bir fonksiyon içinde tanımlı bir fonksioyonun içeriğinden bir global değişkene erişilmek istendiğinde, fonksiyon önce kendi kapsam zincirinde, sonra üst fonksiyon kapsam zincirinde, sonra global kapsam zincirinde arama yapacaktır. Buna değişken adı çözümlenmesi adı verilir. Bu işlem, özellikle döngüler içinde gerçekleştiğinde, program hızını, dolayısı ile program performasını azaltıcı yönde etki yapacaktır.

Bir fonksiyon içinden erişilmek istenen bir global değişken, fonksiyonun çalışması bitince de kapsam zincirinin kapanmasına engel olabilecektir. JavaScript çöp toplayıcısı, bunu bir potansiyel çağrı olarak kabul ederse fonksiyon sürekli açık kalacak ve program belleğini sürekli işgal edecektir.

Global değişkenler, tanımlandıktan sonra, program sonuna kadar kullanıma hazır olarak bekletilirler. Bu değişkenlerin işgal ettiği stack bellek, program sonuna kadar boşaltılamaz, bu da önemli bir performans azalması yaratır ve program belleğinin gereksiz yere işgal edilmesine neden olur.

Javascript programlama dilinde birçok açık olmayan global değer (implied global) bulunabilmektedir. Örnek olarak öntanımlı nesnelerin özelliklerine eklentiler yapılması bu tip bir gizli global yaratılması sayılabilir. Bu tür gizli global değerler de fonksiyonların taşınabilirliğini kesinlikle ortadan kaldırır. Fonksiyon, taşınacağı yeni ortamda, bu gizli global değeri bulamayınca kesinlikle çalışmaz. Üstelik bu gibi sorunların anlaşılması da son derece güç olur. Bu durumda, Programlarda her türlü açık ve açık olmayan global değer kullanımından kaçınılması son derece önemlidir. Fonksiyon tanımları kesinlikle yapısal programlama prensiplerine uygun olarak tasarlanmalı, girişler daima argümanlar kanalı ile, çıkışlar ise daima return bildirimi ile gerçekleştirilmeli, bunun dışında, fonksiyon kapsam alanı dışından bir bilgi beklememeli ve bir bilgi vermemelidir. Bir fonksiyon, başka bir fonksiyonu çağırdığında, döndürülecek değer varsa bu sadce yerel değişkenlere atanmalıdır. Bir fonksiyon ancak bu koşullara uyularak tasarlanmışsa modüler olabilir ve bulunduğu ortamdan başka bir ortama taşındığında işlevini beklendiği gibi sorunsuz yerine getirebilir. Özetle, fonksiyonların modülarite ve taşınabilirliğinin sağlanabilmesi için, steriliteleri tam olarak gerçekleşmeli, ve programda ne açık ne de gizli, hiçbir global değer kullanılmamalıdır.

Üst düzey progrogramlama alanında sadece fonksiyon tanımları ve kullanılacaksa, nesne kitaplıkları tanımlanabilir. Bunun dışında hiç bir şey bulunmamalıdır.

Bazı durumlarda, ilk bakışta problemin global değişken olmadan çözümlenemeyecek gibi görünür. İyi incelendiğinde mutlaka bir başka yolun bulunduğu ve global değişkene gerek duyulmadan da problemin çözümlenebileceği görülecektir. Burada anahtar sözcük, iyi incelemedir.

Global değişkenlerin kullanımına ait bir JavaScript programının, bağlantılı olduğu uygulama sayfasında, verdiği sonuç, aşağıda görülmektedir:

/* <![CDATA[  */
			
/* Bu Program bdelib.js Kitaplık Programını Kullanmaktadır */

var q = 'global değişken';

function yazdır(yer) {
bilgiYaz(q, yer);
}


function başlat() {
yazdır('b2.4.4-uyg-1-sonuç-1');
}

sayfaYüklendiktenSonraÇalıştır(başlat);

/* ]]> */
		

global değişkenin değeri :

2.4.5 - Yerel Değişkenler

Gobal çalışma alanı içinde, fonksiyon içeriklerinde var bildirimi ile bildirilmiş olan değişkenler, sadece fonksiyon alanı içinde tanımlı olurlar ve global alanda undefined değerini alırlar. Bu tür değişkenelere yerel değişken adı verilir. JavaScript kodlama konvansiyonu, tüm değişkenlerin yerel değişken olarak tanımlanmasını öngörmektedir. Fonksiyon içeriklerinde var bildirimi ile tanıtılmamış olan değişkenler, global değişken niteliğindedir ve bundan kesinlikle kaçınılması gerekir.

Aşağıda görülen JavaScript programı, global ve yerel değişkenlerin konumlarını şematik olarak açıklamaktadır . Bu programın ilişkilendirilmiş olduğu sayfada verdiği sonuçları görmek için, Mesaj Göster ! düğmesini tıklayınız.

...
Fark = 0.1;// İçsel (implicit) atama, global değişken, kesinlikle	kullanmayın !!!
var katsayı = 5;// Global değişken, kullanmamaya çalışın.

function topla(birinciDeğer, ikinciDeğer) {
k = 2;// İçsel (implicit) atama, global değişken, kesinlikle	kullanmayın !!!
var toplam = birinciDeğer + ikinciDeğer;// Yerel değişken, sadece bu tip değişkenler kullanın.
return toplam;
}

function mesajGöster() {
alert('Toplam = ' + topla(22.5, 5345.78));
return false;
}

function panel() {
var düğme = null, düğmeAdı = 'hesapla';// Yerel değişkenler, sadece bu tip değişkenler kullanın.
düğme.onclick = mesajGöster;
}

sayfaYüklendiktenSonraÇalıştır(panel);
 ...
		

Yerel bir değişkenin global bir değişkenle aynı isimde olması halinde bir isim çakışması yaşanır. İsim çakışmalarında, global ve yerel değişkenler birbirlerinden bağımsızdır. Global alanda global değişkenin değeri, yerel alanda, yerel değişkenin değeri geçerlidir. Bu konuda bir JavaScript programı ve bağlantılı olduğu uygulama sayfasında verdiği sonuç, aşağıda görülmektedir:

...

var q = 'global değişken';
sonuçYaz('değerYazdır() fonksiyonu dışında q değişkeninin değeri = ', q, 'b2.4.5-uyg-2-sonuç-1');

function değerYazdır(yer) {
var q = 'yerel değişken';
sonuçYaz('değerYazdır() fonksiyonu içinde q değişkeninin değeri = ', q, yer);
}

değerYazdır('b2.4.5-uyg-2-sonuç-1'); 
...
		

Program Sonucu :

Yerel bir değişken global tanım alanında kesinlikle tanımsızdır (undefined). Bu konuda bir JavaScript programı ve bağlantılı olduğu uygulama sayfasında verdiği sonuç, aşağıda görülmektedir:

...

function prim(varlık) {
var çarpan = 2;
sonuçYaz('prim() fonksiyonu içinde çarpan değişkeninin değeri = ', çarpan,'b2.4.5-uyg-3-sonuç-1');
}

try {
prim(1600); 
sonuçYaz('prim() fonksiyonu dışında çarpan değişkeninin değeri = ', çarpan, 'b2.4.5-uyg-3-sonuç-2');
}

catch(e) { 
sonuçYaz('çarpan değişkeninin prim() fonksiyonu dışında  değeri tanımsızdır ve çağrılırsa program bir hata mesajı ile kesilir ! Hata sınıfı ve nedeni  : ', e.toString(), 'b2.4.5-uyg-3-sonuç-2');
}
...
		

Program Sonucu :

Yukarıdaki programda, programın hata oluşması nedeni ile kesilmesini önlemek amacı ile, hata verebilecek program adımları bir try {} bloğuna yerleştirilmiş ve bir catch() {} bloğu içinde yakalanmıştır. Hata yakalama yöntemleri, ileride bölüm 13 de incelenecektir.

Bu uygulamada sonuçların görüntülenmesi için yararlanılan sonuçYaz() fonksiyonu, bdelib.js program kitaplığındaki bir yazdırma fonksiyonudur. Bu fonksiyonun kullanımı aşağıdaki gibidir:

sonuçjYaz('mesaj', sonuç, 'sonucunİçeriğineEklenecekSayfaElementininIdDeğeri');
		

Burada kullanılan sonuçYaz() fonksiyonunun yazılımı, W3C-DOM (W3C Belge Nesne Modeli) nin incelenmesi sırasında, bölüm b20.3.2 de açıklanmıştır.

2.4.6 - typeof İşlemcisi

typeof İşlemcisi, bir ifadenin veri tipini belirler. Sözdizimi,

typeof [ ( ]geçerli bir JavaScript ifadesi[ ) ] ;

Geçerli bir JavaScript ifade, tip bilgisinin arandığı tek bir tanımlı değişken dahil her türlü geçerli JavaScript ifadesi olabilir.

typeof ifadesi, işleneninin değerlendirilmemiş veri tipini döndürür. Geri döndürülen tipler :

Sözdiziminde belirtildiği gibi, typeof işlemcisinin uygulanmasında, gruplama işlemcisinin (parantez) kullanımının isteğe bağlı olduğu görülüyor. Bu işlemci istendiğinde parantezle, istendiğinde parantezsiz olarak kullanılabilir. Fakat parantezlerin kullanılması sağlık verilmektedir.

typeof işlemcisi, JavaScript programlarında büyük önemi olan bir işlemcidir. Bu işlemci özellikle JavaScript programlarında sürekli değişen büyüklüklerin tiplerinin izlenmesinde yararlı olur. Doğru tipe uyarlanmazlarsa, ifadelerin hesaplarında beklenmeyen sonuçlar görülebilir. Programcının geçerli veri tipleri üzerinde kontrolunun kaybolabileceği durumlarda, typeof işlemcisi çok değerli bir yardımcı olarak görev yapar.

typeof İşlemcisinin uygulamalarda daha kolay kullanılması için, aşağıdaki fonksiyon oluşturulmuş ve bdelib fonksiyon kitaplığına eklenmiştir. Aşağıda görülen bu fonksiyonu şimdilik sadece kullanmakla yetineceğiz. Bu fonksiyonun açıklanması çok ileride, b20.3.4 konusunda yapılmıştır.

Bu foksiyonun amacı veri le birlikte veri tipinin de belirtilmesidir. Yazılımı aşağıda görülmektedir :

function veriYaz(veri , yazımYeri1 , yazımYeri2) {
var bağlantıNoktası = document.getElementById(yazımYeri1);

bağlantıNoktası.appendChild(document.createTextNode('Sonuç : ' + veri);
bağlantıNoktası = document.getElementById(yazımYeri2);
bağlantıNoktası.appendChild(document.createTextNode('Veri Tipi : ' + typeof veri));
}

Program içinde veri tipi değişebilen bir değişkenin son veri tipi, JavaScript kodları, aşağıda görülen bir uygulamada sorgulanmaktadır.

/* <![CDATA[  */
			
/* Bu Program bdelib.js Kitaplık Programını Kullanmaktadır */

function sonuç() {

var s ='123' * 3;
veriYaz(s, 'b2.4.6-uyg-1-sonuç', 'b2.4.6-uyg-1-sonuçTipi');
}


sayfaYüklendiktenSonraÇalıştır(sonuç);

/* ]]> */
		

Sonuç ve Sonucun Veri Tipi :

Bu sonuç fazla şaşırtıcı olabilir. Uygulamada ilk başta s veri tipi, string (karakter dizgisi) tipindedir. Fakat dikkat edilirse bu veri, sayısala çevrilebilen nitelikte bir karakter dizgisidir. JavaScript yorumlayıcısı, bu veri ile bir çarpım işlemi gerçekleştirmesi istenince önce her iki işlenenin sayısal olup olmadığını sınamaktadır. Burada sol işlenen 3 sayısal tipte bir veridir. Sağ işlenen ise karakter dizgisi tipinde olduğu için işlem gerçekleşemez. Bunun üzerine JavaScript yorumlayıcısı sol işlenenin sayısala çevrilip çevrilemeyeceğini sınar. Bu durumda, sol işlenen sayısala çevrilebilen bir karakter dizigisi olduğundan sayısal tipe çevrilir ve artık her iki işlenen sayısal tipte olduğundan çarpma işlemi gerçekleştirilebilr. Son olarak çarpma işlemi gerçekleştirilir ve sonuç ile sonucun veri tipi program belleğine alınır. Bu şekilde sonucun değeri sayısal çarpma işlemi sonucu, sonucun veri tipi de sayısal olarak verilmektedir.

JavaScript yorumlayıcısının bu şekilde, yapması gereken işlemler için önerilen verilerin tiplerini uyarlamasına (coercion) adı verilir. Uyarlama JavaScript yorumlayıcısının en güçlü yeteneklerinden biridir, fakat uyarlamalarda çok dikkatli olmak gerekir. JavaScript yorumlayıcısı, uyarlama sonunda hiç düşünülmeyen bir tip dengelemesi yapabilir ve beklenmeyen bir sonuç oluşabilir. Programcılarının olanaklar çerçevesinde, veri tipi dönüştürmelerini açık (explicit) olarak yapmaları sonra işlemlerde veri tipleri uyumlu verileri kullanmaları sağlık verilir. Böylelikle, daha güvenli sonuçlar alınabilir.

2.4.7 - delete İşlemcisi

delete İşlemcisi Bir nesne özelliğini, bir dizi elemanını, bir silinebilir değişkeni program belleğinden silmek için kullanılır. delete İşlemcisinin kullanımı,

delete [(]ifade])]
		

şeklindedir. İfadenin sonucu silinebilir bir öğeye indirgenebilir olmalıdır. Başarılı bir silme işleminin sonucu true aksi halde false olur.

Henüz nesne ve dizileri incelememiş olduğumuzdan, sadece var bildirimi ile tanıtılmamış silinebilir değişkenlerin silinmesi üzerine, JavaScript kodları aşağıda görülen bir uygulama yapılmıştır.

/* <![CDATA[  */
			
/* Bu Program bdelib.js Kitaplık Programını Kullanmaktadır */

function veriSil() {

fark = 13;

bilgiYaz(delete(fark), 'b2.4.7-uyg-1-silgi');
}


sayfaYüklendiktenSonraÇalıştır(veriSil);

/* ]]> */
		

Sonuç :

Sonucun true olması, işlemin başarı ile sonuçlandığını, yani fark olarak adlandırılmış silinebilir değişkenin program belleğinden (stack) kaldırılmış olduğunu belirtmektedir.

Kullanımı tamamlanmış program öğelerin program belleğinden silinmesi, özellikle c++ gibi, otomatik çöp toplayıcı olmayan programlar için önemlidir. Bu işlem özellikle, sistemde donanım olarak fiziksel belleğin kısıtlı olduğu ve işletim sistemlerin küçük sayıda belleği adresleyebildiği eski günler için büyük önem taşımaktaydı. Günümüzde, hem fiziksel bellekler daha yüksek kapasiteli olarak üretilebilmekte, hem de işletim sistemleri, büyük sayıda bellek adresleyebilmekte, dolayısı ile, istemde program belleğine ayrılabilen bellek alanında eskiyle kıyaslanmayacak kadar artış sağlanabilmektedir. Bundan başka, Java programlama dili ile başlayıp, Javascript programlama dili ile devam eden bir olanak olan otomatik çöp toplayıcısı, programlama dillerine eklenmiş ve bu nedenle, programcıların, program belleğini boşaltmaya çalışmaları gereksiz hale gelmiştir. Otomatik çöp toplayıcısı, kullanmı tamamlanmış programlama öğelerini, otomatik olarak devreden çıkararak program belleğini rahatlatmaktadır. Bu durumda, Javascript programlama dilinde, çok büyük dizilerin çalışıldığı özel programlar dışında, programcıların kullandıkları geniş program öğelerinin, programlarını yavaşlatacağı veya eldeki kullanılabilir program belleğininin kapasitesinin aşılıp, program belleğinin taşmasını (stack overflow) ve bu yüzden programın çalışma süresi hatası (runtime error) vereceği kaygına kapılmaları için bir neden kalmamıştır. JavaScript yorumlayıcısı, çöp toplama yeteneği ile bu gibi arkaik sorunların yaşanmasına olanak tanımayacaktır. Bu durumda, genel olarak, programcıların delete işlemcisini kullanmalarına gerek olmayacaktır.

Valid XHTML 1.1