ESNext 자바스크립트와 타입스크립트는 화살표 함수를 제공한다.
화살표 함수의 몸통은 중괄호를 사용할 수도 있고, 생략할 수도 있다.
흥미롭게도, 중괄호 사용 여부에 따라 타입스크립트 문법이 동작하는 방식이 실행문과 표현식 문 방식으로 달라진다.
const arrow1 = (a: number, b:number): number =>{ return a+b }
const arrow2 = (a: number, b:number): number => a+b
오래전부터 프로그래밍 언어는 실행문 지향 언어와 표현식 지향 언어로 구분되어 왔다.
자바스크립트는 실행문 지향 언어이지만, ESNext와 타입스크립트는 실행문과 표현식 문을 동시에 지원한다. 이와 같은 언어를 다중 패러다임 언어라고 한다.
프로그래밍 언어에서 실행문은 CPU에서 실행되는 코드를 의미한다.
그러나 실행문은 CPU에서 실행만 될 뿐 결과를 알려주지 않는다. 실행문이 실행된 결과를 알려면 반드시 return 키워드를 사용해야 한다.
표현식 문은 굳이 return 키워드를 사용하지 않아도 된다.
실행문의 대표적인 형태는 변수에 값을 대입하는 것이다.
let x;
x = 1
반면에 x>0부분은 CPU가 평가한 후 true나 false라는 값으로 결과를 알려주지 않으면, if문이 정상적으로 동작할 수 없다.
let x = 10
if(x>0)
x = 1
그런데 만약 프로그래밍 문법이 다음과 같다면 상당히 번거로워진다.
if(return x>0)
x = 1
똑같이 CPU에서 실행되는 구문이더라도 x>0처럼 return 키워드 없이 결괏값을 반환하는 실행문이 필요하다. 이를 표현식 문이라고 구분해서 부른다.
복합 실행문은 중괄호를 사용해 다음과 같이 컴파일러로 하여금 실행문을 한 개처럼 인식하게 한다.
if(조건식){
실행문1
실행문2
}
앞서 설명한 대로 실행문은 CPU에서 실행된 결과를 알려주지 않는다.
함수 몸통을 복합 실행문으로 구현한 다음 함수는 true, false를 반환하지 않는다.
function isGrater(a: number, b:number): boolean {
a>b
}
실행문 기반 언어는 해당 문제를 해결하기 위해 return 키워드를 도입하였다.
function isGrater(a: number, b:number): boolean {
return a>b
}
단, return 키워드는 함수 몸통에서만 사용할 수 있다는 제약이 있다.
앞선 함수를 화살표 함수로 구현하면 다음과 같이 두 가지로 사용할 수 있다.
const isGrater=(a: number, b:number): boolean => {
return a>b
}
const isGrater=(a: number, b:number): boolean => a>b // return 값 생략
단, return 키워드는 복합 실행문 안에만 사용할 수 있어서, 다음과 같은 코드는 오류이다.
const isGrater=(a: number, b:number): boolean => return a>b