JavaScript Temelleri

Bölüm 8

Array (Dizi) Nesne Sınıfı

Bölüm 8 Sayfa 1

8.1 - Array (Dizi) Nesne Sınıfı Örnekleri Yapılandırıcısı

Öntanımlı dizi nesne sınıfı örnekleri yapılandırıcısının kullanımı

diziSınıfıNesneÖrneği=new Array([birim1[, birim2[, ...]]]);
		

şeklindedir. Eğer dizi sınıfı nesne örnekleri yapılandırıcısı sıfır argümanla uygulanırsa, örnek olarak,

ağaçlar = new Array();
		

şeklinde bir uygulama, ağaçlar adında boş bir dizi sınıfı nesne örneği yaratır. Buna kısaca dizi denilir. Bölüm 2.10.3.1 de açıklandığı gibi, boş bir dizi sınıfı nesne örneği yani bir dizi, aynı zamanda bir dizi başlatıcısı ile de yaratılabilir: Örnek:

ağaçlar = [];
		

Burada, ağaçlar dizisi başlangıçta boş olduğu için, length özelliği de başlangıçta 0 dır. Boş bir diziye istendiğinde yeni elemanlar eklenebilir. Örnek,

ağaçlar[0] = 'akçaağaç'; 
		

JavaScript programlama dilinde, dizi indisleri 0 dan başlar. Diziler en büyük indis 232-1 den küçük olmak üzere, istendiği kadar eleman alabilir.

JavaScript programlama dilinde, diziler gerçek diziler değildir. Bir tür bağlantılı liste (linked list) yapılanmasıdır. Dizi elemanları birbirini izleyen (contigious) olmak zorunda değildir. Örnek olarak,

ağaçlar[20] = 'Çam'; 
ağaçlar[40] = 'Ladin'; 
		

şeklinde atamalar yapılabilir. JavaScript yorumlayıcısı aradaki elemanlara undefined değerini verecektir.

JavaScript dizileri dağıtık (sparse) karakterde dizilerdir. Bir dizi istenildiği sayıda eleman alacak kadar açılabilir, fakat sadece veri içeren gerçek elemanlara bellekte yer ayrılır. Bu şeklide, JavaScript yorumlayıcısı dizi çalışmalarında bellek kullanımını en aza indirir. Yukarıdaki örnekte en yüksek eleman indisi 40 olmasına rağmen gerçekte sadece iki eleman tanımlıdır.

Eleman indisleri sadece tamsayılar olarak belirtilmelidir. Aksi halde hata oluşur.

JavaScript dizilerinde elemanların aynı tipte olmaları zorunluğu yoktur. Fakat, dizilerde elemanların aynı tipten olmayışı, dizi elemanlarının birbirini izlememesi bir düzensizliğin işaretidir. Dizi işemleri düzen gerektirir. Düzensiz dizilerin otomasyon sistemleri ile işlenmesi olanağı azalır.

JavaScript dizileri sadece tek boyutlu (skaler) diziler olarak açılabilir. Çok boyutlu (vektörel) diziler dolaylı olarak oluşturulabilir. Günümüzde, nesne teknolojisi, iki boyuttan (matris) daha fazla boyutlu dizilerin kullanımına gerek bırakmamamıştır. Çok boyutlu diziler ileride incelenecektir.

Dizilere en kolay olarak elemanlarının indislerinden yararlanılarak dizi[0] vb. şeklinde erişilir. Diziler aynı zamanda bir özel nesne sınıfı örnekleri olduklarından, nesne örnekleri gibi, köşeli parantez notasyonu ile dizi['0'] şeklinde de erişilebilir. Fakat bu biraz sıradışı bir erişim yöntemidir. Dizi elemanlarına dizi.0 gibi nokta noktasyonu ile erişilemez. Bu konuda, daha önce, Bölüm 2.10.3.3 de bilgi verilmiştir.

Öntanımlı dizi nesne sınıfı örnekleri yapılandırıcısının tek argümanla kullanımında iki olasılık vardır. Eğer argüman bir tamsayı ise, JavaScript yorumlayıcısı bunu dizinin olası eleman sayısı olarak algılar. Bu iyi bir pratiktir ve JavaScript yorumlayıcısına dizi için bir hazırlık yapılması olanağını sağlar. Eğer argüman aşağıdaki gibi bir tamsayı değilse,

