루비에서는 0도 참값(true)으로 본다?
★프로그래밍/Ruby :: 2016. 8. 17. 23:37C언어나 자바스크립트, 파이썬 등에 익숙해지신 분이라면 0을 false로, 0이 아닌 값을 true로 본다는 사실을 알고 계실지도 모르겠습니다.
※ (자바스크립트 말고) 자바는 if(v)의 형식일 때 v가 논리형 아니면 오류가 일어나므로 논외로 하고,
하지만,
0은 곧 거짓(false)이라는 통념은 루비에는 적용되지 않는 이야기라는 사실을 알고 계신가요?
아래 코드를 봅시다.
a = 0 if (a) puts "True" else puts "False" end
'0 = false' 통념대로라면 이 코드는 'False'라는 메시지를 출력할 것처럼 보입니다.
하지만 실제로 이 코드를 실행시키면
True
이와 같이 'False'가 아닌 'True'가 표시됩니다. 이 코드를 C언어, 파이썬, BASIC 등에 이식해서 실행하면 'False'가 나오지만 루비에서는 'True'가 나옵니다.
이는 루비가 0도 참(true)으로 보기 때문에 그렇습니다.
문자열도 마찬가지로, 빈 문자열("") 역시 루비에서는 참(true)으로 봅니다.
즉, 저 앞의 코드에서 a = 0을 a = ""로 바꿔도 역시 같은 결과가 나옵니다.
그렇다면 루비에서는 무엇을 거짓값(false)으로 보느냐...
nil과 false 이 두 개 뿐입니다. 즉, 이 두 개가 아니면 어떤 값이든 참값(true)으로 봅니다.
만약 저 상황에서 0값을 거짓값으로 규정하고 싶다면...
a = 0 if (a != 0) puts "True" else puts "False" end
이와 같이 조건식을 이용하는 방법이 있습니다.
유용한 팁이었나요? 많은 도움 되셨기를 바랍니다.
(※참고: 루비 말고도 루아(Lua) 역시 nil과 false만을 거짓값으로 규정하여 0도 참값으로 봅니다.)