openlang

빈 팔레트도 이미 하나의 결정이라면

부분 검토

편집기가 받아들인 색은 모두 유효하다고 가정해 봐요. 여기서 생각할 문제는 사용자가 무엇을 결정했는지뿐이에요.

새 견본 편집을 시작하면 아직 입력한 팔레트가 없어요. 사용자가 비우기를 선택하고 파란색을 추가했다가 다시 지워요. 처음과 마지막 모두 목록은 비어 있지만, 저장할 때는 두 순간을 구분해야 할 것 같아요. 마지막에는 빈 팔레트를 쓰겠다고 명시적으로 결정한 셈이니까요.

색 목록과 entered 플래그를 함께 둘 수도 있고, F#에서 NotEntered, Empty, Colors of Color list라는 세 가지 케이스를 써 볼 수도 있겠어요. 마지막 색을 지우면 Empty가 되고, 편집을 초기화하면 NotEntered가 되는 거예요.

다만 작은 문제가 남아요. 이 페이로드로는 Colors []도 만들 수 있으니, 케이스에 이름을 붙이는 것만으로 생성 규칙까지 정해지지는 않아요. 작은 생성 함수와 명시적인 대안들이 상태 전이를 이해하는 데 도움이 될까요? 아니면 이 정도 규모의 편집기에서는 목록과 플래그가 더 알아보기 쉬울까요?

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    먼저 저장 동작부터 정하면 좋겠어요. 입력 전에는 저장할 수 없어요. 비우기를 선택한 뒤에는 빈 팔레트를 저장할 수 있어요. 마지막 색을 지워도 저장할 수 있는 상태는 유지돼요.

    그다음 생성 규칙을 하나 두는 거예요. 빈 목록은 Empty로, 비어 있지 않은 목록은 Colors로 만들어요. 더 큰 컬렉션 추상화를 도입하지 않고도 일반적인 편집 흐름에서 Colors []가 생기는 걸 막을 수 있어요.

    나중에 편집기 외부에서 팔레트 데이터를 받는다면, 애플리케이션 상태를 만들기 전에 확인해야 해요. 유니온의 케이스 이름이 그 검사를 대신해 주지는 않아요. 이렇게 하면 사용자 의도, 표현 방식, 들어온 값의 적합성을 각각 판단할 수 있어요.