동물과 양파: 기본 JavaScript 생성기

14549 단어 javascript
JavaScript 생성기 함수*의 기본 구문과 사용법을 시연합니다. Replit demo here.

randomAnimalGeneratorFunc 만들기



먼저 동물(및 양파) 목록을 저장하는 생성기 함수를 만듭니다. Generator가 반복됨에 따라 임의의 동물(또는 양파!)이 산출되고 목록에서 제거됩니다.

function* randomAnimalGeneratorFunc() {
  let animals = [
    "🧅",
    "cat",
    "dog",
    "hamster",
    "bird",
    "snake",
    "turtle",
    "guinea pig",
    "horse",
    "fish",
    "mouse",
    "lemur",
    "whale",
    "crab",
  ];

  while (animals.length) {
    const i = Math.floor(Math.random() * animals.length);
    yield animals[i];
    animals.splice(i, 1);
  }
}


표준 함수yield 문과 매우 다른 return 문 뒤의 코드가 어떻게 도달하고 실행되는지 확인하십시오.

Generator를 변수에 할당


randomAnimalGeneratorFunc() 함수는 생성기 함수입니다. 호출될 때마다 변수에 할당할 수 있는 새 Generator를 반환합니다.

const randomAnimalGenerator = randomAnimalGeneratorFunc();
const anotherRandomAnimalGenerator = randomAnimalGeneratorFunc();


위의 예에서 randomAnimalGeneratoranotherRandomAnimalGenerator는 서로 다른 두 생성기입니다. animalsrandomAnimalGenerator 목록에서 항목을 제거해도 animalsanotherRandomAnimalGenerator 목록에 직접적인 영향을 미치지 않습니다.

Generator 함수의 범위 외부에서 선언된 변수에 저장된 객체 또는 배열에 대한 중첩된 참조가 있는 더 복잡한 데이터 구조가 있는 경우 이러한 참조 객체는 예상대로 Generators에서 부작용을 경험하게 됩니다.

동물 기능




const randomAnimalGenerator = randomAnimalGeneratorFunc();

const animal = () => {
  const a = randomAnimalGenerator.next();

  if (!a.done) {
    return a.value === "🧅" ? "🧅🧅🧅🧅 Onions!!!!" : a.value;
  }

  return `You're out of animals (and onions).`;
};


animal 함수는 animalsrandomAnimalGenerator 목록에서 임의의 동물을 반환합니다. 양파가 발견되면 알림을 받게 되며 RCA 보고서의 정보를 사용할 수 있습니다. 전체animals 목록을 살펴본 후에는 재설정 기능을 작성하지 않았기 때문에 다시 시작하려면 앱을 다시 로드해야 합니다.

양파 기능




const randomAnimalGenerator = randomAnimalGeneratorFunc();

const onion = () => {
  let o = randomAnimalGenerator.next();

  while (!o.done) {
    if (o.value === "🧅") {
      return "🧅🧅🧅🧅 Onions!!!!";
    }
    console.log(o.value);
    o = randomAnimalGenerator.next();
  }

  return `You're out of animals (and onions).`;
};

onion 함수는 animals 목록에 있는 모든 동물의 무작위 목록을 반환합니다. 양파를 만나면 위험을 경고하기 위해 실행이 중단됩니다. onion 함수를 두 번 실행하면 나머지 동물이 무작위 순서로 반환됩니다. animals 목록이 비어 있으면 알림이 표시됩니다.

함께 모아서




function* randomAnimalGeneratorFunc() {
  let animals = [
    "🧅",
    "cat",
    "dog",
    "hamster",
    "bird",
    "snake",
    "turtle",
    "guinea pig",
    "horse",
    "fish",
    "mouse",
    "lemur",
    "whale",
    "crab",
  ];

  while (animals.length) {
    const i = Math.floor(Math.random() * animals.length);
    yield animals[i];
    animals.splice(i, 1);
  }
}

const randomAnimalGenerator = randomAnimalGeneratorFunc();

const animal = () => {
  const a = randomAnimalGenerator.next();

  if (!a.done) {
    return a.value === "🧅" ? "🧅🧅🧅🧅 Onions!!!!" : a.value;
  }

  return `You're out of animals (and onions).`;
};

const onion = () => {
  let o = randomAnimalGenerator.next();

  while (!o.done) {
    if (o.value === "🧅") {
      return "🧅🧅🧅🧅 Onions!!!!";
    }
    console.log(o.value);
    o = randomAnimalGenerator.next();
  }

  return `You're out of animals (and onions).`;
};

randomAnimalGeneratoranimal 함수 외부에서 onion를 정의하여 두 함수가 동일한 생성기를 공유하고 animal에 의해 생성된 모든 부작용이 onion에 영향을 미치고 그 반대의 경우도 마찬가지임을 보여줍니다.

P.S. 저는 양파를 좋아합니다! 🧅

좋은 웹페이지 즐겨찾기