Yuva.JS | Monadlar -> Belki

Jan 27 2023
Option monad olarak da bilinen Maybe monad, bir değeri olan veya olmayan hesaplamaları temsil etmek için kullanılan bir monaddır. Tipik olarak, boş veya tanımsız değerlerin olasılığını işlevsel ve birleştirilebilir bir şekilde işlemek için kullanılır.

Option monad olarak da bilinen Maybe monad, bir değeri olan veya olmayan hesaplamaları temsil etmek için kullanılan bir monaddır. Tipik olarak, boş veya tanımsız değerlerin olasılığını işlevsel ve birleştirilebilir bir şekilde işlemek için kullanılır.

Maybe monad tipik olarak iki alt türü olan bir nesne olarak uygulanır: Justve Nothing. Alt Justtip bir değer tutarken, Nothingalt tip bir değerin yokluğunu temsil eder.

İşte JavaScript'teki Belki monadına bir örnek:

class Just {
  constructor(value) {
    this.value = value;
  }
  map(f) {
    return new Just(f(this.value));
  }
  chain(f) {
    return f(this.value);
  }
  getOrElse(defaultValue) {
    return this.value;
  }
}

class Nothing {
  map(f) {
    return this;
  }
  chain(f) {
    return this;
  }
  getOrElse(defaultValue) {
    return defaultValue;
  }
}

JustÖrneğin, bir sayıyı saran bir sayı oluşturabilir ve ardından bu sayıyı artırmak için yöntemi kullanabilirsiniz, daha sonra her birinde bir değerin varlığını manuel olarak kontrol etmek zorunda kalmadan daha karmaşık bir hesaplama oluşturmak için bunlardan birden fazlasını ve birlikte mapzincirleyebilirsiniz. adım.JustNothing

Nest.js'de Maybe Monad, bir değeri saran ve bu değerle işlevsel bir şekilde çalışmak için bir dizi yöntem sağlarken değerin boş veya tanımsız olma olasılığını da ele alan bir Monad'dır.

İşte Maybe Monad'ı Nest.js'de nasıl kullanabileceğinize dair bir örnek:

import { Injectable } from '@nestjs/common';
import { Maybe, some, none } from 'fp-ts/lib/Maybe';

@Injectable()
export class MyService {
  public findUserById(id: number): Maybe<User> {
    const user = findUserInDB(id);
    return user ? some(user) : none;
  }
}

Sarmalanan değeri ayıklamak için, yöntemi kullanabilir .getOrElse()ve sarmalanan değerin döndürülmesi için varsayılan bir değer sağlayabilirsiniz.none

console.log(myService.findUserById(1).getOrElse(new User()))

.map()İşlevi, varsa sarılmış değeri dönüştürmek için ve .chain()birden çok belki hesaplamasını zincirleme işlevi için de kullanabilirsiniz .

Bu örneğin temel bir örnek olduğunu ve işlevsel programlamada Monad'ların tam gücünü göstermediğini not etmek önemlidir. Monad'lar, hata işleme, çoklu hesaplamaları zincirleme ve daha fazlası gibi çeşitli durumları ele almak için kullanılabilir, monad'ları uygulamadan önce sorunu ve kullanım durumlarını anlamak en iyisidir.

parça listesi: