1. Diziler ve Dizi Metodları
Diziler, birden fazla değeri sıralı bir şekilde saklamamıza olanak tanıyan veri yapılarıdır.
Dizi Oluşturma
let meyveler = ["Elma", "Armut", "Muz", "Çilek"];
console.log(meyveler[0]); // "Elma"
console.log(meyveler[2]); // "Muz"
Temel Dizi Metodları
push(eleman)— Dizinin sonuna eleman eklerpop()— Dizinin sonundan eleman çıkarırunshift(eleman)— Dizinin başına eleman eklershift()— Dizinin başından eleman çıkarırlength— Dizinin uzunluğunu verir
meyveler.push("Kiraz"); // ["Elma", "Armut", "Muz", "Çilek", "Kiraz"]
meyveler.pop(); // "Kiraz" çıkarılır
// length ile son elemana erişim
console.log(meyveler[meyveler.length - 1]);
2. Objeler ve Nesne Literalleri
Objeler, anahtar-değer çiftleri şeklinde verileri saklamamıza olanak tanır.
Obje Oluşturma
let kisi = {
isim: "Ahmet",
yas: 30,
meslek: "Mühendis"
};
// obje özelliklerine erişim
console.log(kisi.isim); // "Ahmet"
console.log(kisi["yas"]); // 30
Yeni Özellik Ekleme / Güncelleme
kisi.sehir = "İstanbul";
kisi.yas = 31;
3. Fonksiyon İfadeleri ve Ok Fonksiyonları
Fonksiyon İfadeleri
Bir fonksiyonu bir değişkene atayabiliriz:
const kareAl = function (sayi) {
return sayi * sayi;
};
console.log(kareAl(5)); // 25
Ok Fonksiyonları (Arrow Functions)
Daha kısa fonksiyon tanımlama şekli:
const kupAl = (sayi) => {
return sayi * sayi * sayi;
};
console.log(kupAl(3)); // 27
// Tek satırlık dönüşü olan fonksiyonlarda süslü parantezleri ve return atlanabilir:
const ikiIleCarp = sayi => sayi * 2;
console.log(ikiIleCarp(4)); // 8
Soru: Ok fonksiyonları ve normal fonksiyon ifadeleri arasında
thisanahtar kelimesi açısından ne fark vardır?Ok fonksiyonları kendi
this’lerini oluşturmaz — tanımlandıkları yerinthis’ini miras alır. Bu, callback’lerde ve class metodlarında önemli bir davranış farkı yaratır.
4. Scope (Kapsam) ve Closure
Scope (Kapsam): Değişkenlerin erişilebilir olduğu bölgelerdir.
- Global Scope: Her yerden erişilebilir
- Function Scope: Sadece fonksiyon içinde erişilebilir
- Block Scope (ES6 ile):
letveconstile tanımlanan değişkenler blok içerisinde geçerlidir
let a = 10; // Global Scope
function ornekFonksiyon() {
let b = 20; // Function Scope
console.log(a); // 10
console.log(b); // 20
}
ornekFonksiyon();
console.log(b); // Hata: b tanımlı değil
Closure
Closure: İç içe fonksiyonlarda, iç fonksiyonun dış fonksiyonun değişkenlerine erişebilmesi durumudur.
function disFonksiyon() {
let sayac = 0;
function icFonksiyon() {
sayac++;
console.log(sayac);
}
return icFonksiyon;
}
const sayaciArttir = disFonksiyon();
sayaciArttir(); // 1
sayaciArttir(); // 2
sayaciArttir(); // 3
5. Yüksek Seviyeli Dizi Metodları
Diziler üzerinde daha karmaşık işlemler yapmamıza olanak tanıyan metodlar.
map — Her elemanı dönüştür
let sayilar = [1, 2, 3, 4, 5];
let kareler = sayilar.map(sayi => sayi * sayi);
console.log(kareler); // [1, 4, 9, 16, 25]
filter — Belirli koşula uyan elemanları al
let ciftSayilar = sayilar.filter(sayi => sayi % 2 === 0);
console.log(ciftSayilar); // [2, 4]
reduce — Diziyi tek bir değere indirge
let toplam = sayilar.reduce((toplam, sayi) => toplam + sayi, 0);
console.log(toplam); // 15
reduce’un ikinci argümanı (0) başlangıç değeridir. Verilmezse, dizinin ilk elemanı başlangıç değeri olarak alınır.
Pratik Sorular
Soru 1: Verilen bir dizi içindeki sayıların toplamını hesaplayan bir fonksiyon yazınız.
let dizi = [1, 2, 3, 4, 5, 6];
let toplam = dizi.reduce((a, b) => a + b, 0);
console.log(toplam); // 21
Soru 2: Bir obje dizisinde, yaşı 18’den büyük olan kişilerin isimlerini bir dizi olarak döndüren bir kod yazınız.
let kisiler = [
{ ad: "Ali", yas: 20 },
{ ad: "Ayşe", yas: 17 },
{ ad: "Mehmet", yas: 25 },
{ ad: "Fatma", yas: 16 },
{ ad: "Can", yas: 19 }
];
let yasBuyuklar = kisiler
.filter(kisi => kisi.yas > 18)
.map(kisi => kisi.ad);
console.log(yasBuyuklar); // ["Ali", "Mehmet", "Can"]
Soru 3: Closure yapısını kullanarak, dış fonksiyon bir mesaj alsın, iç fonksiyon bu mesajı ekrana yazdırsın.
function disFonksiyon() {
let mesaj = "Merhaba";
function icFonksiyon() {
console.log(mesaj + " — mesaj yazdırıldı");
}
return icFonksiyon;
}
let fonksiyon = disFonksiyon();
fonksiyon();
Günün Özeti
Bugün JavaScript’te veri yapıları ve fonksiyonları daha derinlemesine inceledik:
- Diziler ve sık kullanılan dizi metodlarını öğrendik
- Objeler ile karmaşık verileri nasıl modelleyebileceğimizi gördük
- Fonksiyon ifadeleri ve ok fonksiyonları ile daha esnek fonksiyonlar yazdık
- Scope ve closure kavramlarını anladık
- Yüksek seviyeli dizi metodları olan
map,filtervereduce’ı kullanarak diziler üzerinde güçlü işlemler yapmayı öğrendik
Yarın, Gün 3’te DOM manipülasyonu ve etkinliklere geçeceğiz.