Eğitim

JavaScript’te Temel Problemler: Küçük Sorular, Büyük Kazançlar

Bir Günlük Alıştırma, Aslında — hayır dur, daha doğrusu Bir Haftalık Fark Yaratıyor

İşin aslı şu. JavaScript öğrenirken en sık yapılan hata hep büyük projeye atlamak oluyor — sanki temeli atlamadan çatıya çıkılabilirmiş gibi. Halbuki bazen bir diziyi toplamak, çift sayıları ayıklamak ya da bir metni ters çevirmek gibi minicik sorular, kafada çok daha sağlam bir zemin oluşturuyor. Bunu söylerken “başlangıç seviyesi için faydalı olabilir” gibi muğlak bir şey demiyorum, bizzat yaşadım bunu. Ben yıllar önce, tam 2011 yazında Kadıköy’de bir ajans stajındayken fark ettim meseleyi; o zamanlar “bu kadar basit şeylerle neden vakit harcıyoruz?” diye söyleniyordum içimden. Proje koduna girince anladım. Esas mesele tam da buydu.

Bak şimdi, Dışarıdan bakınca çocuk oyuncağı gibi duruyor. Ama değil. Hani mutfakta tuzla suyu bir düşüneyim… ayırmak için önce suyun nasıl davrandığını anlamak gerekir ya — burada da mantık aynı işte. Dizi döngüsü nedir, koşul nasıl çalışır, Set ne işe yarar… bunları otomatik hale getirmeden ileri seviye konular biraz havada kalıyor, yüzeysel kalıyor, ezberlenmiş ama anlaşılmamış kalıyor.

Peki neden?

Editör masasında bu tarz notlara her denk geldiğimde hemen kendi kendime küçük testler açıyorum. Geçen ay, 2024 Şubat’ında İstanbul Levent’teki masaüstümde aynı beş problemi yeniden çözdüm; bu sefer amaç sadece sonucu almak değil, kodu kısa ve okunur tutmaktı. Açık konuşayım — ilk denememde bazı yerleri gereksiz uzattım. Oluyor böyle şeyler. Utanılacak bir şey değil aslında.

💡 Bilgi: Temel problem çözme alıştırmaları sadece “başlangıç” için değil; kod okuma hızını artırmak, hata ayıklamayı kolaylaştırmak ve algoritmik düşünceyi oturtmak için de bayağı işe yarıyor.

Dizilerle Başlamak Neden Bu Kadar Önemli?

Dizi dediğin şey aslında sıraya dizilmiş kutular gibi düşün. İçinde sayı olur, metin olur, nesne olur — fark etmez pek. Önemli olan o kutulara tek tek erişebilmek ve üstlerinde işlem yapabilmek. Bu yüzden bir dizinin toplamını bulmak ya da içindeki en büyük değeri seçmek gibi görevler kulağa basit gelir ama mantığın iskeletini kurar; hem de sandığından çok daha sağlam kurar (ki bu çoğu kişinin gözünden kaçıyor)

Bunu biraz açayım.

Küçük bir detay: Mesela 2023 sonbaharında Ankara’da küçük bir fintech projesinde çalışırken ekipten biri veri temizleme işini sürekli kopyala-yapıştır döngülerle hallediyordu. Kod çalışıyordu. Ama bakması kabustu, değiştirmesi daha büyük kabusdu. Aynı işi birkaç satırlık düzgün bir döngüyle çözünce hem performans hem okunabilirlik toparlandı — ve kimse o koda bir daha korka korka dokunmak zorunda kalmadı. Yani evet, “basit” görünen şey doğrudan prod ortamına etki edebiliyor.

Aslında, Burada önemli nokta şu: döngüyü ezberlemek yetmiyor. Ne zaman duracağını bilmek gerekiyor. for döngüsüyle dizi gezmek çok temel. Hâlâ çok dayanıklı bir yöntem; küçük startup tarafında gayet yeterli olabiliyor. Bu ne anlama geliyor? Enterprise seviyede veri büyüyünce ise aynı yaklaşımı biraz daha dikkatli kullanmak lazım — performans kaygıları girince iş renk değiştiriyor.

