우선 이 개념 정리는 이 사이트의 내용을 바탕으로 정리했습니다!
truthy- true는 아니지만 true 처럼 '평가된다' (Values that evaluate to True are considered Truthy.)
falsy- false는 아니지만 false 처럼 '평가된다' (Values that evaluate to False are considered Falsy.)
위에서 if 문 뒤에 별도의 조건은 없지만 위 구문은 다음과 같은 형태를 가집니다.
식1 and 식1 and 식1 == True
일 때 pass 다른 경우 즉 하나라도 false인 경우 else의 구문이 실행이 됩니다.
첨에는 regEXP_email~~ == None and regEXP_pw~~ == None and regEXP_phone~~ == None
이런식으로 적었는데 이 개념을 알고 나면 그렇게 쓸필요가 없었습니다.
이렇게 적게되면 물론 boolean 값을 좀 더 정확하게 비교하면서 결과를 얻을 수 있지만 원하는 결과를 얻을 때 좀 더 간략하게 적을 수 있다면 적는것이 좋은 프로그래밍이기 때문에 tryty falsy value를 적용하는 것이 좀 더 낫다고 할 수 있습니다. (앞으로 T/F value)라 칭하겠습니다.
특히 다른 분의 코드를 같이 보면서 한 가지 더 발견한 사실이 있는데(허락받았습니다 ㅎㅎ ) falsy와 False는 다르다는 것입니다.
이 사실은 코드를 작성하신 분이 계속 예외케이스에 걸리지 않고 제대로 출력이 된다고 같이 디버깅하는 과정에서 발견(?)하게 되었습니다. 아마도 False와 None이 같기때문에 True가 나오고 그때 예외 메시지가 나올 것을 생각한 것 같습니다.
위 코드를 보면 p.match(email) == False
라는 구문이 있습니다. 정규식에서 match를 썼을 때 그 값이 없다면 None
을 반환합니다.
위에 보는 것처럼 None과 False는 엄연히 다릅니다. 그렇기 때문에 예외로 처리가 되지 않았던 것입니다.
T/F value는 언어마다 속하는 값이 다르기 때문에 사용하기 전에 자신이 사용하는 언어에서 어떤 값을 가지는지 확인하는 것을 추천드립니다. (ex. javascript -[] -truty/ python- [] falsy)
확인을 하는 방법은 파이썬에서는 bool(object)
를 통해 확인해볼 수 있습니다.
저는 파이썬을 중심으로 정리하겠습니다.
truty :
- object (by documentation)
- non-empty sequences or collections (list,tuple, string,dictionary,set)
- 0이 아닌! Numerlic value
- True
falsy:
- empty sequences or collections ([], (), "", {}, set(), range(0))
- zero of any numeric type (integer : 0, float: 0.0 , complex :0j)
- Constants (None,False)
특히 object의 경우, 위 예시에서 같은 변수라도 그 오브젝트에 들어가는 값에 따라서 그 값의 boolean 값이 결정되는 것을 확인가능합니다.
truty :
- object ( all string escept empty string)
- ALL sequences or collections (array, object) - 빈객체 포함!! ([], {})
- 0이 아닌! Numerlic value
- True
falsy:
- EMPTY-string ("")
- zero (integer : 0, NaN-not a number-)
- null(빈객체이지만 falsy) , undefined
자바스크립트는 isboolean같은 함수가 없어서 if 문으로 확인하거나 함수를 정의해서 확인
booleancheck 함수 정의
null !== {}
null !== []
위의 연산의 결과를 잘못 예상하여 결과를 받은 것처럼 T/F value간의 연산 결과는 빠르게 예상은 힘든데요. 그래서 연산한 결과를 정리하려고 합니다.
특히 핵심이 되는 None
의 경우를 중심으로 살펴보면 다음과 같습니다!
none은 falsy한 값이지만 그 의미는 아예 값이 없다는 것을 의미하기 때문에 값이 존재하는 0이나 False와는 다릅니다. 그래서 bool(None == 0)
,bool(None == False)
의 값이 False가 나오는 것입니다.