JavaScript(ES2018)에서 매년 256일째 실시#프로그래머의 날

나는 트위터에서 매년 256일이 # 프로그래머의 날이라는 코드를 보았다.
원래의 개발 언어는 불분명하지만, 차량 단말기로도 이동할 수 있는 자바스크립트를 이식해 보자.
async/await와 비동기 망원경을 사용해 보십시오.
    while (everyYear) {
    if (today().dayNumber == 256) {
        celebrate("Programmers' Day");
        }
    }
https://twitter.com/TRIAD_Japan/status/1172412070769258496.
하면, 만약, 만약...
256일째 "프로그램머즈데이"축하회가 계속 이어질 것 같아요.
어디에 무게가 있어야 합니까?
그리고 256일 이외의 일을 감안하면, while (everyYear)의 부분에 가중치를 넣는다
하루에 한 번만 while 문장을 실행하는 것이 타당하다는 설명이다.
매일 처리everyYear 이 변수명?이용한 원래의 명명 규칙은
수수께끼지만 무슨 의도가 있다고 생각해서 직접 이식하기로 했어요.

1.async/await 구현 시


JavaScript 마이그레이션에서 최초while (everyYear)는 기호입니다.
변수가 아닌 함수 호출로 everyYear 을 변경할 수 있다면, async/await에서 실행할 수 있습니다.
원래while (everyYear)while (await everyYear())입니다.
const sleep = s => new Promise(r => setTimeout(r, s));
const celebrate = m => console.log(m);
const today = () => ({dayNumber: 256}); // TODO
const everyYear = async () => await sleep(1000) || true;
(async () => {

    // ここから
    while (await everyYear()) {
        if (today().dayNumber == 256) {
            celebrate("Programmers' Day");
        }
    }

})();
1년을 기다리는 것이 힘들기 때문에 이곳에서 시연을 위해 1초마다'프로그래머데이'를 축하합니다.
Top-level await이 실현되면 (async () => {})();를 절약할 수 있을 것이다.
실행 결과: (node v10 및 Chrome77을 통해 동작 확인됨)
Programmers' Day
Programmers' Day
Programmers' Day
단, while (await everyYear()) { 부분에 관하여
동사await의 목적어는 everyYear로 읽을 수 있기 때문에 영어로는 읽기 어렵다.
읽기 어려운 코드는 안전한 적이기 때문에 그다지 좋지 않다.

2. 비동기식 소데이터로 구현 시


또는 비동기 생성기async function*라는 주문과 for-await-of 문법을 사용한다면everyYear를 비동기 프로그램의 변수로 사용할 수 있기 때문에 함수 호출의 괄호()를 제거할 수 있습니다.
원래while (everyYear)for await (safety of everyYear)처럼.
const sleep = s => new Promise(r => setTimeout(r, s));
const celebrate = m => console.log(m);
const today = () => ({dayNumber: 256}); // TODO
const everyYear = (async function* () {
    while (true) yield await sleep(1000) || true;
})();
let safety;
(async () => {

    // ここから
    for await (safety of everyYear) {
        if (today().dayNumber == 256) {
            celebrate("Programmers' Day");
        }
    }

})();
for-of 문법에서 받아들여야 할 변수가 있기 때문에 우리는 safety를 시도했다.while (true) yield await sleep(1000) || true;의 일행이 편해요.
비동기 생성기async function*는 아직arrowfunction으로 쓸 수 없는 것 같아 아쉽다.
만약 for await safety of everyDay 매일의 안전을 찾기 위해 활동하는
256일째만 프로그래머 데이를 축하하는 분위기에 합류할 수 있다.
위의 JavaScript 마이그레이션 라이센스는 원본 소스 코드 라이센스를 따릅니다.

[여담]
이렇게 말하면 https://hack4.jp/relatedinfo/t-shirt/1st/
Hack for Japan의 티셔츠에 기재된 코드에 대해 이야기를 나눌 때 함께 코드를 댓글로 남겨주세요.
나는 몇 가지 언어로 직접 행동할 수 있다는 느낌을 고려한 것을 기억한다.
    while (Japan.recovering) {
        we.hack();
    }
사고를 방지하기 위해서는 원본 코드를 논평하는 것이 중요하다.

좋은 웹페이지 즐겨찾기