05-2. 선언형 프로그래밍

euNung·2022년 6월 7일
0

타입스크립트

목록 보기
4/10
  • 명령형 프로그래밍
    : 좀 더 CPU 친화적인 저수준 구현 방식
    : 시스템 자원의 효율을 최우선으로 생각
let sum = 0
for(let i = 1; i <= 100; i++) {
  sum += i
}
console.log(sum)    // 5050
  • 선언형 프로그래밍
    : 인간에게 좀 더 친화적인 고수준 구현 방식
    : 범용으로 구현된 함수를 재사용하면서 문제를 해결
const range = (from: number, to: number): number[] => from < to ? [from, ...range(from+1, to)] : []

const reduce = <T>(array: T[], callback: (result: T, val: T) => T, initValue: T): T => {
    let result: T = initValue;
    for (let i = 0; i < array.length; i++) {
        const value = array[i];
        result = callback(result, value);
    }
    return result;
}

const filter = <T>(array: T[], callback: (value: T, index?: number) => boolean): T[] => {
    let result: T[] = [];
    for (let i:number = 0; i < array.length; i++) {
        const value = array[i];
        if(callback(value)) {
            result = [...result, value]
        }
    }
    return result;
}

const map = <T, U>(array:T[], callback: (value: T, index?: number) => U): U[] => {
    let result: U[] = []
    for (let i: number = 0; i < array.length; i++) {
        const value = array[i];
        result = [...result, callback(value, i)]
    }
    return result
}

const numbers: number[] = range(1, 1 + 100);
// 배열 합 구하기
const result1 = reduce(numbers, (result, value) => result + value, 0)

// 홀수 합 구하기
const isOdd = (n: number): boolean => n % 2 !== 0
const result2 = reduce(filter(numbers, isOdd), (result, value) => result + value, 0);
console.log(result2);

// 짝수 합 구하기
const isEven = (n: number): boolean => n % 2 === 0
const result3 = reduce(filter(numbers, isEven), (result, value) => result + value, 0)
console.log(result3)

// 배열 요소의 제곱 합 구하기
const result4 = reduce(map(numbers, value => value * value), (result, value) => result + value, 0)
console.log(result4);

profile
프론트엔드 개발자

0개의 댓글