Bu siteye giriş yaparak Çerez kullanımını kabul etmiş oluyorsunuz. İşbu sitede; çerez olarak, sadece son giriş tarihiniz ve eğer üye olursanız oturum statünüz tutulacaktır. Bunlar dışında başka hiçbir bilgi tutulmamaktadır. Çerezler için detaylı bilgi için buraya tıklayınız.
ANLADIM

DUYURULAR

Yeni eklenen ve/veya güncellenen sayfaları görmek için buraya tıklayınız.

Güncel ödev ve test listesini görmek için buraya tıklayınız.

Sitede yapılan iyileştirmeAer ve hata düzeltmelerine ait tüm bilgilendirmeleri görmek içinburaya tıklayınız.

Baş
Udemy
Konular
Son
Konular
Diziler
NeNeredeNasil
Fasulye
FasulyeNe Nerede Nasıl1

Diziler

Heralde kodlama yaptığım sürede u diziler(ve dizimsiler) kadar kafamı karıştıran birşey olmamıştır. Şimdi bunlara bi bakalım,. Örneklerde basitlik olması adına tek boyutlu dizilerden bahsedilecektir.

Ön bilgi:VBA/VB.Net küçük/büyük harf ayrımı gözetmez, o yüzden property ve metod isimlerinde harfin büyüklüğü önemli değildir. c# ve javascript ise case-sensitive'dir. C#'ta property ve metodlar büyük harfle başlarken, javascriptte küçük harfle başlar. Aşağıda da bu gösterime sadık kalınmıştır. Ör:C#'ta boyut özellilği Length ile elde edilirken javascriptte length ile elde edilir.

Genel Bilgiler

Syntax'a baktıgımızda aşağıdaki dillerden VB kökenli dillerde dizi parantezi normal parantez yani () iken, diğer dillerde köşeli parantez yani [] şeklinde ifade edilir. Ve yine VB kökenli dillerde bu parentez dizi değişkeninin yanına yazılırken, diğerlerinde veri tipinin yanına yazılır.

Base(taban)

