희렌버핏

화살표 함수 본문

Web/JavaScript

화살표 함수

Oliviakim 2020. 4. 20. 19:05

1. 일반적인 함수

function key(){
return 'abc123';
};

const key = () => {
return 'abc123';
};

const key = () => 'abc123';

 

2. 매개변수 2개 이상

function greet(first, last){
return `안녕하세요, ${capitalize(first)} ${capitalize(last)}님`;
};

const greet = (firts, last) => {
return `안녕하세요, ${capitalize(first)} ${capitalize(last)}님`;
};

const greet = (firts, last) => `안녕하세요, ${capitalize(first)} ${capitalize(last)}님`;

 

3. callback 함수

function capi(name){
return name[0].toUpperCase() + name.slice(1);
}

function app1(name, callback){
return callback(capi(name));
}

app1("abcde", function (name){
return `안녕, ${name}!`;
});

//"안녕, Abcde!"


//***화살표 함수로 변경하면
app1("abcde", name => `안녕, ${name}!`;);

 

4. 부분 적용 함수

const instructors = [
    {
        name: '짐',
        libraries: ['미디어교육정보 도서관']
    },
    {
        name: '새라',
        libraries: ['기념 도서관','문헌정보학 도서관']
    },
{
        name: '엘리엇',
        libraries: ['중앙 도서관']
    }
];

const findByLibrary = library => instructor => {
return instructor.libraries.includes(library);
};

const librarian = instructors.find(findByLibrary('미디어교육정보 도서관'));
//내부 함수에 요소를 주는 방식으로 쓸 수 있는게 아닐까?
//instructors.find(findByLibrary('미디어교육정보 도서관')(요소));

console.log(librarian);
/*
 {
	name: '짐',
	libraries: ['미디어교육정보 도서관']
 }
*/

 

5. 고차 함수 (다른 함수를 반환하는 함수)

- 매개 변수를 가둘 수 있다. (원래의 인수에 접근할 수 있게 해두고 함수 실행을 마칠 수 있다 / 함수의 의도를 명확하게 유지할 수 있다)

- 배열 메서드와 나머지 매개변수에 도움을 줄 수 있다.

//1. return 문자 사용
const first = discount => {
return price => {
return price * (1 - discount);
}
};

//2. return 제거
const first = discount => price => price * (1 - discount);

const second = first(0.1);
//first 함수가 첫번째 return 전까지 수행된다.

second(100);
//first로 discount(0.1)는 이미 설정되어 있고
//price(100)를 받아와 second 함수가 수행됨

 

- 두 개의 다른 매개변수 집합을 가진 단일 함수로 변환

const first = discount => price => price * (1 - discount);

first(0.1)(100);
//90

 

6. 부분 적용 함수

6.1 단일 책임 매개 변수 (중복되는 두개의 매개변수를 사용, 마지막 매개변수만 변경해서 쓸 수 있다)

- 여러 정보 정의

const school = {
hours: '8 a.m. - 8 p.m',
address: 'Seoul'
};

const manager = {
name: '홍길동',
phone: '010-1234-1234'
};

const program = {
name: 'Field day',
room : 'schoolyard',
hours : '2 - 6'
}

const exhibit = {
name: 'Graduation exhibitions',
contact: 'Olivia'
}

- 여러 정보를 가지고 하나의 정보로 만드는 함수

function mergeInfo(school, manager, event){
const {hours, address} = school;
const {name, phone} = manager;
const defaults = {
hours,
address,
constact: name,
phone
};

return {...defaults, ...event};
//겹치는 요소는 마지막에 선언한 것으로 덮어진다
//(event가 defaults보다 우선순위가 높은듯)
}

const programInfo = mergeInfo(school, manager, program);
const exhibitInfo = mergeInfo(school, manager, exhibit);

- 하나의 정보로 만든 함수를 고차 함수로 변경

function mergeInfo(school, manager){
const {hours, address} = school;
const {name, phone} = manager;
const defaults = {
hours,
address,
constact: name,
phone
};

return program => {
//겹치는 요소는 마지막에 선언한 것으로 덮어진다(event가 defaults보다 우선순위가 높은듯)
return {...defaults, ...event}
};
}

const programInfo = mergeInfo(school, manager)(program);
const exhibitInfo = mergeInfo(school, manager)(exhibit);

 

6.2 반환된 함수 재사용

- '원본'과 '결과값'을 배열 쌍으로 연결 => 인터페이스를 간결하게 유지해야 할 때 유용

const colors = getColors('banana','apple','peach');
//['yellow','red','pink']

