- 명령형 프로그래밍
: 좀 더 CPU 친화적인 저수준 구현 방식
: 시스템 자원의 효율을 최우선으로 생각
let sum = 0
for(let i = 1; i <= 100; i++) {
sum += i
}
console.log(sum)
- 선언형 프로그래밍
: 인간에게 좀 더 친화적인 고수준 구현 방식
: 범용으로 구현된 함수를 재사용하면서 문제를 해결
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);