본문 바로가기
DEVELOPMENT

Functional JS 함수형 프로그래밍

by Z@__ 2020. 9. 2.
반응형

함수형 프로그래밍이란?

더보기

자료 처리에 있어서 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임

명령형 프로그래밍은 상태를 바꾸고, 함수형 프로그래밍은 함수의 응용을 중요시 함

 

Not functional(명령형) vs functional(함수형)

더보기

명령형 함수는 프로그램의 상태의 값을 바굴 수 있는 부작용이 있다.

이 때문에 명령형 함수는 참조 투명성이 없고, 같은 코드라도 프로그램의 상태에 따라 다른 결과값을 낸다.

반대로 함수형 코드의 출력값은 그 함수에 입력된 인수에만 의존하므로 명령형 함수의 부작용이 없다.

Not Functional

var name = "Anjana";
var greeting = "Hi, I'm ";
console.log(greeting + name);

=> "Hi, I'm Anjana"

Functional

function greet(name) {
	return "Hi, I'm " + name;
}
greet("Anjana");

=> "Hi, I'm Anjana"

 


 함수형 프로그래밍의 3가지 특징

1. 순수함수

2. 익명함수

3. 고계함수

 


순수함수란?

더보기

인풋값만을 이용하여 항상 같은 결과가 리턴되도록 하는 프로그램

부작용이 없는 함수로, 함수의 실행이 외부에 영향을 끼치지 않아 스레드 안전하고, 병렬계산이 가능하다

Not Pure

var name = "Anjana";
function greet() {
	console.log("Hi, I'm " + name);
}

Pure

function greet(name) {
	return "Hi, I'm " + name;
}

 


고차함수란?

더보기

함수를 Input / Output으로 사용하는 것

function makeAdjectifier(adjective) {
	return function (string) {
		return adjective + " " + string;
	};
}

var coolifier = makeAdjectifier("Cool");
coolifier("conference");
=> "Cool conference"

 

피해야될 항목

1. 반복을 피해라 (use map, reduce, filter)

 

2. avoid mutability data(use immutable data)

Mutation(bad!):
	var rooms = ["H1","H2","H3"];
	rooms[2] = "H4";
	rooms;
=> ["H1","H2","H4"]
NoMutation(good!):
	var rooms = ["H1","H2","H3"];
	var newRooms = rooms.map(function (rm) {
		if (rm == "H3") { return "H4"; }
		else { return rm; }
	});

	new Rooms; => ["H1","H2","H4"]
	rooms; => ["H1","H2","H3"]

Persistennt data structures for efficient immutability ( Mori, Immutable.js)

수정할 수 없는 데이터를 트리를 이용하여 기존데이터와 변경된 데이터를 연결하는 방법

FB libraries for js

- mori

- immutable.js

- Underscore

- Lodash

- Ramda

반응형

댓글