//함수로 반환한 값을 다시 재사용?
const zip = (...first) => (...second) => {
return {first.map((item,i) => [item, second[i]]);
};

zip('banana','apple','peach')(...colors);
//[
// ["banana", "yellow"]
// ["apple", "red"]
// ["peach", "pink
//]

 

6.3 반복함수 저장하여 새로운 함수로 호출해 사용

- 매개변수를 나눠서 먼저할당할 것과 나중에 할당할 것을 설정할 수 있는듯.

function mergeInfo(school, manager){
const {hours, address} = school;
const {name, phone} = manager;
const defaults = {
hours,
address,
constact: name,
phone
};

return program => {
//겹치는 요소는 마지막에 선언한 것으로 덮어진다(event가 defaults보다 우선순위가 높은듯)
return {...defaults, ...event}
};
}

const setMerge = mergeInfo(school, manager);
const programInfo = setMerge(program);
const exhibitInfo = setMerge(exhibit);

 

6.4 매개변수로 함수 넣어서 사용하기

- filter 안에 함수를 밖에서 제어할 수 있고, 유효범위도 제어 가능

const dog = [
{
이름: '미미',
무게: 10,
견종: '사냥개',
지역: '서울',
색상: '검정색'
},
{
이름: '보보',
무게: 90,
견종: '말티즈',
지역: '부산',
색상: '흰색'
},
{
이름: '바바',
무게: 40,
견종: '말티즈',
지역: '대구',
색상: '갈색'
}
]

function getDogNames(dogs, filterFunc){
return dogs.filter(filterFunc).map(dog => dog["이름"])
}

const weightCheck = weight => dog => dog["무게"] < weight;

getDogNames(dog, weightCheck(20));
//["미미"]

 

7. 커링함수

- 인수가 하나만 있어야 하는 함수를 작성할 때 좋다.

7.1 특정 조건을 입력하여 name을 출력

const dog = [
{
이름: '미미',
무게: 10,
견종: '사냥개',
지역: '서울',
색상: '검정색'
},
{
이름: '보보',
무게: 90,
견종: '말티즈',
지역: '부산',
색상: '흰색'
},
{
이름: '바바',
무게: 40,
견종: '말티즈',
지역: '대구',
색상: '갈색'
}
]

function getDogNames(dogs, filterFunc){
return dogs.filter(filterFunc).map(dog => dog["이름"])
}

const identity = field => value => dog => dog[field] == value;
const colorCheck = identity('색상');
const stateCheck = identity('지역');

getDogNames(dog, colorCheck('흰색'));
//["보보"]
getDogNames(dog, stateCheck('부산'));
//["보보"]

7.2 모든 조건을 충족하거나 하나만 충족하여 name 출력

const dog = [
  {
    이름: "미미",
    무게: 10,
    견종: "사냥개",
    지역: "서울",
    색상: "검정색",
  },
  {
    이름: "보보",
    무게: 90,
    견종: "말티즈",
    지역: "부산",
    색상: "흰색",
  },
  {
    이름: "바바",
    무게: 40,
    견종: "말티즈",
    지역: "대구",
    색상: "갈색",
  },
];

const identity = field => value => dog => dog[field] == value;

const colorCheck = identity("색상"); //제일 먼저 수행됨, field까지만 넣어줌
const stateCheck = identity("지역"); //colorCheck 다음으로 수행됨, field까지만 넣어줌

function allFilters(dogs, ...checks) { //다음 형태로 두개의 함수가 들어옴 /* (dog) => {...} */
  return dogs
    .filter(dog => checks.every(check => check(dog)))
    //dog를 하나씩 가져와서 checks 안에 들어있는 함수를 하나씩 수행한다.
    //colorCeck 먼저 수행하고 조건에 맞으면 stateCheck를 수행
    //colorCheck 조건에 안맞으면 다음 dog를 가져오고 stateCheck는 넘어간다.  
    .map((dog) => dog["이름"]);
}

allFilters(dog, colorCheck("흰색"), stateCheck("부산"));
// 왼쪽에서 부터 함수 차례대로 identity를 수행하면서 value까지만 넣어줌

function anyFilters(dogs, ...checks) { //다음 형태로 두개의 함수가 들어옴 /* (dog) => {...} */
  return dogs
    .filter(dog => checks.some(check => check(dog)))
    //colorCheck 맞으면 다음 dog를 가져온다.
    //colorCheck 안맞으면 stateCheck를 한다.
    .map((dog) => dog["이름"]);
}

allFilters(dog, colorCheck("검정색"), stateCheck("대구"));
//['미미','바바']

 

'Web > JavaScript' 카테고리의 다른 글

Object (객체) 메소드  (0) 2020.03.26
HTML/CSS/JS 올인원 패키지  (0) 2019.09.26
git bash 명령어 정리  (0) 2019.09.03
자바스크립트 - 객체 생성  (0) 2019.08.21
java 환경변수 설명  (0) 2019.08.13