Dizi Toplama İşinin Arkasındaki Mantık

Toplama işlemi için sıfırdan başlıyorsun, sonra her elemanı üzerine ekliyorsun. Matematik tarafı net. Yazılım tarafında ise asıl kazanç değişkeni doğru yönetmekte yatıyor; yanlış başlangıç değeri verirsen sonuç kayıyor, boş dizi gelirse zaten başka bir hikâye başlıyor.

İşte tam da bu noktada devreye giriyor.

const numbers = [1, 2, 3, 4, 3];
let totalSum = 0;
for (let i = 0; i < numbers.length; i++) {
totalSum += numbers[i];
}
console.log(totalSum); // 13

Bunu görüp “tamamdır” demek kolay. Ama bence asıl fayda şurada: her adımı gözünün önünde izleyebiliyorsun, takip edebiliyorsun, “buraya kadar ne oldu?” diye sormak zorunda kalmıyorsun. Fonksiyonlar büyüdükçe o görünürlük yavaş yavaş kayboluyor ve yeni başlayanların kafası karışıyor. O yüzden ben bu tip problemleri öğretirken önce döngüyle çözdürürüm; reduce gibi daha şık yöntemlere ancak ondan sonra geçerim. Daha fazla bilgi için KMP Algoritması: Dizeleri Hızlı Aramanın Akıllı Yolu yazımıza bakabilirsiniz. Bu konuyla ilgili javascript ile ilgili önceki yazımız yazımıza da göz atmanızı tavsiye ederim.

Çift Sayılar, En Büyük Değer ve Biraz Sabır

E tabi iş yalnızca toplamakla bitmiyor. Dizideki çift sayıları bulmak ya da en büyük elemanı seçmek de aynı mantığın farklı yüzleri gibi davranıyor — birinde mod operatörü var (%), diğerinde karşılaştırma (>) (buna dikkat edin). İkisi de temelde karar verme mekanizması kuruyor.

Bir bakıma, küçük bir detay: Bana kalırsa burada en kritik nokta acele etmemek. En çok da yeni başlayanlar koşul yazarken küçük detayları kaçırabiliyor; mesela çift sayı kontrolünde % 2 === 0 kısmını doğru kurmazsan sonuçlar saçmalayabiliyor, üstelik bazen hata da vermiyor, sadece yanlış çıktı üretiyor — ki bu daha kötü. Geçen yıl İzmir’de yaptığım bir eğitimde bunu birebir gördüm; sınıftaki biri yanlışlıkla = kullanmıştı ve ekran bomboş kalmıştı. Gülüştük tabii ama ders iyi oldu.

Problem Kullandığın yapı Ana fikir Zorlayan nokta
Dizi toplamı for Tüm elemanları sırayla eklemek Başlangıç değerini doğru vermek
Çift sayı sayma %, if Kalanı kontrol etmek Koşulu doğru yazmak
En büyük sayıyı bulma > Sürekli karşılaştırıp güncellemek İlk değeri doğru seçmek
Ters çevirme / tekrar kaldırma split(), reverse(), Set Dönüştürme zinciri kurmak Araçların sırasını kavramak
Tabloya baktığında mesele aslında tek tek komutlar değil… zihnin hangi aracı ne zaman kullandığı.
const text = "ABC";
const reversed = text.split("").reverse().join("");
console.log(reversed); // CBA
let evenCount = 0;
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 === 0) {
evenCount++;
}
}

Bazen bu kadar küçük işlemler bile insana güven veriyor. Çünkü sonuç net: ya doğru çıktı alıyorsun ya almıyorsun. Arada gri alan yok denecek kadar az. Aslında dur — tamamen gri alan yok demeyeyim; özellikle string dönüşümlerinde karakter seti veya boşluk meselesi çıkarsa işler ufak tefek karışabiliyor. Tahmin eder misiniz? Ama yine de bu tip alıştırmalarda geri bildirim anında geliyor, ve bu çok değerli bir şey öğrenme açısından.

Ters Çevirme ve Set Kullanımı: Küçük Ama Tatlı Hileler

