지연 시퀀스 조작에 대한 (다소) 보편적인 접근 방식
6008 단어 manipulationstreamlazycollection
array.map(mapper).filter(predicate)
~ 안으로
array.reduce(() => {
// Oh my god what do I do?
}, [])
N 루프의 추가 비용을 피하기 위해?
저와 같이 이러한 방법의 표현력을 절대적으로 좋아하는 대부분의 사람들은 각자의 언어로 솔루션을 찾았습니다.
그것은 모두 훌륭하지만 모두 완전히 다른 인터페이스를 가지고 있으며 일부는 확장하기 더 어렵습니다.
만약 우리가 일을 하는 방법이 한 가지만 있을 수 있다면 어떨까요?
프로그래밍 언어 간 통합 인터페이스에 대한 나의 시도를 소개하겠습니다: Universal Couroutine Based Lazy Sequence Manipulation .
이 멋진 단어는 언어가 생성기(또는 더 나은 코루틴!)를 지원하는 경우 의사 코드를 선택한 언어에 적용하여 이를 구현할 수 있음을 의미합니다.
덜 운이 좋고 제너레이터나 코루틴에 액세스할 수 없는 사람들을 위해 이 라이브러리를 대신 반복자만 사용하도록 조정하는 방법이 있습니다.
이제 예를 들면 다음과 같습니다.
const results = Stream.range(10)
.skip(5)
.take(100)
.map(x => 3*x - 5)
.filter(x => x % 4 === 0)
.map(x => x * 2)
.take(5)
.toArray();
console.log(results); // [32, 56, 80, 104, 128]
//// Strictly equivalent (in complexity) to
const results = [];
let count = 0;
for(const item of someMagicalIteratorRangeToSavePerformances(10, 115)){
if(count >= 5)
break;
const alpha = 3*item - 5;
if(alpha % 4 === 0){
const beta = alpha * 2;
results.push(beta);
count++;
}
}
console.log(results);
쓰기 쉽고 읽기 쉽고 우리가 사랑하는 모든 것.
라이브러리를 작성하는 것이 정말 간단하고 직관적이므로 가능한 한 사용 가능하게 만드는 것을 목표로 합니다. 모든 기여에 감사드립니다.
Reference
이 문제에 관하여(지연 시퀀스 조작에 대한 (다소) 보편적인 접근 방식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/voltra/a-somewhat-universal-approach-to-lazy-sequence-manipulation-541h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)