Genel Functor'lar ve Eşleyiciler
Her kapsayıcı üzerinde çalışabilen genel map işlevleri yazın.
Genel Functor'lar ve Eşleyiciler, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 4. 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.
Genel Bir Functor
Şimdi kodlamayı amacı doğrultusunda kullanıyoruz: kayıtlı herhangi bir kapsayıcı üzerinde çalışan genel bir map. URI ile parametreleştirilen Functor arayüzü tek bir yöntem bildirir.
interface Functor<F extends URIS> {
readonly URI: F;
map<A, B>(fa: Kind<F, A>, f: (a: A) => B): Kind<F, B>;
}Dizi Örneği
Bir örnek, bir URI için map işlemini uygular. Dizi örneği, yerleşik dizi yöntemiyle eşleme yapar. Kind<"Array", A> ifadesi A[] türüne çözümlenir.
const arrayFunctor: Functor<"Array"> = {
URI: "Array",
map: (fa, f) => fa.map(f)
};Dizi Örneğini Kullanma
Dizi örneğinde map çağırmak, kapsayıcı türünü koruyarak her öğeyi dönüştürür.
const doubled = arrayFunctor.map([1, 2, 3], n => n * 2);
// doubled: number[] -> [2, 4, 6]Seçenek Türü
Bir Seçenek'i bir değer veya null olarak tanımlayıp kaydedin. map işlemi işlevi yalnızca bir değer mevcut olduğunda uygular; aksi durumda null değerini olduğu gibi aktarır.
interface URItoKind<A> { Option: A | null }
type Option<A> = A | null;Seçenek Örneği
Seçenek örneği, seçenek kapsayıcısını korur: işlev değere uygulanır ve null değeri null olarak kalır.
const optionFunctor: Functor<"Option"> = {
URI: "Option",
map: (fa, f) => (fa === null ? null : f(fa))
};Seçenek Örneğini Kullanma
Aynı map biçimi artık tamamen farklı bir kapsayıcı üzerinde de çalışır. Mevcut değerler dönüştürülür; mevcut olmayan değerler olduğu gibi bırakılır.
const a = optionFunctor.map(5, n => n + 1); // 6
const b = optionFunctor.map(null, n => n + 1); // nullTek Soyutlama, Çok Sayıda Kapsayıcı
Asıl kazanım budur. arrayFunctor ve optionFunctor aynı Functor arayüzünü paylaşır. Functor<F> üzerinden yazılan kod, değişiklik yapılmadan her ikisiyle de çalışır.
function bumpAll<F extends URIS>(
F: Functor<F>,
fa: Kind<F, number>
): Kind<F, number> {
return F.map(fa, n => n + 1);
}Genel İşlevi Çağırma
bumpAll, hangi kapsayıcıyı aldığını bilmez ve bunu önemsemez. Örneği ve veriyi geçirin; sonuç kapsayıcı türünü korur.
const arr = bumpAll(arrayFunctor, [1, 2]); // number[] -> [2, 3]
const opt = bumpAll(optionFunctor, 9); // number | null -> 10Functor Yasaları
Doğru bir functor iki yasaya uyar: özdeşlik işlevinin eşlenmesi hiçbir şeyi değiştirmez ve iki işlevin sırayla eşlenmesi, bunların bileşiminin eşlenmesine eşittir. Yukarıdaki dizi ve seçenek örneklerinin ikisi de bu yasalara uyar.
// map(fa, x => x) === fa
// map(map(fa, f), g) === map(fa, x => g(f(x)))Daha Fazla Örnek Ekleme
Soyutlama açık olduğundan yeni kapsayıcılar bir URI kaydedip bir örnek sağlayarak eklenebilir. Bir Ağaç, Sonuç veya Görev, aynı genel kodla eşlenebilir hâle gelir.
// Register URI, implement Functor<"Tree">,
// and bumpAll works on trees too - no edits to bumpAllNeden Önemli
Genel functor'lar, TypeScript'teki işlevsel soyutlamalara giriş noktasıdır: applicative'ler, monad'lar ve gezinimler. Her biri Kind<F, A> üzerinde bir arayüzdür ve her kapsayıcı için örnekleri vardır. Artık fp-ts ve Effect'i mümkün kılan mekanizmayı anlıyorsunuz.
interface Monad<F extends URIS> extends Functor<F> {
of<A>(a: A): Kind<F, A>;
chain<A, B>(fa: Kind<F, A>, f: (a: A) => Kind<F, B>): Kind<F, B>;
}Hızlı Kontrol
Genel functor'ları ne kadar anladığınızı sınayın.
Özet
Kapsayıcı-genel bir map yazdınız.
Functor<F>,Kind<F, A>üzerindemapişlemini bildirir.- Dizi ve Seçenek örnekleri, bu işlemi kendi URI'leri için uygular.
bumpAllgibi genel kodlar kayıtlı herhangi bir kapsayıcıyla çalışır.- Functor yasaları, örneklerin tutarlı davranmasını sağlar; daha zengin soyutlamalar bunun üzerine kurulur.
Sırada 24. Kurs var: tür güvenli ayrıştırıcılar oluşturma.
Sıkça Sorulan Sorular
“Genel Functor'lar ve Eşleyiciler” dersi ücretsiz mi?
Evet — “Genel Functor'lar ve Eşleyiciler” 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.
“Genel Functor'lar ve Eşleyiciler” dersinde ne öğreneceğim?
Her kapsayıcı üzerinde çalışabilen genel map işlevleri 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 4. dersidir.
“Genel Functor'lar ve Eşleyiciler” 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
- TypeScript'te HKT Sorunu
- Tür Yapıcılarını Tanımlama
- Hafif HKT Kalıbı
- Genel Functor'lar ve Eşleyiciler