`split(“”)`, `reverse()`, `join(“”)` üçlüsü JavaScript’in günlük hayat kurtaran klasiklerinden biri.

İlk bakışta sihir gibi görünüyor. Ama öyle değil tabii. Metni parçalara ayırıyorsun, sırasını tersine çeviriyorsun, tekrar birleştiriyorsun — hepsi bu kadar. Buradaki güzellik zincir halinde düşünmeyi öğretmesi; kod okurken de çoğu zaman mesele tek fonksiyon değil zaten, fonksiyonların birbirine nasıl bağlandığı önemli olan.

Kısacası şu: Problem çözme pratiği seni “kod yazan kişi” olmaktan çıkarıp “mantık kuran kişi” yapıyor (evet, doğru duydunuz). İşin özü burada yatıyor.

(ki bu çoğu kişinin gözünden kaçıyor)

Dublike elemanları kaldırmada ise Set bayağı rahatlatıcı bir araç oluyor. Düşünsene — elindeki listeyi tek — kendi adıma konuşayım — tek tarayıp tekrar edenleri elle ayıklamak yerine işi JavaScript’in veri yapısına bırakıyorsun. Ama burada da küçük bir uyarı var. Set sıralamayı koruyabilir fakat her senaryoda istediğin davranış tam olarak bu olmayabilir; bazen özel sıralama gerekir, bazen orijinal indeks bilgisi kaybolur — valla güzel iş çıkarmışlar —. Araç güzel, yanlış anlaşılınca sürpriz çıkarabilir. javascript ile ilgili önceki yazımız yazımızda bu konuya da değinmiştik.

const unique = [...new Set(numbers)];
console.log(unique); // [1, 2, 3, 4]

Küçük Startup mı Kurumsal Proje mi?

Küçük ekiplerde hız kazanırsın

Aynı problem seti küçük ekiplerde bambaşka hissettiriyor. Bir startup’ta çoğu zaman amaç hızlıca çalışan çözüm çıkarmak —. Sade for döngüsü, fazla soyutlamaya kaçmadan, tane tane ilerlemek çoğu zaman yeterli. Tabi burada test disiplini yine şart; yoksa kısa yol diye çıktığın yolda uzun yola dönersin, ve o uzun yol genellikle sabah 2’de seni buluyor.

Bakın, Kurumsal tarafta ise hikâye değişiyor. Bir bankanın iç sisteminde ya — ki bu tartışılır — da büyük bir e-ticaret altyapısında benzer problemleri çözerken sadece “doğru çalışsın” yetmiyor; okunaklı olacak, dökümante edilecek, bir sonraki mühendisin eline geçtiğinde baş ağrıtmayacak. Bu yüzden basit algoritmaları bilmek burada da önemli ama etrafına daha sıkı mühendislik kuralları ekleniyor.

Şunu söyleyeyim, Ha, bu arada maliyet tarafını da unutmayalım. Bir arkadaşım Londra’daki küçük SaaS girişiminde geçtiğimiz yıl basit optimizasyonlarla rapor üretim süresini ciddi biçimde düşürdüğünü anlatmıştı. Kodun yüzde doksanı değişmedi bile — sadece yanlış yerde yapılan ekstra dolaşmalar temizlenmişti. Bazen mucize sandığımız şey aslında düz mantık oluyor. Bu kadar.

Birkaç Pratik İpucu Daha — Ezber Değil Refleks Kur

Eğer bu beş problemi gerçekten içselleştirmek istiyorsan, kendine ufak kısıtlar koy. İlk hafta sadece klasik for döngüsü kullan. Sonra ikinci hafta aynı işleri map/reduce ile yeniden yaz. Ardından fonksiyonları bölüp yeniden düzenle (ben de ilk duyduğumda şaşırmıştım). Bu geçiş beynin farklı kaslarını çalıştırıyor resmen — aynı probleme üç farklı açıdan baktığında ne zaman hangi aracı seçeceğin içgüdüsel hale geliyor.

