아래 함수 bigOrSmall
에 int
를 넣으면 string
이 나온다.
// cpp
string bigOrSmall(int x)
{
if (x < 10)
return "small";
else
return "big";
}
하스켈로는 아래처럼 쓸 수 있다. 먼저 타입만 적어보자. Int
를 넣으면 String
이 나오는 함수이다.
bigOrSmall :: Int -> String
너무 이쁘다
함수 내용까지 같이 적어보자.
bigOrSmall :: Int -> String
bigOrSmall x = if x < 0
then "small"
else "big"
다른 언어와 별로 다를 게 없어 보인다. then
이 생소한 정도이다.
그런데 만약에 if
만 적고 else
를 적지 않으면 어떻게 될까?
C++에서는 컴파일 하는데 아무 문제가 없다.
string bigOrSmall(int x)
{
if (x < 10)
return "small"
}
물론 이렇게 하면 컴파일은 잘 되지만 실행시켰을 때 x
가 10
보다 작지 않은 경우 에러가 난다.
string bigOrSmall(int x)
{
if (x < 10)
return "small";
}
int main()
{
bigOrSmall(9); // "small"
bigOrSmall(10); // error!
return 0;
}
하스켈에서는 if
를 사용할 때 else
를 반드시 적어야 한다. 그렇지 않으면 컴파일 에러가 난다.
-- 컴파일 에러가 나는 코드
bigOrSmall :: Int -> String
bigOrSmall x = if x < 10
then "small"
이렇게 else
를 강제함으로써 프로그래머의 실수를 미연에 방지해준다. 고마워요 하스켈