malzeme = new Array('vida m4'); veya eşdeğer olarakmalzeme = ['vida m4'];
		

JavaScript yorumlayıcısı bunu malzeme dizisinin ilk elemanı yani malzeme[0] olarak kabul eder ve yeni dizi nesnesi örneğinin length özelliği, dizi tek eleman içerdiğinden 1 olur.

Öntanımlı dizi nesne sınıfı örnekleri yapılandırıcısı birden çok argümanla kullanılması, argümanların sıra ile dizi elemanı olarak atanmaları ile sonuçlanır. Örnek olarak,

çiçekler = new Array('Papatya', 'Glayöl', 'Karanfil');
		

şeklinde bir tanıtıma, yoğun diziler adı verilir. Yoğun diziler bir dizi başlatıcısı ile de yaratılabilir. Örnek:

çiçekler = ['Papatya', 'Glayöl', 'Karanfil'];
		

Yoğun diziler olarak tanıtım, sadece küçük diziler için veya büyük bir dizinin ilk elemanlarının atanması için uygun olabilir.

Dizi nesne örneklerinin görüntülenmesi bir problem olarak ortaya çıkar. Dizi elemanlarının görüntülenmesi için tablolar yapılması veya dizi elemanlarının bir ayraç karakteri ile ayrılıp sıra ile görüntülenmesi yapılmalıdır. JavaScript yorumlayıcısı öntanımlı olarak diziyi elemanlarının arasına öntanımlı olarak bir virgül koyar ve tüm elemanları sıra ile görüntüler. Bunu kısa olarak dizinin öntanımlı görüntülenmesi olarak tanımlayabiliriz. Dizinin öntanımlı görüntülenmesi, dizi üzerinde bir değişikliğe neden olmaz. Diziler sadece görüntülenir ve orijinal veriler değişmeden kalır. Dizilerin öntanımlı görüntülenmesi, detaylı program çıktıları için yeterli sayılmaz. Bu görüntüler daha çok program geliştirmelerinde ara kademe sonuçlarının görüntülenmesi için yararlı olur. Dizilerin öntanımlı görüntülenmesi için örnek bir JavaScript programı ve ilişikli olduğu sayfada verdiği sonuç aşağıda görülmektedir:

...
var örnekDizi = new Array(21, 45, 76, 88, 105); 
sonuçVeTipYaz('örnekDizi = ', örnekDizi, 'b8.1-uyg-1-sonuç-1'); 
			...
		

Bu programın Sonucu :

Program sonucundan, dizilerin öntanımlı görüntülenmesinin fazla kullanışlı olmadığı, fakat dizi elemanlarını yeterli bir şekilde görüntülenebildiği ve görüntülenme ile dizinin tip ve değer değiştirmediği görülmektedir.

Öntanımlı dizi nesne sınıfı örnekleri yapılandırıcısı Array() fonksiyonunun, tüm fonksiyonlar gibi prototype özelliği vardır. Bu özelliğin değeri, öntanımlı dizi sınıfı prototip nesnesidir.

8.2 - Array (Dizi) Nesne Sınıfı Prototip Nesnesinin Özellikleri

Öntanımlı dizi sınıfı prototip nesnesinin içsel [[Prototype]] özelliği, Object sınıfı prototip nesnesidir. Bu dizi (Array) sınıfını Object sınıfının bir alt sınıfı yapmaktadır.

Öntanımlı dizi sınıfı prototip nesnesinin içsel [[Class]] özelliği, "Array" olarak belirtilmiştir. Bu durumda bu yeni bir sınıftır ve prototipinde Object sınıfı prototipine göre değişiklik yapılmıştır. Bu yeni prototipin özellikleri, spesifikasyon incelenerek anlaşılabilecektir.

Öntanımlı dizi sınıfı prototip nesnesinin kendisi de bir dizi sınıfı nesne örneği, yanı bir dizidir. Bu dizi, öntanımlı dizi sınıfına ait tüm özellikleri ve metotları içerir. Bu metotların tanımındaki this değerleri metodu çağıran dizi nesnesi sınıf örneğini belirtir. Bu metotları dizi sınıfından olmayan nesne örneklerinin de çağırabileceği belirtilmişse de bu tip çağrılar çok sıradışı olacaktır.

