Nest.JS | Monads -> อาจจะ
อาจ monad หรือที่เรียกว่าตัวเลือก monad เป็น monad ที่ใช้เพื่อแสดงการคำนวณที่อาจมีค่าหรือไม่มีค่า โดยทั่วไปจะใช้เพื่อจัดการกับความเป็นไปได้ของค่าว่างหรือค่าที่ไม่ได้กำหนดในลักษณะการทำงานและองค์ประกอบ
โดยทั่วไปแล้ว Monad ของ Maybe จะถูกนำไปใช้เป็นวัตถุที่มีสองประเภทย่อย: Justและ NothingชนิดJustย่อยมีค่า ในขณะที่Nothingชนิดย่อยแสดงถึงการไม่มีค่า
ต่อไปนี้เป็นตัวอย่างของ Maybe monad ใน JavaScript:
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รวมตัวเลขแล้วใช้mapวิธีการเพิ่มจำนวนนั้น จากนั้นคุณสามารถเชื่อมโยงหลาย ๆ สิ่งเหล่านี้Justเข้าNothingด้วยกันเพื่อสร้างการคำนวณที่ซับซ้อนยิ่งขึ้น โดยไม่ต้องตรวจสอบค่าที่มีอยู่ในแต่ละค่าด้วยตนเอง ขั้นตอน
ใน Nest.js คำว่า Maybe Monad คือ Monad ที่ล้อมรอบค่าและจัดเตรียมชุดของวิธีการสำหรับการทำงานกับค่านั้นในลักษณะการทำงาน ในขณะเดียวกันก็จัดการกับความเป็นไปได้ที่ค่าจะเป็นค่าว่างหรือไม่ได้กำหนด
ตัวอย่างวิธีใช้ Maybe Monad ใน Nest.js มีดังนี้
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;
}
}
หากต้องการแยกค่าที่ห่อ คุณสามารถใช้.getOrElse()วิธีนี้และระบุค่าเริ่มต้นเพื่อส่งคืนหากค่าที่ห่อคือnone
console.log(myService.findUserById(1).getOrElse(new User()))
คุณยังสามารถใช้.map()ฟังก์ชันเพื่อแปลงค่าที่ห่อไว้หากมีอยู่ และ.chain()ฟังก์ชันเพื่อเชื่อมโยงการคำนวณหลายรายการเข้าด้วยกัน
สิ่งสำคัญคือต้องสังเกตว่าตัวอย่างนี้เป็นเพียงตัวอย่างพื้นฐานและไม่ได้แสดงให้เห็นถึงพลังทั้งหมดของ Monads ในการเขียนโปรแกรมเชิงฟังก์ชัน Monads สามารถใช้เพื่อจัดการกรณีต่างๆ เช่น การจัดการข้อผิดพลาด การผูกมัดการคำนวณหลายรายการ และอื่นๆ คุณควรเข้าใจปัญหาและใช้กรณีต่างๆ ก่อนใช้ Monads
รายการชิ้นส่วน:





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)