Makale

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

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.

11 dk okumaDil: TR TürkçeÜcretsiz0 alkış0 yorum
Mühendislik MakaleleriJavaScriptCleanAdvancedCoding
Okuma seçenekleri

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

  1. ?. ile geçersiz durumu gizlemek.
  2. Her döngüyü yoğun dizi zincirine çevirmek.
  3. Bağımlı istekleri Promise.all() içine koymak.
  4. Sınırsız eşzamanlı görev başlatmak.
  5. Spread’in derin kopya olduğunu sanmak.
  6. Hataları ele almadan yakalamak.
  7. Çalışma zamanı desteğini kontrol etmeden yeni özellik kullanmak.
  8. 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
EditoryalTR
18 dkÜcretsiz

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.

Mühendislik MakaleleriYapay Zeka RehberleriAIPythonVision
0 alkış
Oku
Cache Stampede Nedir? Laravel’da Nasıl Önlenir?
EditoryalTR
9 dkÜcretsiz

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.

Mühendislik MakaleleriLaravelCachingRedis
0 alkış
Oku
AI Destekli Yazılım Geliştirmede En Önemli Dosya
EditoryalTR
7 dkÜcretsiz

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

Mühendislik MakaleleriYapay Zeka RehberleriLaravelEngineeringBackend
0 alkış
Oku

Yorumlar

0 yorum

Henüz onaylı yorum yok. Yeni yanıtlar moderasyon bekleyebilir.