Dizi sınıfı, generik nesne sınıfının (Object sınıfı) bir alt sınıfı olması nedeni ile, generik nesne sınıfının tüm özellikleri (buna metotlar da dahildir) dizi sınıfına kalıtımla aktarılırlar. Bu özellik ve metotlar fazla yararlı değillerdir. Bunlar arasında valueOf() metodu üzerine biraz daha önemle durulmalıdır. Dizi sınıfı için bu metodun fazla bir yararı yoktur. Dizi sınıfı nesne örnekleri, karmaşık yapıda nesnelerdir ve doğrudan bir değere eşitlenemezler. Bu nedenle, dizi sınıfı nesne örnekleri için, valueOf() metodunun uygulanması, geriye aynı diziyi döndürecektir.

Dizi (Array) nesnesi gibi, öntanımlı sınıf nesnelerinin prototip nesnelerinin özellikleri, sayılamaz, silinemez, salt okunur {DontEnum, DontDelete, ReadOnly} niteliktedir. Bu niteliklerden dolayı bunlar, listelenemez, silinemez, değiştirilemez, fakat değerleri okunabilir. Öntanımlı sınıf veya sınıf örneği nesnelerinin öntanımlı özellikleri sayılamaz nitelikte olduğundan, öntanımlı sınıfların örnek nesnelerinin öntanımlı özellik değerleri , for..in döngüleri ile görüntülenemezler.

Kullanıcılar öntanımlı dizi prototip nesnesine yeni özellikler ekleyebilirler ve bu özellikler tüm eskiden üretilmiş ve yeni üretilecek dizilerde geçerli olur. Bu işlem, nesne prototipine yeni özelliğin,

SınıfNesnesi.prototype.yeniÖzellik = değer;
		

şeklinde tanıtılması ile gerçekleştirilir. Sınıf nesnesi değişkenin büyük harfle başladığını not ediniz. Konvansiyon olarak her sınıf nesnesi tanımlayıcısı (identifier) büyük harfle başlar.

Özellik eklemeleri tek bir sınıf nesnesi örneği düzeyinde aşağıda görüldüğü şekilde gerçekleştirililebilir:

nesneSınıfÖrneği. yeniÖzellik = değer;
		

Bu durumda, yeniÖzellik sadece eklemenin yapıldığı tek nesne örneği için geçerli olur.

JavaScript kodları aşağıda görülmekte olan uygulamada, dizi sınıfı prototipine ek bir özellik eklenmiş ve bu eklenen yeni özellik bir sınıf örneği prototipi eklentisi olduğu için, yeni oluşturulan bir dizi nesne sınıfı örneğinin özelliklerine eklenmiştir. Aynı uygulamada, bir nesne sınıf örneğine yapılan yeni özellik eklentisi ise, salt eklentinin yapıldığı nesne örneği için geçerli olacaktır.

Array.prototype.sorumlu = 'Bedri Doğan Emir';