Bir de hata ayıklama kısmını küçümseme. Durum beklediğin gibi gitmeyince console.log serpiştir, birkaç ara değişkeni izle, gerekirse cümlenin ortasında geri dön. “Az önce şöyle dedim ama hayır, daha doğrusu…” demek burada gayet normal. Neyse uzatmayayım — kod dünyasında utanmadan geri adım atmayı öğrenen kişi, inat edip saatlerce yanlış yönde koşan kişiden her zaman daha hızlı ilerliyor.

Kendi adıma şunu söyleyeyim: ben bu tip alıştırmaları bazen kahve molasında bile açıyorum. Fenerbahçe’deki eski ofis günlerinden kalan alışkanlık galiba — beş dakikada çözmeye çalıştığım minicik problem bazen bütün akşam aklımda dönüyor. Ama ertesi gün projede aynı mantığa denk gelince yüzüm gülüyor. Evet, tuhaf ama gerçek.

Sıkça Sorulan Sorular

Dizi toplamını hesaplamak için en basit yöntem nedir?


Döngü ile tüm elemanları tek tek gezip bir sayaçta toplamak en anlaşılır yöntemdir.
Yeni başlayanlar için en iyi başlangıç budur. Adımlar açıkça görünür.

Cevap:

Daha kısa yazmanın yolu var mı?

Hayır mı? Var tabi—özellikle modern JavaScript’te [].reduce()/ reduce ile bunu daha kısa yazabilirsin.Ancak önce mantığı döngüyle kavramak daha sağlıklı olur.

  • Döngüleri erken öğrenmek ileride işini kolaylaştırır.
  • % operatörü dijital dünyada minik ama güçlü bir kontrol aracıdır.

Neden Set kullanıyoruz?”

Set, tekrar eden değerleri otomatik olarak ayıkladığı için pratik olur.
Mesela temiz veri listesi üretirken çok işe yarar.
Ama sıralama ve özgün indeks bilgisi gerekiyorsa dikkat etmek gerekir.

Kodum neden beklediğim sonucu vermiyor?

Büyük ihtimalle başlangıç değeri,yanlış koşul veya indeks hatası vardır.Console.log ile ara adımları izlersen sorun genelde hemen ortaya çıkar.

Soru Kısa cevap
Ters çevirme nasıl yapılır? `split` + `reverse` + `join` kombinasyonu yeterli.

Kaynaksız Kalmayalım…”

MDN Array DokümantasyonuaaMDN Set DokümantasyonuMDN JavaScript Guide

Aşkın KILIÇ

20+ yıl deneyimli Azure Solutions Architect. Microsoft sertifikalı bulut mimari ve DevOps danışmanı. Azure, yapay zekâ ve bulut teknolojileri üzerine Türkçe teknik içerikler üretiyor.

AZ-305AZ-104AZ-500AZ-400DP-203AI-102

Bu içerik işinize yaradı mı?

Benzer içerikleri kaçırmamak için beni sosyal medyada takip edin.

Haftalık Bülten

Her pazar özenle seçilmiş teknoloji yazıları doğrudan e-postanıza gelsin.

← Onceki Yazi
Memento-Skills: Yapay Zekâ Kendi Becerisini Yazarsa Ne Olur?
Sonraki Yazi →
Crimson Desert’ta Mod Sahnesi Kızıştı: Kliff’e Yeni Yüzler

Yorum Yaz

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Haftalık Bülten

Azure, DevOps ve Yapay Zeka dünyasındaki en güncel içerikleri her hafta doğrudan e-postanıza alın.

Spam yok. İstediğiniz zaman iptal edebilirsiniz.
📱
Uygulamayı Yükle Ana ekrana ekle, çevrimdışı oku
Kategoriler
Ara
Paylaş
İçindekiler
← Memento-Skills: Yapay Zekâ Ken...
Crimson Desert’ta Mod Sahnesi ... →
📩

Gitmeden önce!

Her pazar özenle seçilmiş teknoloji yazıları ve AI haberleri doğrudan e-postanıza gelsin. Ücretsiz, spam yok.

🔒 Bilgileriniz güvende. İstediğiniz zaman ayrılabilirsiniz.

📬 Haftalık bülten: Teknoloji + AI haberleri