groovy
그루비 진실 (진실함)
수색…
비고
Groovy는 if , while 및 for 문 에서 Java가 표준 Java 조건과 동일한 방식으로 조건을 평가합니다. Java에서는 부울 식 (부울로 평가되는 식)을 제공해야하며 결과는 평가의 결과입니다.
Groovy에서 결과는 Java의 경우와 동일합니다 (제공된 예제가 없으며 표준 Java입니다).
예제에 표시된 다른 진실성 평가 메커니즘 은 다음과 같이 요약 할 수 있습니다.
- numbers : 0 값은 false, 0이 아닌 true로 평가됩니다.
- 객체 : null 객체 참조는 false를, null 이외는 true를 참조합니다.
- 문자 : 값이 0 인 문자는 거짓으로 평가되고 그렇지 않으면 true로 평가됩니다.
- 문자열 : null이 아니고 비어 있지 않으면 문자열이 true로 평가되고, null 또는 비어 있으면 false가됩니다 (GStrings 및 CharSequences에도 적용됨).
- Collections 및 Maps ( List , Map , Set , HashSet ... 하위 클래스 포함) : 또한 크기를 고려하고 콜렉션이 null이 아니고 비어 있지 않으면 true로 평가하고 null 또는 비어 있으면 false로 평가합니다.
- 열거 형 및 반복자는 null이 아니고 더 많은 요소 (true는 그루비가 객체에 hasMoreElements 또는 hasNext 를 평가 함)이면 true로, null 또는 더 이상 요소가 없으면 false로 평가됩니다.
- Matcher : 일치하는 사람이 하나라도 있으면 true, 일치하지 않는 경우 false.
- 종결 : 종결은 종결에 의해 반환 된 결과의 평가로 평가됩니다.
asBoolean 메소드는 사용자 정의 클래스에서 재정 의하여 사용자 정의 부울 평가를 제공 할 수 있습니다.
숫자 부울 평가
숫자의 경우 0 값은 false, 0이 아닌 값은 true로 평가됩니다.
int i = 0
...
if (i)
print "some ${i}"
else
print "nothing"
"아무것도"인쇄하지 않습니다.
문자열 부울 평가
문자열 (GString 포함)은 null이 아니고 비어 있지 않은 경우 true로 평가되고 null 또는 비어 있으면 false로 평가됩니다.
def s = ''
...
if (s)
println 's is not empty'
else
println 's is empty'
인쇄 할 것입니다 : 's is empty'
콜렉션 및 맵 부울 평가
컬렉션 및 맵은 null이 아니고 비어 있지 않은 경우 true로, null 또는 비어 있으면 false로 평가됩니다.
/* an empty map example*/
def userInfo = [:]
if (!userInfo)
userInfo << ['user': 'Groot', 'species' : 'unknown' ]
user: 'Groot' , species : 'unknown'
userInfo 맵이 비어 있기 때문에 기본 userInfo로 user: 'Groot' , species : 'unknown'
을 추가합니다 (맵은 null이 아닙니다)
null 객체를 사용하면 코드가 가볍게 다르기 때문에 userInfo가 null이므로 <<을 호출 할 수 없습니다. 할당을해야합니다 (Object 부울 평가 참조).
/* an example with a null object (def does not implies Map type) */
def userInfo = null
if (!userInfo)
userInfo = ['user': 'Groot', 'species' : 'unknown' ]
그리고 null Map :
/* The same example with a null Map */
Map<String,String> userInfo = null
if (!userInfo)
userInfo = ['user': 'Groot', 'species' : 'unknown' ]
객체 불리언 값 평가
null 객체 참조는 true, null 이외의 참조를 false로 평가하지만 문자열, 컬렉션, 반복기 및 열거 형의 경우에도 크기를 고려합니다.
def m = null
if (!m)
println "empty"
else
println "${m}"
"빈"
def m = [:]
if (!m)
println "empty"
else
println "${m}"
맵은 null는 아니고 비어 있습니다.이 코드는 "empty"를 인쇄합니다.
한 후에
m << ['user' : 'Groot' ]
지도를 인쇄합니다.
[user:Groot]
사용자 정의 클래스에서 부울 평가 무시
때때로 어떤 종류의 객체를 위해 자신의 프로그램에 특정 asBoolean 정의를 갖는 것이 유용 할 수 있습니다.
/** an oversimplified robot controller */
class RunController {
def complexCondition
int position = 0
def asBoolean() {
return complexCondition(this);
}
def advanceTo(step) {
position += step
}
}
def runController = new RunController(complexCondition : { c -> c.position < 10 } )
assert runController
runController.advanceTo(5)
assert runController
runController.advanceTo(5)
// The limit has been reached : the controller evaluates to false
assert !runController
이 코드는 로봇의 위치가 10을 초과하지 않는지 점검하는 과도하게 단순화 된 로봇 컨트롤러를 보여줍니다 (조건 평가를위한 클로저 포함)
문자 평가
Character는 값이 0이 아닌 경우 true로, 0 인 경우 false로 평가됩니다.
assert ! new Character((char)0)
assert ! new Character('\u0000Hello Zero Char'.charAt(0))
assert new Character('Hello'.charAt(0))
일치 평가
Matcher는 적어도 하나의 일치 항목을 찾을 수 있으면 true로, 일치하는 항목이 없으면 false로 평가합니다.
// a match is found => true
assert 'foo' =~ /[a-z]/
// the regexp does not match fully => no match => false
assert !( 'foo' ==~ /[a-z]/ )
// a match is found => true
assert 'foo' =~ /o/
// no match => false
assert !( 'foo' =~ /[A-Z]/ )
폐쇄 평가
종결의 평가는 종결의 결과에 대한 평가입니다.
모든 규칙이 적용됩니다. 클로저가 null, 숫자 0 또는 빈 문자열, 콜렉션, 맵 또는 배열을 반환하면 false로 평가되고 그렇지 않으면 false로 평가됩니다.
// Closure return non zero number => true
assert { 42 }()
// closure returns 0 => false
assert ! ( { 0 }())
// closure returns null => false
assert !( { }())