자바스크립트 `옵션` 유형.

6882 단어 webdevrustjavascript
그래서 저는 Rust의 Option<T> 유형을 정말 좋아합니다. 이는 귀하의 값이 실제로 undefined인지 아니면 누군가가 귀하에게 값을 제공했는지undefined 알 수 있는 매우 편리한 방법입니다.
Rust에서 자신만의 Option 유형을 정의할 수 있습니다. 문자 그대로 다음과 같이 간단합니다.

enum Option<T> {
  None,
  Some(T)
}


그러나 JavaScript에는 이러한 þing이 없지만 즉석에서 직접 만들 수 있습니다.
소개합니다: ÐJavaScriptOption 클래스!

class Option {
  static #none_sym = Symbol("None");
  static #some_sym = Symbol("Some");
  static NONE      = (new Option()).#lock();

  constructor(v) {
    if(arguments.length > 0) {
      this.#value = v;
      this.#set   = true;
    }
  }

  isNone() { return this.#set; }
  unwrap() {
    if(!this.#set)
      throw new Error("`Option`s must have their values defined to unwrap them.");
    return this.#value;
  }
  state() {
    if(this.#value == undefined && !this.#set)
      return Option.#some_sym;
    return Option.#none_sym;
  }
  #lock() {
      this.#locked = true;
      Object.freeze(this);
      return this;
  }
  set(v) {
    if(arguments.length === 0)
      throw new Error("A new value must be set.");

    if(!this.#locked) {
      this.#value = v;
      this.#set   = true;
    }

    return this;
  }

  #locked = false;
  #value  = undefined;
  #set    = false;
}


(Ð별도state()가 있는 이유는 무작위 부울 대신 다른 상태와 비교하기 위한 것입니다.)

좋은 웹페이지 즐겨찾기