#cppcon16 Using Types Effectively / Ben Deane

1 minute read

nil

nil

왜 복잡할까? ConnectionState에 따라 유효한 멤버 변수가 달라진다. 예를 들면 Connected 상태일 때만 m_id 변수가 유효하다. 하지만 구분 없이 모두 정의했다. 선언만으로 모든 정보를 알 수가 없다. 호출하는 코드를 봐야 한다. 아~ Connected 상태로 변경하고 m_id를 할당하는구나.

std::variant 클래스를 사용한 코드는 단순하다. 코드 선언에 모든 정보가 담겨있다. 명료하다.

nil

nil

타입에 대한 정의를 다르게 했다고 디스하려는 게 아니다. 표현할 수 있는 값의 집합으로 바라보자.

이 정의로 바라보면 안 보이던 게 보인다. 머릿속에서 딱 집어서 표현할 수 없었던 것. 복잡성이 보인다. 위에서 예로 든 Connection 구조체를 보면 std::variant 클래스를 사용해서 가능한 값을 + 연산으로 낮췄다. 다른 예제는 + 연산이 아니라 * 연산으로 가능한 값을 계산해야 한다.

그리고 partial function도 보이기 시작한다. 어라 실패까지 합치면 257개가 돼야 하는데. 현재 256개만 표현할 수 있네. total function으로 바꾸려면 boost::optional 같은 걸 발라야 하나?

nil

nil

nil

nil

nil

퀴즈 재미있다. 얼마나 많은 값을 가질 수 있는가?

nil

nil

nil

nil

타입으로 제약을 만드는 패턴. 타입으로 만들어서 잘못된 데이터가 input으로 들어갈 리가 없다. 컴파일 에러 발생.

nil

그다음엔 이름 짓는 퀴즈. type signature를 보고 이름을 짓는다. 크크. 퀴즈 풀다가 나도 함정에 걸렸다. 맞다. partial function. 벡터가 비었을 때, 부재를 나타낼 수 있는 값이 없다.

nil

퀴즈 재미있었다. Ben Deane 아저씨는 퀴즈 디자인도 잘한다. 지루한 거 없이 다 재미있었다. type signature만 보고도 어떤 함수인지 대답할 수 있었다. partial function인지도 타입만으로 알 수도 있었다.

nil

타입 믿고 가자.

자료