2013-12-09 6 views
2

Ruby는 unlesselsif 문을 제공합니다. 유사한 elsunless 성명이 있다고 가정하는 것이 자연스러운 것처럼 보이지만 그렇지 않습니다. 이것에 대한 특별한 이유가 있습니까?왜 Ruby에는`elsunless` 문이 없습니다?

설명하기 위해이 문은 이와 같은 코드를 허용합니다.

unless broken 
    # do something 
elsunless done 
    # do something else 
end 

는이 코드가 ifelsif을 사용하여 다시 작성 될 수 있다는 것을 알고 있어요,하지만 unless를 사용하는 경우에 명확하다.

+7

의미가 직관적이지 않기 때문에 '다름없는'것이 없습니다. –

+1

사실, 키워드'otherwise'와'otherwisif'를 추가 할 것입니다. 그것은'else'보다 훨씬 더 잘 울립니다. 생각해보십시오. "true이면"hi "그렇지 않으면"low "end로 끝납니다. – mjnissim

+0

제 생각에'unless..else'는 특히 코드에 익숙하지 않은 사람들에게 당신의 머리를 맡기는 것이 어렵습니다. 'if..else'를 사용하여 다시 작성하여 개선되지 않는 경우를 본 적이 없습니다. 다른 옵션을 추가하면 상황이 더욱 복잡해집니다. –

답변

5

에서보세요 if/else 문 뒤에 논리는 일반적으로 :

if exception_a 
    # do exception stuff 
else 
    # do standard stuff 
end 

unless exception_a 
    # do standard stuff 
else 
    # do exception stuff 
end 

이 경우 unless을 추가하는 것은 매우 유용 할 수 있습니다 :

하나 개의 예외를 갖는 코드를 전환 할 수 있습니다. 또한 내가 unless에 대해 좋아하는 점은 예외를 확인하는 동안 표준 작업 만 할 수 있다는 것입니다.

여기에 까다로운 부분 제공 :

여러 예외 갖는합니다 (else 블록을 생략 할 수 있습니다)

if exception_a 
    # do exception stuff a 
elsif exception_b 
    # do exception stuff b 
else 
    # do standard stuff 
end 

unless exception_a 
    # do standard stuff 
elsunless exception_b 
    # do ??? 
else 
    # do exception stuff 
end 

완전히 읽을 수있는 게다가을, 나는에 논리적 의미를 찾을 수 없습니다 elsunless 블록 : 거기에 어떤 코드를 넣으시겠습니까? 그게 몇 가지 예외 물건이나 표준 코드가 될지 모르겠다.

그런 블록에서 사용할 코드를 더 설명 할 수 있습니다.

2

루비는 이미 else, elsifunless, 그래서 elsunless에 할 필요가 정말 존재, if 제공? 코드에서 거대한 매머드처럼 보입니다. 내 생각에 Matz은 루비 구문에 문을 추가하는 이유를 알지 못합니다. 또한 일부 루비 코더는 Perl에서 상속 된 unless 명령문 사용을 제외한 루비 코딩 표준을 조사합니다.

나를 위해, 나는 언어에서 unless 키워드를 완전히 제거 할 것입니다.

styling guide

+1

나는 엉덩이에 '젤리스가 없다'고 통증이있을 것이라는 데 동의하지만, 나는 언어를 제외하고는 지금까지 제거하지 않을 것이다. 당신이 그것에 매달릴 때, 그것은 매우 유용하게됩니다. –

+1

'if!'가 훨씬 더 짧고 물론 우리는 항상 DeMorgan의 규칙을 사용할 수 있습니다. =) –

+0

'그렇지 않다'는 훨씬 더 짧아서 상징이 아닙니다. 기호는 코드를 읽는 과정에서 지나치게 쉽게 건너 뛸 수 있으며주의를 기울여야하지만 명확하게 나타내려고합니다. 의미 상! 흥분을 의미하지, '아니다'는 의미가 아닙니다. 평등하지 않은 표현에는 귀중합니다. 그냥 내 의견. – vgoff