Haskell #12 (Guards, guards!)

--

가드는 어떤 값의 속성의 참, 거짓 여부를 테스트하기 위한 방법으로 많은 if문을 사용하는 것과 유사합니다. 가드를 사용하면 여러개의 조건문이 필요할때 좀 더 보기 좋은 코드를 작성할 수 있습니다.

Ref: Syntax in Functions-Guards, guards!

간단히 BMI를 입력받아서 비만 여부를 판단해서 출력해주는 함수를 작성하였습니다. 이 예제에서 가드를 사용하였습니다. 가드는 함수명과 파라메터 뒤에 파이프(|)를 사용해서 표시합니다. 가드는 기본적으로 boolean 입니다. 만약 True면, 해당하는 함수의 바디가 사용됩니다. 만약 False면 다음 가드로 넘어갑니다.

24.3을 입력으로 실행하면 위와 같이 정상 결과를 출력하게 됩니다. 명령형 언어의 if else문을 생각하면 가독성이 많이 좋아진 것을 확인할 수 있습니다. 가드는 이런 거대한 if else문의 좋은 대안이라고 할 수 있습니다.

마지막 가드는 대부분의 경우, otherwise가 있습니다. otherwise는 모든 조건에 대해서 만족하는 True입니다. 만약 모든 가드가 만족하지 못할때 otherwise가 없다면, 다음 패턴으로 넘어가게 됩니다. 이처럼 가드는 패턴과 함께 유용하게 활용될 수 있습니다. 만약 조건에 만족하는 가드도 없고, 매칭되는 패턴도 없다면 에러가 발생할 것 입니다.

위 예제와 같이 여러개의 파라메터를 가드에 사용할 수도 있습니다.

가드를 쓸때는 함수명과 파라메터들 뒤에 =을 사용하지 않는다는 것에 주의해야 합니다.

max 함수를 가드를 사용해서 다시 구현한 예제입니다. 여기서 가드는 한 라인으로 작성될 수 있지만, 가독성이 떨어지기 때문에 짧은 함수라도 멀티라인으로 작성하는 것을 권장합니다.

compare 함수를 작성한 예제입니다. 여기서 backtick을 사용해도 동일하게 가드를 사용할 수 있음을 확인하실 수 있습니다.

--

--