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를하는 한 가지 방법을 사용하는 것이 더 간단하고 일관성있게됩니다.
  • 나중에 else 문을 추가해야하는 경우 if를 if로 변경해야합니다. 이미 if 인 경우 더 쉽습니다.
  • unless 문 내부의 논리가 복잡 해지면 "unless (x == 5 && y! = 7)와 같은 이상한 코드로 끝날 수 있습니다. 두 번째 검사에서 두 번 음수가 있기 때문에 이것은 이상합니다.
  • 물건을 무효화하는 다른 방법, 즉 x! = 5가 있습니다.
  • 다른 언어와 더 일관성이 있습니다. 나는 비언어적 인 성명서가있는 다른 어떤 언어도 모른다. 나는 이것에 대한 아주 좋은 이유가 있다고 생각한다.

perl에는 실제로 if 문을 쓰는 4 가지 방법이 있습니다. if, then 및 then을 시작 대신 줄 끝 부분에 놓습니다. 나는 다른 langauges와 일치하는 단일 한 일관된 방법을 선호한다.

0.02 달러에 불과합니다.




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




Links