function harcama() {
var gider = [], giderDöviz = []; 

gider[0] = 25;
gider[1] = 35;
gider[2] = 15;
for(anahtar in gider) {
bilgiYaz('gider[' + anahtar + '] =' + gider[anahtar] + '   ', 'b8.2-uyg-1-sonuç-1');
}
bilgiYaz(gider[0] = ' + gider[0], 'b8.2-uyg-1-sonuç-2');
bilgiYaz("gider['0'] = " + gider['0'], 'b8.2-uyg-1-sonuç-3');
bilgiYaz("gider['sorumlu'] =" + gider['sorumlu'], 'b8.2-uyg-1-sonuç-4');
bilgiYaz("gider.sorumlu = " + gider.sorumlu, 'b8.2-uyg-1-sonuç-5');
bilgiYaz("gider.length = " + gider.length, 'b8.2-uyg-1-sonuç-6');

giderDöviz[0] = 16;
giderDöviz[1] = 58;
giderDöviz.sorumlu = 'Bedri Doğan Emir (US$)';

diziTabloTekBoyut('b8.2-uyg-1-sonuç-7', 'giderDöviz Dizisi Elemanları', 'giderDöviz', giderDöviz);
bilgiYaz("Döviz Giderleri Sorumlusu = " + giderDöviz.sorumlu, 'b8.2-uyg-1-sonuç-8');

}

Program Sonucu :

Yukarıdaki uygulama, çok önemli ve her zaman dikkate alınması gerekli olan sonuçlar vermektedir. İlk olarak, JavaScript programlama dilinde her dizi, bir dizi nesnesi sınıfı örneği nesnesidir. Dizideki her eleman, dizi nesnesi sınıf örneğinin bir özelliği olarak algılanmaktadır. Bu yüzden, bir nesnenin tüm sayılabilir özelliklerini tarayan for..in döngüleri, dizinin elemanlarını dizi nesnesi örneğinin birer özelliği olarak algılamakta ve listelemektedir.

Yukarıdaki uygulamada, Array.prototype .sorumlu = 'Bedri Doğan Emir' bildirimi, dizi sınıfına yeni bir özellik eklemiştir. Bu yeni özellik, bir dizi sınıfı özelliği olduğundan, her sınıf özelliği gibi, yeni oluşturulacak sınıf örnekleri bu özelliğe sahip olarak oluşacaklardır. Ayrıca, nesne sınıfına bu yeni özellik eklenmeden önce oluşturulmuş olan tüm eski sınıf örneklerine bu yeni özellik katılmış olacaktır. Eskiden oluşturulmuş sınıf örneklerinde bu yeni eklenmiş olan özellik değeri atanmamış olduğundan, eskiden oluşturulmuş tüm nesne sınıfı örneklerinde bu yeni özelliğin değeri undefined olacaktır. Bu nedenle, sınıf özelliklerine bir katkı yapıldığında, bu sınıfla ait tüm eskiden oluşturulmuş ve yeni oluşturulacak örneklere, bu yeni özelliğin değerinin atamasının yapılması düşünülmelidir.

Yukarıdaki uygulamada olduğu gibi, dizi indislerinin sayısal olduğu gerçek dizi sınıfı nesne örneklerinde, sınıf örneği elemanlarına, en alışılmış şekliyle, gider[0] şeklinde, ve çok sıradışı olarak, gider['0'] şeklinde erişilebildiği görülmektedir. Bu eleman (özellik) lere, asla gider.0 şeklinde nokta notasyonu ile erişilemez. Daha sonra inceleyeceğimiz, kullanıcı tanımlı nesne örnekleri olan sözel indisli nesnelere ise, ileride görüleceği gibi, CD4['Orkestra'] veya CD4.Orkestra şeklinde erişilebilir. Fakat asla CD4[0] şeklinde sayısal indis kullanımı ile erişilemez.

Yukarıdaki uygulamada, bir sınıf nesnesine, kullanıcı tanımlı özellik olan sorumlu değerine, sadece, gider ['sorumlu'] veya nokta notasyonu kullanımı ile gider.sorumlu şeklinde erişilebilir. Bu yeni özelliğe gider[sorumlu] notasyonu ile erişilemez. Çünkü sorumlu sözcüğü programda değişken olarak tanımlı değildir.

Diziler nesne tipi verilerdir ve referansla aktarılırlar. Bu durumda , bir a dizisini, bir b değişkenine kopyalamak için,

b = a;
		

bildirimi işe yaramaz. Bu işlem sadece a daki bellek referansı değeri( pointer) 'i b ye kopyalamakla sonuçlanır ve hem a hem de b değişkenleri aynı diziyi değiştirrebilir duruma gelir. b Değişkenine a dizisinin bağımsız bir kopyasını yerleştirmek için, a dizisinin tüm elemanlarını ve yukarıdaki uygulamada bir örneği görüldüğü gibi, a dizisine kullanıcı eliyle yapılmış olan tüm özellik değerlerinin b değişkenine yeniden atanması gerekir. Bu atama için, for, while, do..while gibi döngüler kullanılarak yapılırsa sadece elemanların güncel değerleri kopyalanmış olur. Kopyalamanın tam olması için, kullanıcı tanımlı nesne örneği özellklerinin de yeni değişkene elle tanıtılması gerekir. Bu da otomatizayon değildir. Bunun yerine kopyalama for..in döngüleri ile gerçekleştirilirse, hiç elle müdahaleye gerek kalmadan tüm kopyalama gerçekleşmiş olur. Çünkü for..in döngüleri, hemdizilerin elemanlarını hem de dizilerin sayılabilir (enumerable) olan kullanıcı tanımlı özelliklerini tararlar. Dizilerin kopyalanması için sorunsuz olarak kullanılabilecek bir alt program bdelib.js program kitaplığına eklenmiştir. Bu alt programın kullanılışı,

diziKopyala(orijinalDizi, kopyaDizi);
		

şeklindedir. Bu fonksiyonun yazılımı,

function diziKopyala(orijinalDizi, kopyaDizi) {
for(indis in orijinalDizi) {
kopyaDizi[indis] =  orijinalDizi[indis]; 
}
}
		

şeklindedir.

Her zaman belirtildiği gibi, öntanımlı nesnelerin prototiplerinde özel eklemeler yapmak, geliştirilen programların başka sayfalarda kullanılması olanağını ortadan kaldırabilir. Ayrıca bu gizli global değişken kullanma anlamına gelir ve her bakımdan sakıncalıdır. Bir başka konu da eğer bu yeni kullanıcı tanımlı özelliğe bir varsayılan değer verilmezse ve eski üretilmiş dizilere bu özellik değeri girilmezse, JavaScript yorumlayıcısı eski üretlmiş dizilerde bu yeni özelliğin değerini undefined olarak belirleyecektir. Yineleyelim, çok gerekmedikçe öntanımlı nesnelerin prototiplerinde değişiklik yapılmamalıdır.

Bu uygulamada kullanılan diziTabloTekBoyut() fonksiyonu, ileride bölüm 20.5.1 de detaylı olarak açıklanmıştır.

8.2.1 - Array (Dizi) Nesne Sınıfı Prototipinin constructor Özelliği

Dizi nesne sınıfının prototipinin constructor özelliğinin değeri yani bu prototipe uyan nesne örneklerinin yaratıcısı olan yapılandıran fonksiyon, öntanımlı Array() fonksiyonudur. Bu bu fonksiyon JavaScript yorumlayıcısının bir iç yazılımı olduğundan yazılımı kullanıcıya kapalıdır ve dolayısı ile yazılımına erişme şansımız yoktur.

8.2.2 - Array (Dizi) Nesne Sınıfı Prototipinin toString() Metodu

JavaScript dizi sınıfı prototipinin toString() metodunun ismi generik nesne sınıfının prototipinden kaynaklanır, fakat içeriği dizi nesne sınıfının prototipine daha uygun olması için bindirilmiştir. Bu metodun sonucu, ilkel karakter dizgisi tipinde bir karakter dizigisi verisidir. Bu metodun geri döndürdüğü karakter dizigisi değişkeninin biçimi (formatı) bir dizinin öntanımlı görüntüsü ile aynıdır.

JavaScript dizi sınıfı prototipi, generik nesne sınıfı prototipinin valueOf() metodunu kalıtım yolu ile elde eder. Bu metodun yazlımı, dizi sınıfı prototipi düzeyinde bindirilmemiştir ve generik nesne sınıf prototipindeki yazılım ile aynıdır. Bu metodun geri döndüreceği ilkel karakter dizigisi tipinde bir karakter dizigisi verisi, dizi elemanlarının arasına virgül (comma) konularak düzenlenmiş öntanımlı bir karakter dizigisidir. Bu metodun uygulanma sonuçları ile ilgili bir JavaScript programı ve ilişikli olduğu sayfada verdiği sonuç aşağıda görülmektedir:

...
var örnekDizi= new Array(21, 45, 76, 88, 105); 
sonuçVeTipYaz('örnekDizi.toString() = ', örnekDizi.toString(), 'b8.2.2-uyg-1-sonuç-1'); 
...
		

Bu programın Sonucu :

Program sonucunda elde edilen karakter dizgisi verisinin görüntüsü, dizinin öntanımlı görüntüsü ile yanı gibi görülmektedir. Ne var ki, bu benzerlik salt görüntüdedir. Dizilerin öntanımlı görüntülenmesi dizinin veri tipi ve değerini değiştirmez. Bunu

JavaScript dizi sınıfı prototipinin biraz sonra incelenecek, toLocaleString() metodu, pratik olarak toLocaleString() metodu ile aynı öntanımlı karakter dizigisi tipinde veriyi geri döndürmektedir. Bunu yukarıdaki uygulama 8.1 in sonuç tipinden anlayabiliriz. Oysaki toString() metodu geriye orijinal diziyi değil, orijinal dizinin elemanlarının aralarına virgül konularak oluşturulmuş bir ilkel karakter dizgisi veriyi döndürmektedir. Yukarıdaki son uygulama 8.2.2 nin sonucundan geri döndürülen veri tipinin tek bir karakter dizigisi ve (string) tipinde olduğu belirtilmektedir.

Dizi verilerinin toString() metodu ile geri döndürülen karakter dizigisi verisi, bilgisayar programları açısından değeri büyüktür. Bu veri virgüllerle ayrılmış veri (Comma Separated Variables) ( kısaca CSV) olarak adlandırılır. Bu veriler ileride göreceğimiz gibi bir disk metin dosyasına yerleştirilirse, bu dosyanın standart formatını birçok hazır program, örnek olarak bilimsel grafik programları, MS Excel ve benzeri tablolama programları, Access ve MySQL gibi veri temeli programları çok kolaylıkla okuyup kullanabilir.

Dizi sınıfı nesne örneklerinde, toString() metodunun döndürdüğü değer ile biraz ileride incelenecek olan,argümansız olarak kullanılacak, join() metodunun geri döndüreceği değer aynıdır. Kullanıcılar iki metottan istedikleri birisini özgürce seçebilirler.

8.2.3 - Array (Dizi) Nesne Sınıfı Prototipinin toLocaleString() Metodu

ECMA-262 sürüm 3 spesifikasyonunda, sadece sayı, dizi ve tarih nesnelerinin toString() metodu ile toLocaleString() metodunun döndüreceği ilkel karakter dizgisi verisinin öntanımlı biçimleri farklıdır. Dizi nesnesinde bu biçim farkı, dizi içeriğinin yerel gösterime daha uygun olması amacı ile farklı şekilde düzenlenmiştir. Bu konuda bir JavaScript programı ve bağlantılı olduğu uygulama sayfasında verdiği sonuç, aşağıda görülmektedir:

...
var örnekDizi= new Array(21, 45, 76, 88, 105); 
sonuçVeTipYaz('örnekDizi.toLocaleString() = ', örnekDizi.toLocaleString(), 'b8.2.3-uyg-1-sonuç-1'); 
...
		

Bu programın Sonucu :

Dizi nesne sınıfı örneklerine uygulanan toLocaleString() metodu, henüz sadece Internet Explorer sürüm 8 de toString() metodundan farklı bir biçimde olan bir ilkel karakter dizigisi verisi geri döndürmektedir. Internet Explorer sürüm 8 de, sayısal dizi elemanları, eski OrtaAvrupa notasyonuna uygun bir şekilde, ondalıklar virgül ile, dizi elemanları da birbirlerinden noktalı virgül (semikolon) (;) ile ayrılmış olarak düzenlenmektedir. Doğal olarak, bu notasyon SI birimlerinin uygulandığı mühendislik çalışmalarında uygun olmayacaktır.

8.2.4 - Array (Dizi) Nesne Sınıfı Prototipinin concat() Metodu

Dizi nesne sınıfı prototipinin concat() Metodu , iki veya daha çok dizinin birleştirilmesi ile oluşan yeni bir diziyi döndürür. Sözdizimi,

dizi1.concat([birim1[,birim2[, . . .[, birimN]]]])

şeklindedir.

Burada, birim1, birim2 dizi1 dizisine soldan sağa doğru, eklenecek dizilerdir. Eğer eklenecek birim diziden başka bir tipte ise, dizinin sonuna yeni bir eleman olarak eklenir. Elemanları nesnelerden oluşan iki dizi birbirine eklenirse, orijinal ve eklenmiş dizlerin aynı nesneye referans vermeleri nedeni ile birinde olabilecek değişiklik diğerine de yansır. Sayısal ve karakter dizgisi verileri sadece değer olarak kopyalandıklarından, elemanları sayısal veya karakter dizgisi olan diziler birbirlerine eklenirse, oluşan dizinin elemanlarından birinin değerinin değişmesi durumunda, değişiklik orijinal dizilerin elemanlarının değerlerini etkilemez. JavaScript kodları aşağıda görülen bir örnekte, concat() metodu uygulanmıştır.

/* <![CDATA[ */

function ekle () {
var g = new Array('Serkan', 'Seçkin' , 'Başar', 'Hazar' , 'Gülser'),
h = new Array ('Ayla', 'Çiğdem'),
m =new Array (),
m = g.concat(h);
			
diziElemanlarıYatayYazımı('(m Dizisi)', m, '|', 'b8.2.4-uyg-1-sonuç-1');

diziElemanlarıYatayYazımı('(h Dizisi)', h, '|',  'b8.2.4-uyg-1-sonuç-2');

diziElemanlarıYatayYazımı('(g Dizisi)', g, '|', 'b8.2.4-uyg-1-sonuç-3');
			
m[4] = 'Walther';
			
sonuçYaz('m[4] = ',  m[4], 'b8.2.4-uyg-1-sonuç-4');
			
diziElemanlarıYatayYazımı('(m Dizisi)', m, '|', 'b8.2.4-uyg-1-sonuç-5');
			
diziElemanlarıYatayYazımı('(h Dizisi)', h, '|', 'b8.2.4-uyg-1-sonuç-6');
			
diziElemanlarıYatayYazımı('(g Dizisi)', g, '|', 'b8.2.4-uyg-1-sonuç-7');
			
}

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

/* ]]> */ 
		

Program Sonucu :

Burada kullanılan diziElemanlarıYatayYazımı() alt programı, dizi elemanlarının yatay yazımları için geliştirip kullandığımız bir fonksiyondur. Bu program, çıktıları, belirtilen bir elemanın içeriği olarak değil, bu elemanı takip eden yeni oluşturulan bir paragraf elementinin içeriği olarak yazdırmaktadır. Dizinin tüm elemanları, birbiri ardınca, lineer olarak görüntülendirilmektedir. Bir satıra yazdırılacak eleman sayısı 8 ile sınırlandırılmıştır. İstenirse bu sayı fonksiyon içinden değiştirilebilir. Bu fonksiyonda, elemanların biribirlerinden ayrılması için kullanılan ayraç karakter dizigisi değişkeni, fonksiyonun bir parametresi olarak tanımlanabilmektedir.Bu fonksiyon bdelib.js fonksiyon kitaplığına alınmıştır. Fonksiyonun yazılımı aşağıda görülmektedir:

function diziElemanlarıYatayYazımı(mesaj, dizi, ayraç, öncekiElementId) {

var yeniParagraf= {}, span = {}; 
			
yeniParagraf =  document.createElement('p');
			
yeniParagraf.setAtribute('class' , 'cursive-red');

span = document.createElement('span');

span.setAtribute('class' , 'cursive-green';

span.appendChildyeniParagraf, document.createTextNode('Dizi Elemanları' + mesaj + ' : '));

yeniParagraf.appendChild(span);

ardınaEkle(yeniParagraf,document.getElementById(öncekiElementId));

for(i=0; i < dizi.length; i++) {

if(dizi[i]===undefined) {

 ekle.appendChild(document.createTextNode('undefined'));
}

else {

 ekle.appendChild(document.createTextNode(dizi[i]));
}

if(i < dizi.length - 1) {

ekle.appendChild(document.createTextNode(' ' + ayraç + ' ');
}

if(i === 8) {
a.appendChild(document.createElement('br'));
}
}
}
		

Bu kodlar W3C-DOM yöntemleri incelendiğinde açıklığa kavuşacaktır. Bu noktada sadece fonksiyonları kullanmakla yetineceğiz.

Sonuçlardan görülebileceği gibi, bir g dizisinin sonuna, bir h dizisinin elemanları eklenerek yeni bir m dizisi oluşmaktadır. Oluşan m dizisinin bir elemanının değeri değişirse, eski dizideki değeri etkilenmemektedir. Birbirlerine eklenen iki dizinin elemanları nesne tipinde olsalardı, oluşan dizideki elemanların değerininin değişmesi durumunda, eski dizideki değerleri de değişecekti. İki nesne dizisinin, orijinal dizilerden bağımsız olarak birbirlerine eklenmeleri için, önce ilk iki dizinin kopyalanması ve kopyalarının birbirlerine eklenmesi gerekmektedir. Bu konuda bir önceki paragrafta dizilerin kopyalanması konusu yeniden incelenmelidir.

Tüm dizi elemaları yatay olarak, tek değişkenler için kullanılagelen bilgiYaz() fonksiyonundan yararlanılarak da yazdırılabilir. Bu fonksiyon bdelib.js kitaplığında tanıtılmış olduğundan acil durumlarda, dizi elemanlarının yazdırılması için, hiçbir özel çıktı fonksiyonunun yazılmasına gerek kalmadan, doğrudan bilgiYaz(dizi, yazılacakYer); fonksiyonu kullanılarak dizi elemanları yazdırılabilir. Bu durumda, JavaScript yorumlayıcısı, dizi elemanları arasına bir virgül eklemektedir.

8.2.5 - Array (Dizi) Nesne Sınıfı Prototipinin join() Metodu

Dizi sınıfı prototipinin join() Metodu, bir dizinin tüm elemanlarının belirtilen ayırma karakterleri ile ayrılacak şekilde birleştirilmesi ile oluşan bir karakter dizgisi (string) döndürür. Sözdizimi,

dizi.join("ayraç")

şeklindedir. Burada, dizi dizi sınıfından bir nesne örneği yani bir dizi dir. Bağlanntı elemanı olan ayraç ise bir ayırma (separatör) karakteridir. Tüm karakter dizgisi (string) literallerde olduğu gibi, ayraç argümanının da tırnak içerisinde kullanılması, veya daha önceden, bir karakter dizgisi tipinde değişkene atanıp, join() fonksiyonunun argümanı olarak kullanılması gerekir.

Dizi elemanın değeri null veya undefined ise, boş bir karakter dizgisi olarak kabul edilir.

join() Metodu, dizi elemanlarının görüntülenmesi için, çok yararlıdır. join () Metodu, bir g dizisi ile,

k=g.join(" | ");

şeklinde uygulanırsa, g dizisi değişmeden kalır ve tüm dizi elemanlarını, belirtilen ayraç karakterleri ile ayrılmış olarak içeren, bir k karakter dizigisi değişkeni oluşur. Fakat, join(() Metodu, aşağıda görüldüğü gibi bir tahrip edici atama şeklinde gerçekleştirilirse,

g=g.join(" | ");

g değişkeni, artık orijinal diziyi değil, yeni oluşan karakter dizgisini içerir ve g dizisi kaybolur. Geri döndürülen değerin, tek bir karakter dizgisi olması ve ayraç karakterleri içermesi, bir sorun yaratmaz ve join() İşlemi sonunda oluşan karakter dizgisinden, orijinal dizi elemanları, çeşitli algoritmalardan yararlanılarak yeniden oluşturulabilirler. Yine de, orijinal diziler programın ilerideki işlemlerinde kullanılacaklarsa, bunlar değişmemiş olarak saklanarak, aşağıdaki uygulamada yapıldığı gibi, işlemlerin yeni diziler üzerinden yapılması uygun olacaktır. join() Metodunun bir uygulamasının, JavaScript kodları ve sonuçları aşağıda görülmektedir:

/* <![CDATA[ */

function birleştir () {

var g = new Array('Serkan', 'Seçkin' , 'Başar', 'Hazar' , 'Gülser'), h = '';

h = g.join(' @ ');

sonuçYaz('(g Dizisi)', h, 'b8.2.5-uyg-1-sonuç-1');

}

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

/* ]]> */ 
		

Program Sonucu :

Bu uygulamanın sonuçlarından görülebileceği gibi, join() metodunun uygulanması, orijinal dizinin elemanlarını değiştirmemekte, sadece elemanlar arasında ayraç işaretleri eklenmiş, yeni bir karakter dizgisi yaratmaktadır. Bu karakter dizigisi, dizilerin sunumunda büyük kolaylık sağlamaktadır.

Valid XHTML 1.1