0Pricing
TypeScript Academy · Ders

Özyinelemeli Tür Tanımları

Kendilerine güvenli biçimde başvuran türler yazın.

Özyinelemeli Tür Tanımları, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.

Özyinelemeli Tür Nedir

Özyinelemeli tür, kendi tanımı içinde kendisine başvuran bir türdür. Bu, sınırsız derinlikteki veri yapılarını açıklamanızı sağlar.

type LinkedList<T> = {
  value: T;
  next: LinkedList<T> | null;
};
// next is the same type again, ending at null.

Bağlı Liste Türü

Klasik örnek şudur: her düğüm bir value ve başka bir düğüme işaret eden bir next işaretçisi ya da chain'i sonlandırmak için null tutar.

type LinkedList<T> = { value: T; next: LinkedList<T> | null };
const list: LinkedList<number> = {
  value: 1,
  next: { value: 2, next: null }
};
console.log(list.value, list.next?.value);

Temel Durum Önemlidir

Her özyinelemeli türün bir sonlandırıcıya ihtiyacı vardır; burada bu sonlandırıcı null değeridir ve özyinelemenin sona ermesini sağlar. Bu olmadan tür sonsuz derinlikte olurdu.

type LinkedList<T> = { value: T; next: LinkedList<T> | null };
const single: LinkedList<string> = { value: "only", next: null };
console.log(single.next);

Daha Uzun Zincirler Oluşturmak

İstediğiniz kadar iç içe yerleştirebilirsiniz; next değerinin kendisi bir liste veya null olduğu için tür her uzunluğa izin verir.

type LinkedList<T> = { value: T; next: LinkedList<T> | null };
const chain: LinkedList<number> = {
  value: 10,
  next: { value: 20, next: { value: 30, next: null } }
};
console.log(chain.next?.next?.value);

Bağlı Listede Gezinmek

Bir işlev, null değerine ulaşana kadar next'i izleyerek chain üzerinde ilerleyebilir. Özyinelemeli tür bunu tamamen tür güvenli hâle getirir.

type LinkedList<T> = { value: T; next: LinkedList<T> | null };
function toArray<T>(list: LinkedList<T> | null): T[] {
  const out: T[] = [];
  let cur = list;
  while (cur) { out.push(cur.value); cur = cur.next; }
  return out;
}
const l: LinkedList<number> = { value: 1, next: { value: 2, next: null } };
console.log(toArray(l));

Özyinelemeli Türler Üzerinde Özyinelemeli İşlevler

Özyinelemeli türler, özyinelemeli işlevlerle doğal biçimde eşleşir. Burada uzunluğu, next üzerinde özyineleme yaparak hesaplıyoruz.

type LinkedList<T> = { value: T; next: LinkedList<T> | null };
function length<T>(list: LinkedList<T> | null): number {
  return list === null ? 0 : 1 + length(list.next);
}
const l: LinkedList<string> = { value: "a", next: { value: "b", next: null } };
console.log(length(l));

Bir Listeye Başa Öğe Eklemek

Tür tekdüze olduğu için yeni listeler oluşturmak kolaydır: mevcut bir listeyi yeni baş düğümün next değeri olarak sarın.

type LinkedList<T> = { value: T; next: LinkedList<T> | null };
function prepend<T>(value: T, list: LinkedList<T> | null): LinkedList<T> {
  return { value, next: list };
}
const l = prepend(1, prepend(2, null));
console.log(l.value, l.next?.value);

İsteğe Bağlı ve Boş Değerli Sonlandırıcılar

null ile sonlandırabilir veya next özelliğini isteğe bağlı yapabilirsiniz. İkisi de özyinelemeyi sona erdirir; seçiminizi sonu nasıl göstermek istediğinize göre yapın.

type ListA<T> = { value: T; next: ListA<T> | null };
type ListB<T> = { value: T; next?: ListB<T> };
const a: ListA<number> = { value: 1, next: null };
const b: ListB<number> = { value: 1 };
console.log(a.value, b.value);

Özyinelemeli Türler Tembel Olarak Genişletilir

TypeScript, özyinelemeli bir türü yalnızca gerçekten kullandığınız yere kadar genişletir. Tanım, sonsuz işleme neden olmadan kendisine başvurabilir.

type LinkedList<T> = { value: T; next: LinkedList<T> | null };
// Using two levels only expands two levels.
const l: LinkedList<number> = { value: 1, next: { value: 2, next: null } };
console.log(l.next?.value);

Bir Liste Üzerinde Eşleme Yapmak

Özyinelemeli bir eşleme, yapıyı koruyarak her değeri dönüştürür ve aynı şekle sahip yeni bir liste döndürür.

type LinkedList<T> = { value: T; next: LinkedList<T> | null };
function mapList<T, U>(list: LinkedList<T> | null, fn: (v: T) => U): LinkedList<U> | null {
  if (list === null) return null;
  return { value: fn(list.value), next: mapList(list.next, fn) };
}
const l: LinkedList<number> = { value: 1, next: { value: 2, next: null } };
console.log(mapList(l, x => x * 10)?.value);

Özyinelemeli Türler Neden Güçlüdür

Kendisine başvuran türler, tam tür güvenliğiyle ve tasarımınızda sabit bir derinlik sınırı olmadan keyfi biçimde iç içe geçmiş verileri, listeleri, ağaçları ve JSON verilerini modellemenizi sağlar.

type LinkedList<T> = { value: T; next: LinkedList<T> | null };
const l: LinkedList<boolean> = { value: true, next: { value: false, next: null } };
console.log(l.value, l.next?.value);

Kısa Kontrol: Özyinelemeli Türler

Özyinelemeli tür tanımlarını anlayıp anlamadığınızı sınayın.

Özet: Özyinelemeli Tür Tanımları

Özyinelemeli bir türün kendisine başvurduğunu, sonlanmak için null gibi bir temel duruma ihtiyaç duyduğunu ve bağlı listelerde gezinmek, eşleme yapmak ve liste oluşturmak için özyinelemeli işlevlerle doğal biçimde eşleştiğini öğrendiniz.

type LinkedList<T> = { value: T; next: LinkedList<T> | null };
const l: LinkedList<number> = { value: 1, next: null };
console.log(l.value);

Sıkça Sorulan Sorular

“Özyinelemeli Tür Tanımları” dersi ücretsiz mi?

Evet — “Özyinelemeli Tür Tanımları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.

“Özyinelemeli Tür Tanımları” dersinde ne öğreneceğim?

Kendilerine güvenli biçimde başvuran türler yazın. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Özyinelemeli Tür Tanımları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Özyinelemeli Tür Tanımları
  2. Ağaç Yapılarının Türünü Belirleme
  3. JSON Değer Türleri
  4. Özyineleme Derinliği ve Sınırları
← TypeScript Academy Sayfasına Dön