Kıdemli Geliştiricilerin 2026'da Gerçekten Kullandığı 15 JavaScript Özelliği

Türkçe pratik rehber: modern JavaScript özelliklerini gerçek örnekler ve kıdemli geliştirici bakış açısıyla öğrenin.
JavaScript sözdizimini bilmek, ekip tarafından güvenle sürdürülebilen JavaScript yazmakla aynı şey değildir. Profesyonel kod daha okunaklıdır; hata, iptal, veri şekli ve performans konularında ne yaptığını açıkça gösterir.
Bu rehber, deneyimli geliştiricilerin gerçek uygulamalarda kullandığı 15 modern özelliği pratik örneklerle açıklar. Amaç her yerde kısa ve akıllı sözdizimi kullanmak değil, belirsizliği azaltmaktır.
1. Optional chaining ve nullish coalescing
?., değer null veya undefined olduğunda güvenli erişim sağlar. ?? yalnızca bu iki eksik değer için varsayılan değer verir.
function getCustomerLabel(order) {
const name = order.customer?.profile?.displayName ?? 'Guest';
const points = order.customer?.loyaltyPoints ?? 0;
return `${name} (${points} points)`;
}
0, false veya boş metin geçerli değerlerse || yerine ?? kullanın. Uygulamanızın garanti ettiği bir değeri ?. ile sessizce gizlemeyin.
2. Varsayılan değerlerle destructuring
Destructuring, fonksiyonun beklediği veri şeklini imzada gösterir.
function createAccount({ email, role = 'member', notifications = true }) {
if (!email) throw new Error('email is required');
return { email, role, notifications };
}
API alanlarını created_at: createdAt biçiminde yeniden adlandırabilirsiniz. Sadece gereken alanları alın; çok fazla parametre sorumluluğun bölünmesi gerektiğini gösterebilir.
3. Bilinçli hata sınırlarıyla async/await
async ve await akışı okunaklı yapar, ancak iyi kod hatanın nerede ele alınacağını da belirler.
async function loadDashboard(userId) {
const response = await fetch(`/api/users/${userId}/dashboard`);
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
return response.json();
}
Bir hatayı yakalayıp sebepsiz yere undefined döndürmek, açık bir sorunu daha sonra oluşan belirsiz bir probleme çevirir.
4. Bağımsız işler için Promise.all
Bağımsız istekleri paralel çalıştırın; birbirine bağlı işlemleri sıralı await ile yapın.
const [profile, projects, alerts] = await Promise.all([
fetchProfile(userId), fetchProjects(userId), fetchAlerts(userId),
]);
Her sonuca ihtiyaç duyuyorsanız Promise.allSettled() kullanın. Binlerce promise oluşturmak yerine kuyruk veya concurrency limiter kullanın.
5. İptal için AbortController
Yeni arama başladığında eski isteği iptal etmek kaynakları korur.
const controller = new AbortController();
const response = await fetch('/api/products?q=rust', {
signal: controller.signal,
});
controller.abort();
Beklenen iptali gerçek hatadan ayırın; izleme sisteminizi gereksiz hatalarla doldurmayın.
6. Spread ve yanlışlıkla değişiklik yapmamak
const nextUser = {
...user,
preferences: { ...user.preferences, theme: 'dark' },
};
Spread yalnızca sığ kopya üretir. Derin ve yapılandırılabilir veri için structuredClone() kullanılabilir; fonksiyonları ve DOM düğümlerini kopyalamaz.
7. Doğru veri modeli için Map ve Set
Benzersiz değerler için Set, dinamik anahtarlar için Map kullanın.
const uniqueTags = [...new Set(['js', 'api', 'js'])];
const counts = new Map();
counts.set('javascript', (counts.get('javascript') ?? 0) + 1);
Bu yaklaşım sıradan nesnelerdeki kalıtsal özellik çakışmalarını da önler.
8. Niyeti anlatan dizi metotları
map() dönüştürür, filter() seçer, find() ilk eşleşmeyi bulur, some() herhangi bir eşleşmeyi, every() tüm eşleşmeleri kontrol eder.
const activeEmails = users
.filter((user) => user.isActive)
.map((user) => user.email);
Her problemi reduce() ile çözmeyin. Çok adımlı veya erken çıkışlı işlemlerde for...of daha anlaşılır olabilir.
9. Okunabilir gruplama için Object.groupBy
Destekleyen çalışma zamanlarında Object.groupBy() uzun reducer kodlarını sadeleştirir.
const ticketsByStatus = Object.groupBy(tickets, (ticket) => ticket.status);
Yeni bir özelliği kullanmadan önce tarayıcı ve Node.js sürümlerini kontrol edin.
10. Private class fields
# ile başlayan alanlar adlandırma kuralıyla değil, dil tarafından korunur.
class RateLimiter {
#requests = 0;
constructor(limit) { this.limit = limit; }
tryConsume() {
if (this.#requests >= this.limit) return false;
this.#requests += 1; return true;
}
}
Gizlilik değişmezleri korur; yine de sınıfları tek bir sorumlulukta tutun.
11. Modüller ve dynamic import
import ve export bağımlılıkları açıklar. import() kodu yalnızca gerektiğinde yükler.
async function openChart(data) {
const { renderChart } = await import('./chart.js');
return renderChart(data);
}
Grafikler, editörler ve yönetim ekranları için başlangıç paketini küçültebilir.
12. Yerelleştirme için Intl
Tarih, sayı, para birimi ve liste biçimlendirmesinde Intl kullanın.
const price = new Intl.NumberFormat('tr-TR', {
style: 'currency', currency: 'TRY',
}).format(1299.5);
Elle virgül, tarih ve para sembolü birleştirmek yerine platformun yerelleştirmesinden yararlanın.
13. URL ve URLSearchParams
URL’yi string birleştirerek oluşturmak boşluklarda, & işaretlerinde ve Unicode karakterlerinde sorun çıkarabilir.
const url = new URL('/api/articles', window.location.origin);
url.searchParams.set('language', 'tr');
url.searchParams.set('query', 'async JavaScript');
fetch(url);
14. Bağlam taşıyan özel hatalar
Özel hata sınıfları doğrulama, yetki, ağ ve alan hatalarını ayırmayı sağlar.
class ValidationError extends Error {
constructor(message, details = {}) {
super(message); this.name = 'ValidationError'; this.details = details;
}
}
Şifreleri, token’ları veya kişisel verileri hata mesajlarına ve loglara koymayın.
15. Kontrollü durum için closures
Closure, değerleri globale açmadan çevresindeki duruma erişen bir fonksiyon oluşturur.
function createIdGenerator(prefix = 'item') {
let current = 0;
return () => `${prefix}-${++current}`;
}
Factory, memoization ve callback’lerde yararlıdır; uzun ömürlü dinleyicilerde gereksiz büyük nesneleri yakalamayın.
Uygulamalı profesyonel örnek
async function findUsers({ query, page = 1, signal } = {}) {
const normalizedQuery = query?.trim();
if (!normalizedQuery) throw new ValidationError('Arama gerekli');
const url = new URL('/api/users', window.location.origin);
url.searchParams.set('q', normalizedQuery);
url.searchParams.set('page', String(page));
const response = await fetch(url, { signal });
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const payload = await response.json();
return { users: payload.data ?? [], total: payload.meta?.total ?? 0 };
}
Profesyonel kısım özelliklerin sayısı değil; erken doğrulama, güvenli URL, iptal, HTTP kontrolü ve öngörülebilir sonuçtur.
Kaçınılması gereken hatalar
?.ile geçersiz durumu gizlemek.- Her döngüyü yoğun dizi zincirine çevirmek.
- Bağımlı istekleri
Promise.all()içine koymak. - Sınırsız eşzamanlı görev başlatmak.
- Spread’in derin kopya olduğunu sanmak.
- Hataları ele almadan yakalamak.
- Çalışma zamanı desteğini kontrol etmeden yeni özellik kullanmak.
- Gerçek tekrar eden problem olmadan soyutlama eklemek.
Sonuç
Kıdemli JavaScript, kaç özellik bildiğinizi göstermek değil; davranışı açık, veriyi doğru, hatayı bilinçli ve çalışma zamanını dikkate alan kod yazmaktır. Mevcut kodunuzda en çok belirsizliği azaltan özelliklerle başlayın.
Daha fazla okuma
Öne Çıkan Makaleler

YOLO Nesne Algılama: Geliştiriciler İçin Eksiksiz Uygulamalı Rehber
YOLO nesne algılama için temel kavramlardan veri, eğitim ve değerlendirmeye; gerçek zamanlı çalışma, üretim, performans ve güvenliğe uzanan geliştirici rehberi.

Cache Stampede Nedir? Laravel’da Nasıl Önlenir?
Cache stampede, çok sayıda eşzamanlı isteğin süresi dolmuş aynı anahtarı kaçırıp veriyi aynı anda yeniden üretmesiyle oluşur. Bu Laravel rehberi atomik kilitler, stale-while-revalidate, TTL jitter ve güvenli yedeklerle sorunu önlemeyi açıklar.

AI Destekli Yazılım Geliştirmede En Önemli Dosya
En etkili kurulum, ajana yalnızca ne geliştireceğini değil nasıl çalışacağını anlatan kısa bir dosya olabilir. AI kodlama ajanları demolarda etkileyicidir. Depo küçüktür, hedef nettir ve yanlış bir varsayımın maliyeti düşüktür. Gerçek projeler ise eski kararlar, yarım kalmış geçi
Yorumlar
0 yorumHenüz onaylı yorum yok. Yeni yanıtlar moderasyon bekleyebilir.