VBA:Varsayılan değer 0'dır, ancak Option Base 1 yapılarak baz 1'den başlatılabilir. (ParamArray'ler hariç). Benim tavsiyem, varsayılan değeri bozmayın ve 0'dan başlatın ve bunu alışkanlık haline getirin, yoksa diğer dillerle çalışmaya başladığınızda karmaşa yaşayabilirsiniz. Baz index değeri VBA'de Lbound fonksiyonu ile bulunabilir ve bu metod çoğu durumda 0 döndürecektir.

VBA'de cells, worksheets gibi bazı collection üyelerinin indexi 1'den başlar ve bu değiştirilemez.

VB.Net:VBA 'de yazılı olanlar burda da geçerlidir. Ancak baz index değeri VBA'de Lbound fonksiyonu ile bulunurken VB:Net'te GetLowerBound bulunabilir.

C#:Varsayılan değer 0'dır. Optiona Base gibi bir seçenek yoktur, ancak wrapper class yazarak istenilen indexten başlatılabilir(bence gereksizdir)

Javascript:Varsayılan değer 0'dır.

Bu arada, tüm dillerde, baz değer istenirse 0'dan küçüğe de ayarlanabilir, bunun çok kullanım yeri olduğunu düşünmüyorum ancak teorik olarak imkan bulunmaktadır.

Boyut/Uzunluk/Eleman Sayısı ve Üst Değer(Son eleman indexi)

VBA:Dizi boyutu, dizi tanımlanırken parantez içinde verilen değer+1'dir, yani parantez içine yazılan değer boyut değil son indextir ve son index Ubound(dizi) ile boyut ise Ubound(dizi)+1 fonksiyonu ile elde edilir.  Dolu eleman sayısı ise loop'a sokularak bulunur.

VB.Net:Dizi boyutu, dizi tanımlanırken parantez içinde verilen değer+1'dir, yani parantez içine yazılan değer boyut değil son indextir ve son index GetUpperBound ile boyut ise Length özelliği veya GetLength(d) metodu ile elde edilir. GetLength ile belirli bir boyuttaki elemans sayısı alınırken Length ile tüm boyutlardaki eleman toplamı gelir. Dolu eleman sayısı ise loop'a sokularak bulunur.

Dizilerin bir boyutu olması gerektiğini biliyoruz, ancak VBA ve VB.Net'te ilk tanımlarken boyut vermek zorunda değiliz, boyutsuz tanımlayıp, daha sonra ReDim ifadesi ile de boyut verebiliriz. Aşağıdaki konu başlığında bunun detaylarını görebilirsiniz.

VBA/VB.Net(List(sadece VB.Net)/Collection/Dictionary):Dizimsi yapıların baştan belirlenmiş bir boyutu yoktur, belli bir andaki boyutu Count property'si ile bulunur. Boyutsuz tanımlandıkları için dolu eleman sayısı diye bir kavram yoktur. Son eleman indexi, Count-1 şeklinde bulunur.

C#:C#'ta dizi boyutu parantez içindeki rakamdır, dolayısıyla son index numarası da bundan 1 eksik olan rakamdır. Kullanılan özellik ve metodlar VB.Net ile aynıdır.

C#(List/Dictionary/Collection):VB.Net'teki gibi C#'ta da dizimsi elemanların eleman sayısı Count propertysi ile tespit edilir.

Javascript(Array):Boyut length ile alınır.

Initialization(Diziye ilk değer atama)

The default values of numeric array elements are set to zero, and reference elements are set to null.

VBA:VB'de dizi tanımlaması aşağıdaki şekillerde yapılabilir

Dim dizi1() as String	'eleman sayısı sonraya bırakılabilir. VBA'da veritipi belirtilmezse Variant olur, VB.Nette veritipi belirtilmelidir
Dim dizi2(5) as String 'son indexi 5 olan 6 elemanlı dizi
Dim dizi3(1 to 5) as String 'son indexi 5 olan 5 elemanlı dizi
Dim dizi4 = Array("Elma","Armut","Karpuz") 'Elemanlar baştan belirtilerek. Veri tipi belritilemdiği için Varianttır.

VB.Net:VB.Net'te de VBA ile aynı ifadeler geçerli iken ayrıca aşağıdaki gibi de initialization yapılabilir.

Dim nums() As Integer = {1, 2, 3}

C#:Dizi üyeleri, eğer deklarasyon anında belirtilmedilerse default değerleri atanır. Ayrıca boyut veya elemanlardan biri mutlaka belirtilmelidir

Aşağıda, MSDN sitesinden alınan örnek başlatım şekilleri bulunuyor.

// Tek boyutlu nümerik diziler
int[] n0 = new int[4];//sadece boyut belirtilip, değer olarak default değerler atanır, bu örnekte 0 atanır. gerektiğinde bunların dğeerleri program akışı içinde atanır
int[] n1 = new int[4] {2, 4, 6, 8};//boyut ve elemanlar birlikte belirtilebilir
int[] n2 = new int[] {2, 4, 6, 8};//sadece elemanlar new ifadesi ile belirtilebilir
int[] n3 = new[] {2,4,6,8}//Sistem kendisi anlar ne tipte olduğunu
int[] n4 = {2, 4, 6, 8};//sadece elemanlar new ifadesi olmadan belirtilebilir

// Tek boyultu string diziler
string[] s0 = new string[3];//defualt değer olarak null atanır, çünkü string bir referans tiptir
string[] s1 = new string[3] {"John", "Paul", "Mary"};
string[] s2 = new string[] {"John", "Paul", "Mary"};
string[] s3 = new[] {"John", "Paul", "Mary"};
string[] s4 = {"John", "Paul", "Mary"};

//boş ve null diziler
int[] bosArray = new int[0]; // Boş dizi
int[] nullArray; // Tüm dizilerin default değeri Null'dır, çünkü diziler referans tipli nesnelerdir. İçeriği belirtilmediği için bu dizinin de şuanki değeri null'dır.
//int[] nullArray; ifadesinin default değerinin null olması ile, int[] dizi=new int[4]; ifadesinin elemanları int olup elemanlar belirtilemdiği için bunları default değeri 0dır. yani ilkinde dizniin kendisi default değernine, ikncisinde ise elemanlar default değerlerine atanır. 

Bunlardan ilk 4ü aynı zamanda var ifadesi ile de yapılabilrdi, çünkü eşitliğin sağındaki bilgi diziyi başlatmak için yeterlidir, ancak 5. satır mutlaka belirtildiği gibi yazılmalıdır. Ör:

var s1 = new string[3] {"John", "Paul", "Mary"};

Javascript:Initialization kavramı yoktur. Var ifadesi ile diziyi yaratmak yeterlidir. Ayrıca javascript elemanları objedir, bu nedenle belirli bir veritipi belirtilmez, yani aynı dizi içinde hem string hem nümerik elemanlar bulunabilir.

var cars = ["Saab", "Volvo", "BMW"];
var cars = new Array("Saab", "Volvo", "BMW"); //ancak bunun kullanılması önerilmiyor, bi üstteki hem verimlilik açısından hemn okunurluk açısından daha iyidir

Veri ekleme

VBA:Normal dizilerde eleman ekleme, ilgili indeksteki elemana değer atama şeklinde gerçekleşir. Dizinin sonuna eleman ekleme, veya iki eleman arsına eleman yerleştirme diye birşey yoktur. Collectionlarda, listenin sonuna Add metodu ile ekleme yapılır. Dictionary'lerde de gerek Add metodu ile veya dizilerdeki gibi doğruda atama yöntemiyle eleman eklenebilir. Ne Colletionda ne Dictionary'de araya eleman ekleme diye birşey bulunmamaktadır.

VB.Net ve C#:VBA için söylenenler geçerli olup dizimsi yapıların her biri için farklı bir eleman eklem yöntemi vardır. Mesela List için Add, Queue için Enqueue, Stack için Push gibi.

Javascript:Push metodu ile yeni eleman eklenebileceği gibi index numarası verilerek de ilgili indexe eleman eklenebilir.

fruits.push("Lemon"); 
fruits[fruits.length] = "Lemon"; //bir üstteki ile aynı sonucu döndürür

Nihai Karşılaştırma

Yakında...

TEST SORULARI

Son Sorumuz şuymuş:Bir metindeki tüm noktaları yoketmek istiyorsunuz. Hangi fonksiyonu kullanırdınız?
Soru:

A şıkkı:

B şıkkı:

C şıkkı:

D şıkkı:

Doğru Cevap Etiketler

İlişkili konuyu seç

319

Label
* Sorulara verilen yanlış cevaplardaki esprili yorumlarım için hoşgörünüze sığınıyorum.
* Test ve Ödevlerdeki bazı detaylar burada anlatılmamış olabilir. Bunları kendiniz araştırıp bulmalısınız.
* Birden çok konuya ait içeriği olan ödevler var. Algoritmik açıdan bakıldığında o an en uygun konuya adreslenmiştir.
Dikkat! Bir soruya cevap verdikten sonra geri dönemezsiniz.
0
0
0
0

SoruID:... Şu an için bu konu için soru bulunmamaktadır. İletişim menüsünden örnek sorularınızı bana iletebilirsiniz.




ÖDEVLER

0
0
ÖdevNo:... Şu an için bu konu için ödev bulunmamaktadır. İletişim menüsünden örnek ödev sorularını bana iletebilirsin.
Çözüme bakın(Başka türlü de çözülebilir tabi, bu benim çözümüm.)




=YORUMLAR ve SORULAR=


DEVİR UYARISI

Herkese merhaba. Hosting maliyetlerinin aşırı artması yüzünden sitemi yakın zamanda(en geç Mayıs 2023) kapatmaya karar vermiştim. Ancak, siteyi yakından takip eden bir arkadaş siteyi devralmak istemiştir. Siteyi, Mayıs ayında kendisine devir etmeye karar verdim. Üyelik bilgilerini bana güvenerek girdiğiniz için, hepsini silmiş bulunuyorum, yani mail adreslerinizi kimseyle paylaşmamış olacağım. Bilginizi rica ederim.