Perl 조건에 대해 'if'대 'unless'사용


Answers

하나의 수수께끼의 경우를 제외하고는 단 하나의 통어론이 if ! . 더 명확하고 풍부한 표현력을 갖춘 코드를 작성할 수 있습니다. 이 목표를 달성 할 때 사용되어야하며, 목표를 달성 할 때 사용하지 않아야합니다.

루프에서 흐름 제어에 가장 유용 unless 찾을 수 있습니다. 예

while (<$fh>) {
    next unless /\S/;
    # ...
}

간단한 부정에 대해서 나는 그것이 부정되는 것보다 더 명확하다는 것을 안다. 그것은 그 선도를 놓치기 쉽다 ! 코드를 읽을 때.

unless ($condition) {
    do_something();
}

if (!$condition) {
    do_something();
}

하지만 그게 아니라면 쓰지 마라.

후위 (postfix) 형식에서는 코드를 통해 예상되는 경로가 무엇인지에 대한 힌트를 제공합니다.

do_normal_thing() unless $some_unlikely_condition;

1) 평가 된 마지막 표현식이 다르므로 명시 적 return 없이 서브의 작동에 영향을 미칠 수 있습니다.

Question

Perl 코드가 unless if 최대한 활용하기위한 지침은 무엇입니까? 어떤 상황에서 하나 또는 다른 것을 선호해야하는 강력한 이유가 있습니까?




나는 한 시간 동안 최근에 누군가에게 두 개의 중첩 된 '절'이 어떻게 작동하는지 설명하려고 애썼지 만 부울 논리가있는 if 문으로 그것들을 반전 할 필요없이 해독하기가 어려웠습니다.

영어로 변환하려고하면 안내하는 데 도움이됩니다.

않는 한 간단한 작동합니다. 예를 들어.

'네가 조용하지 않으면 내가 너를 무시할거야.'

unless ($quiet) {
    ignore();
}

나는 이것이 똑같이 잘 작동한다고 생각하지만

'네가 조용하지 않으면 너를 무시하겠다.'

if (not $quiet) {
    ignore();
}

복잡해지기 시작하면 부정 행위가 있습니다.

'네가 시끄 럽지 않으면 내가 너를 무시할거야.'

unless ( ! $noisy) {
    ignore();
}

훨씬 더 잘 쓰여졌습니다.

'네가 시끄러운 사람이라면 나는 너를 무시할 것이다.'

if ($noisy) {
    ignore();
}

따라서 네거티브가있는 경우 '제외'를 사용하지 마십시오.

'else else'를 사용하지 마십시오.

unless ($quiet) {
    ignore();
}
else {
    give_a_sweet();
}

'너는 조용하지 않으면 너를 무시하겠다. 그렇지 않으면 내가 너에게 단 것을 줄 것이다'

조건을 반대로 변경하십시오.

if ($quiet) {
    give_a_sweet();
}
else {
    ignore();
}

'네가 조용하면 나는 네게 단 것을 줄 것이다. 그렇지 않으면 너를 무시하겠다.'

하나 이상의 상태로, 그것은 지저분 해집니다.

unless ($quiet and not $fidgit) {
    punish();
}

'너는 조용히하지 않으면 안돼, 너를 벌하겠다.'

(미안하다. 나의 이해력은 여기에서 실패하고있다!)

다시 한번, 그것을 부정합니다.

if (not $quiet or $fidgit) {
    punish();
}

'네가 조용하지 못하다면, 또는 네가 현혹하면 내가 너를 벌하겠다.'

가장 간단한 경우조차도 '사용하지 않는'문제는 종종 (혼자서 또는 outhe로

나는 당신이해야 할 때 또는 사용해서는 안되는 것을 명확히하기를 바랍니다.

(다른 의견이없는 한?)




어쩌면 개인적인 견해 일 수도 있지만, if 조건이!




나는 이런 종류의 질문에 대한 동기를 이해하고 있지만 엄지 손가락의 구체적인 규칙을 unless 실제로는 그런 것을 사용하지 않는 것이 현명하다고 생각하지 않습니다. Perl의 많은 보조 구문과 마찬가지로 프로그래머가 자신의 재량에 따라 명확하게 설명 할 수 있도록 편의를 제공합니다. 필자는 "Programming Perl"에서 리드 개발자가 한 것보다 더 많은 것을 보았습니다. 더 높은 목적이나 합리화는 없습니다. 필자는 이러한 기교에 대한 의문점을 잘 알고 있지만, 코드 사용을 강조하는 유일한 제약은 코드를 명확하게 만드는 광범위한 목적에 부합한다는 것을 보는 것입니다. 그렇다면 모든 것이 잘됩니다. 코드가 이해할 수 있는지 여부를 인식하는 것은 그 자체로 직관적이며 기본 제공 수정 자 / 연산자 / 전체 구문의 모든 뉘앙스와 관련하여 지나치게 일반화 된 사용 조건으로 축소 될 수 없으며 대규모 그룹 프로젝트에서 제약 조건 및 지침이 필요한 경우 나는 머리카락을 잘게 쪼개는 것이 이치에 맞지 않을 것이라고 생각합니다.