불리언의 낱말 — recipe가 정하는 참·거짓 표기
시트에 「참」이라고 적는 방법을 recipe가 더할 수 있게 하는 설계입니다. 예·아니오,
참·거짓, 켜짐·꺼짐 같은 것들입니다.
1. 문제 — 표기가 코드에 고정되어 있던 것
불리언 셀이 읽던 낱말은 Y·YES·TRUE와 N·NO·FALSE 여섯 개이고, 그것이
CookingContext의 switch 문에 고정되어 있었습니다.
이 목록은 영어입니다. 한국어로 시트를 채우는 팀은 세 가지 중 하나를 하게 됩니다.
| 하는 것 | 비용 |
|---|---|
Y·N으로 적습니다 | 시트를 읽는 사람이 매번 옮겨 읽습니다. 시트는 디자이너가 읽는 문서입니다 |
예·아니오로 적고 수식으로 Y·N을 만듭니다 | 컬럼이 두 배가 되고, 수식이 하나 깨지면 값이 조용히 거짓이 됩니다 |
1·0으로 적습니다 | 받아들여집니다. 다만 「1이 참인가 거짓인가」는 시트를 보고는 알 수 없습니다 |
셋 다 시트를 읽기 어렵게 만들고, 셋 다 도구가 낱말 두 개를 더 알면 없어집니다.
2. 결정 — recipe의 낱말 목록
결정. recipe에 참과 거짓의 낱말을 적습니다. 기본은 내장 낱말에 더하는 것이고, 내장을 끄는 스위치가 따로 있습니다.
"TrueWords": ["예", "참", "켜짐", "O"],
"FalseWords": ["아니오", "거짓", "꺼짐", "X"],
"BuiltinBoolWords": true
| 키 | 기본값 | 하는 일 |
|---|---|---|
TrueWords | [] | 참으로 읽을 낱말 |
FalseWords | [] | 거짓으로 읽을 낱말 |
BuiltinBoolWords | true | Y·YES·TRUE·N·NO·FALSE를 함께 읽을지 |
더하는 것이 기본인 이유
적지 않은 recipe가 하나도 바뀌지 않아야 하기 때문입니다. 대체가 기본이면 예 하나를 더하려던
recipe가 TRUE를 잃고, 그것을 적어 둔 시트가 그날 오류를 냅니다.
대체가 필요한 자리도 있습니다. 시트에 정확히 무엇만 허용할지 정하려는 팀에게는 내장 낱말이
검사를 무르게 만드는 것이므로, BuiltinBoolWords를 false로 두면 적은 낱말만 읽습니다.
소스 항목별 재정의를 두지 않는 이유
DefaultDelimiter와 TimeZone은 소스 항목마다 다시 적을 수 있습니다. 「이 워크북들이 어떻게
적혔는가」가 항목마다 다르기 때문입니다. 불리언의 낱말도 성질은 같지만 두지 않았습니다.
| 판단 | 근거 |
|---|---|
| 더해도 충돌하지 않습니다 | 구분자는 항목마다 하나를 골라야 하지만, 낱말은 여러 개를 함께 읽을 수 있습니다. 두 팀의 표기를 전부 적어 두면 양쪽이 읽힙니다 |
| 배선이 레이아웃 파서 4개에 걸칩니다 | 항목별 설정 은 SheetLayout을 거쳐 파서마다 셀 읽기로 전달됩니다. 얻는 것이 없는 자리에 그 배선을 두지 않습니다 |
필요가 생기면 그때 더합니다. 지금 두지 않는 것이 나중에 두는 것을 막지 않습니다.
3. 읽는 순서
셀 하나를 읽을 때 판정은 이 순서입니다.
| 차례 | 보는 것 | 결과 |
|---|---|---|
| 1 | - | 값 없음. 컬럼이 bool?일 때만 |
| 2 | 빈 셀 | 거짓 |
| 3 | 낱말 표 | 참 또는 거짓 |
| 4 | 숫자 | 0이 아니면 참 |
| 5 | 그 밖 | 오류 |
대소문자를 가리지 않고, 앞뒤 공백을 제거한 뒤에 봅니다. yes·Yes·YES가 모두 참인 것은
이전과 같고, recipe가 적은 낱말도 같게 취급합니다.
숫자 판정이 낱말보다 뒤인 것이 중요합니다. 낱말 표가 먼저이므로, recipe가 O를 참으로
적으면 O는 언제나 참입니다.
4. 거부하는 선언
recipe의 선언 자체가 잘못된 경우입니다. 전부 워크북을 하나도 열기 전에 보고합니다.
| 선언 | 이유 |
|---|---|
| 양쪽 목록에 같은 낱말 | 예가 참이면서 거짓일 수는 없습니다. 내장 낱말과 반대 뜻으로 겹치는 것도 같습니다 — TRUE를 FalseWords에 적는 것 |
| 빈 낱말 | 빈 셀은 이미 거짓이고, 빈 낱말을 적는 것은 그것을 다시 적는 것이 아니라 목록에 실수가 있는 것입니다 |
| 숫자로 읽히는 낱말 | 0이나 1.5는 4번 규칙이 이미 정합니다. 낱말로 적으면 두 규칙이 같은 셀을 두고 갈립니다 |
- | 값 없음의 표시입니다. 낱말로 적어도 3번에 닿지 못하므로 조용히 아무 일도 하지 않습니다 |
BuiltinBoolWords가 false인데 목록이 둘 다 빈 것 | 읽을 수 있는 낱말이 하나도 없습니다. 숫자와 빈 셀만 남고, 그것을 의도한 recipe는 없습니다 |
5. 오류 메시지
낱말도 아니고 숫자도 아닌 셀의 메시지는 무엇이 받아들여지는지를 그 자리에서 나열합니다. 목록이 recipe마다 다르므로, 고정된 문장으로는 답이 되지 않기 때문입니다.
`Ture` is not a boolean.
True: Y, YES, TRUE, 예, 참. False: N, NO, FALSE, 아니오, 거짓.
A number is true when it is not zero, and an empty cell is false.
at items.xlsx : Item : D8
6. 적용 범위
| 자리 | 적용 |
|---|---|
bool · bool? 셀 | 전부 |
bool[]의 원소 | 전부. 원소 하나가 하나의 낱말입니다 |
| 컬럼 제약·검증 규칙의 값 | 아닙니다. 시트의 데이터 셀이 아니라 선언 자리입니다 |
| 생성되는 코드·데이터 파일 | 아닙니다. 나가는 것은 언제나 그 언어의 참·거짓입니다 |