2011-01-26 4 views
25

누구든지 ifunless의 차이점을 언제 설명 할 수 있습니까?차이 - 제외/

+1

'comments.empty?'가'if! comments.empty?'보다 멋지지만 else 절과 함께 사용하는 경우 :'comments.empty? then aaa else bbb end'는 역으로 상응하는 것보다 더 혼란 스러울 수 있습니다 :'comments.empty? bbb else aaa end' – Phrogz

+0

Ruby는 Python의 Zen을 따르지 않습니다. "그 중 하나가 있어야하며, 가능하면 한 가지 방법 만 가능합니다." –

답변

44

unless은 단지 부정형 if입니다. 즉, 조건이 이 아니고이 아닌 경우 포함 된 내용을 실행합니다.

unless foo? 
    # blabla 
end 

단순히 정말,

그것은 당신이 쉽게 읽을 수 무엇을 발견의 모든 문제입니다
if !foo? 
    # blabla 
end 

을 의미한다.

은 참조 : Unless, The Abused Ruby Conditional

5

unless은 간단히 if not과 같습니다. 당신이 사용하면 개인적인 취향입니다.

2

ifunless의 차이는 서로의 정확한 반대 있다는 것입니다 :

  • if이 조건하는 다음 블록 및 선택적 다른 블록 소요가, 조건이 참이면 else-block을 평가하고 그렇지 않으면 else- 블록을 평가합니다.
  • unless은 조건, then-block 및 선택적 else-block을 취하고, then 조건이 거짓이면 else 블록을 사용합니다. 그렇지 않으면 else 블록을 평가합니다.

또는 다른 말로하면 루비에서 영어와 동일한 의미입니다.

+0

사후 조건부에 대해 위의 텍스트가 오해의 소지가 있다고 여겨집니다. (둘 사이의 구별은 정확하지만, 나머지는'then' 블록이 필요하다는 것을 의미하며, 항상'else' 블록을 넣을 수도 있습니다.) – Phrogz

7

'unless'는 하나의 인수가있을 때 나에게 간단하지만 몇 개가있을 때 혼란 스럽습니다. 그리고 && 대신 ||을 사용할 경우.

"그렇지 않으면"이 내 뇌에겐 더 힘들지 않습니다. "그렇지 않다면"가 더 쉽습니다.

향후이 코드를 사용하면이 코드를 유지 관리하는 것이 어려워 질 것입니다. 그래서 나는 그렇지 않다.