Fonksiyonel Programlama İçin TypeScript Nasıl Kullanılır

TypeScript, güçlü tipleme ve gelişmiş tip çıkarımı gibi işlevsel programlamayı tamamlayan güçlü özellikler sunar. Bu makale, işlevsel programlama prensiplerini etkili bir şekilde uygulamak için TypeScript'in nasıl kullanılacağını araştırır.

Fonksiyonel Programlamanın Temel İlkeleri

Fonksiyonel programlama değişmezliği, saf fonksiyonları ve daha yüksek mertebeli fonksiyonları vurgular. Bu prensipler, sağlam ve sürdürülebilir kod oluşturmak için TypeScript'te etkili bir şekilde uygulanabilir.

Değişmezlik

Değişmezlik, verilerin oluşturulduktan sonra değiştirilmemesi kavramını ifade eder. TypeScript, tür tanımları ve yardımcı türler aracılığıyla değişmezliği zorunlu kılabilir.

type ReadonlyUser = {
  readonly id: number;
  readonly name: string;
};

const user: ReadonlyUser = {
  id: 1,
  name: 'Alice',
};

// The following line will result in a TypeScript error
// user.id = 2;

Saf Fonksiyonlar

Saf fonksiyonlar, aynı girdi verildiğinde her zaman aynı çıktıyı üreten ve yan etkileri olmayan fonksiyonlardır. TypeScript'in tür sistemi, fonksiyonların saflığa uymasını sağlamaya yardımcı olur.

const add = (a: number, b: number): number => {
  return a + b;
};

const result = add(2, 3); // 5

Yüksek Dereceli Fonksiyonlar

Yüksek düzeyli işlevler, diğer işlevleri argüman olarak alan veya bunları sonuç olarak döndüren işlevlerdir. TypeScript, doğru şekilde kullanıldığından emin olmak için bu işlevleri yazabilir.

const applyFunction = <T>(fn: (x: T) => T, value: T): T => {
  return fn(value);
};

const increment = (x: number): number => x + 1;

const result = applyFunction(increment, 5); // 6

Fonksiyon Kompozisyonu

Fonksiyon kompozisyonu, yeni bir fonksiyon oluşturmak için birden fazla fonksiyonu birleştirmeyi içerir. TypeScript'in tip sistemi, oluşturulan fonksiyonların doğru tiplere sahip olduğundan emin olmak için kullanılabilir.

const compose = <T, U, V>(f: (arg: U) => V, g: (arg: T) => U) => (x: T): V => {
  return f(g(x));
};

const double = (x: number): number => x * 2;
const square = (x: number): number => x * x;

const doubleThenSquare = compose(square, double);

const result = doubleThenSquare(3); // 36

Tür Çıkarımı ve Genel Türler

TypeScript'in tür çıkarımı ve jenerikleri, güçlü tür güvenliğini korurken yeniden kullanılabilir işlevsel bileşenler oluşturmaya olanak tanır.

const map = <T, U>(arr: T[], fn: (item: T) => U): U[] => {
  return arr.map(fn);
};

const numbers = [1, 2, 3];
const doubled = map(numbers, (x) => x * 2); // [2, 4, 6]

Çözüm

TypeScript, tür güvenliği ve ifade edici türler sağlayarak işlevsel programlamayı geliştirir. Değişmezlik, saf işlevler ve daha yüksek düzeyli işlevler gibi ilkeleri uygulayarak, TypeScript ölçeklenebilir ve sürdürülebilir uygulamalar oluşturmak için kullanılabilir.