programing

PHP 코딩 스타일 반환(스위치/케이스)

goodjava 2022. 11. 11. 23:34

PHP 코딩 스타일 반환(스위치/케이스)

우리는 팀을 위해 새로운 코딩 스타일의 가이드라인을 구현하려고 합니다.ph codesniffer는 다음과 같은 "break"가 발견되지 않을 때 스위치 케이스 문에 경고를 출력합니다.

switch ($foo) {   
    case 1:
      return 1;   
    case 2:
      return 2;   
   default:
       return 3; 
}

를 사용해야 하는 정당한 이유가 있습니까?

   switch ($foo) {
       case 1:
         return 1;
         break;
   }

끊어진 적이 없어?

말은 break이 할 때return switch.

이렇게 명료하게 입니다.breaks to everycase방어적인 프로그래밍 연습으로요

switch ($foo) {
    case 1:
        return 1;
        break;

    case 2:
        return 2;
        break;
}

에서 입니다.case 1스테이트먼트를 하면 return 스테이트먼트를 수 .break.

경우 가 로로 that로 .case 2.

switch ($foo) {
    case 1:
        somethingDifferent();

    case 2:
        return 2;
        break;
}

케이스 스테이트먼트를 생략하는 것은 조금 이례적인 일이기 때문에, 코드에 코멘트를 추가해 의도적인 것임을 나타낼 필요가 있습니다.

switch ($foo) {
    case 1:
        somethingDifferentAndWeWantToDoCase2AsWell();
        // fallthrough

    case 2:
        return 2;
        break;
}

많은 방어적 프로그래밍 연습과 마찬가지로 코드를 혼란시켜 읽기 어렵게 만드는 코드 블러트(bloat)가 가치가 있는지 없는지의 균형을 맞춰야 합니다.

"php codsniffer is printing a warning" p면면 、 " 면snsn codsniffer 、 PHP の p"" a a a a a 。'아, 아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.break 1회 return하지만 전혀 읽을 수 없기 때문에 말이 안 된다.코드는 정상입니다.

이것 좀 봐.

$fun = function(int $argument): string {
    switch ($argument) {
        case 1:
            return "one";
        case 2:
            return "two";
        default:
            return "more than two";
    }
};
$str = $fun(4); // return "more than two"

내 생각에 이것은 더 간단하고 좋은 것 같습니다.줄 수가 적어 = > 유지 보수하는 코드가 적어집니다:-)

당신의 질문에 대답하자면, 아무것도 하지 않는 무언가를 가질 이유가 없습니다.해 보세요, ...returnbreak"잊지 마세요"라고 말하는 것도 같은 영향을 미칠 것이다.리고그 그하 하하하,, ,???

나중에 사용하기 위해 var를 설정할 필요가 없는 한, 저는 당신이 가지고 있는 접근방식은 완벽하게 괜찮다고 제안합니다.나는 그것을 보고 2초 안에 그 코드의 의도를 알았다.지지 having break혼란을 야기할 뿐입니다.

딱 맞는 사이즈는 없어요.올바른 접근법은 시나리오에 적합한지에 따라 달라집니다. 에 합니다.case가지고 있다break옳은 길일 수도 있고, 어쩌면 그냥 돌아오는 게 말이 될 수도 있어요.

 
 


답변의 기타 제안에 대한 일부 관찰:

1) break 후에return에 변경되면 할 수 을 의미합니다.

코드는 가능한 한 명확하고 읽기 쉬워야 합니다.또, 장래의 변경을 용이하게 하는 방법으로 코드를 작성할 수도 있습니다.하지만 간단한 일에서는switch하지 않습니다. 즉, 가 없습니다.case (나중에 추가 )return ★★★★★★★★★★★★★★★★★」break.

사 a를 하면 약약 in면면면면면면면면면면면면면면면면면면면 in in in in in in.return"not's not not not anything" (없음을 알 수 없음) 이 경우 이는 심각한 실수이며 코딩의 어느 부분에서나 발생할 수 있습니다.노 갓차 체크가 널 구해줄거야장래의 가능성에 대해서는 매우 신중하게 코딩해야 합니다.그 가능성은 결코 일어나지 않을 수도 있고, 다른 일이 일어날 수도 있고, 결국 몇 년 동안 쓸모없는 코드를 유지하게 될 수도 있기 때문입니다.

같은 맥락에서 이것은 미래의 변화를 위한 안전망이라고 주장되었다 - 만약 당신이 그것을 제거하면?return로 그 .break제제 제거 ???

이 스위치 스테이트먼트가 생사여부의 시나리오라고 해도, 정말로 심각한 코드라고 해도, 반환 후에 「무익한」브레이크를 추가하는 것은 반대합니다.코드 작업을 하고 있는 사람이 누구든 그들이 뭘 하는지 알고 있는지 확인하세요 충분한 시선이 코드를 검토하고 완전히 테스트했습니다
그렇게 심각하다면, 허술한 탈선범을 잡기 위해 제안된 안전망보다 더 나은 점검을 할 수 있을 겁니다.

복귀 후 브레이크가 안전망을 더한다고 주장하는 것은 코딩이나 테스트가 제대로 이루어지지 않았다는 것을 의미합니다.만약 이것이 유용하다고 생각되는 안전망이라면, 잠재적으로 더 심각한 장소에 코드에 많은 버그가 있을 수 있습니다.

"Defense Programming"의 Wiki 기사는 다음과 링크되어 있지만 여기서는 관련이 없습니다.

방어적 프로그래밍은 예상치 못한 상황에서 소프트웨어의 기능을 계속 유지하도록 의도된 방어적 설계의 한 형태입니다.

breakin은 예기치 않은 상황의 시나리오도 아니고 방어적인 프로그래밍도 아닙니다.코딩이 나쁘기 때문에 변경할 때 올바르게 코딩되지 않을 경우를 대비해서 백업 코드로 코드를 버리면 됩니다.코딩에 대한 접근법이 너무 안 좋네요."누군가가 제거하면 돌려주지 않는다"는 주장은 대소문자 오타가 있거나 대소문자 쓰는 것을 잊거나...

return반환 실패를 피하기 위해 "방어적" 코드를 작성하지 않습니다.그것은 PHP가 고장났다는 것을 의미하며, 당신은 그것을 충족시키기 위해 당신의 코드를 안전망으로 채워야 한다.그건 네가 훨씬 더 높은 레벨에 있는 거야.

2) break 후에return하게

하지만 그건 분명히 틀렸어.return그래서 쉬는 일은 없을 거예요.무슨 이 일어날지 확실하지 않은 한 내가 그 의도를 놓쳤는지 궁금해 하는 것은 스크래치 헤드타임이다. 하지만 내가 뭔가를 놓치지 않았는지 확실히 하기 위해 그것을 곰곰이 생각해 보는 순간이 올 것이다.

「」가 있는 것은 .return 다음에 또 한 번.breakcase가 없습니다.break아무것도 하지 않습니다.논리적으로 볼 수 없기 때문에 보고, 유지하고, 파악해야 하는 것은 무의미한 코드입니다.

명시적인 것이 핵심 목표인 경우, 그리고 그 목표는break a a areturn은 변수를 것 break스위치에서 절단 후 변수를 반환합니다.
예를 들어 @RageZ가 https://stackoverflow.com/a/1437476/2632129에 응답합니다.

 

3) 변수를 설정하고 switch 문이 완료된 후 반환

이 방법에는 전혀 문제가 없지만 변수에 값을 저장할 필요가 없다면(나중에 사용 등) 다른 작업을 위해 시간을 낭비할 필요가 없을 때 즉시 되돌리는 것이 좋습니다.

이는 명확한 의도를 보여줍니다. 케이스가 일치하는 즉시 값을 반환하십시오.

내게 훨씬 더 좋은 해결책이 있다.위의 스위치 상태에 대해서는 아래 코드를 따르십시오.

$result = 3; // for default case
switch ($foo) {   
    case 1:
      $result = 1;
      break;  
    case 2:
      $result = 2;
      break;    
   default:
      // do nothing
}
return $result;

에러가 발생하지 않고, 코드도 컨셉에 문제가 없습니다.

완벽한 코딩에 대한 전문가는 아니지만 검증자가 그런 것을 선호할 것 같습니다.

switch ($foo) {   
    case 1:
      $ret =  1;   
      break;
    case 2:
      $ret = 2;
      break;   
   default:
       $ret = 3

}
return $ret

return in case 스테이트먼트를 사용하여 코드의 흐름을 끊는 것은 그다지 좋은 방법이 아니라고 생각합니다.그래서 검증자가 중단은 없다고 하는 거죠

카테고리에서의 질문입니다만, 잘 모르겠습니다만…죄송합니다.

PHP 매뉴얼(http://us3.php.net/manual/en/control-structures.switch.php):

PHP는 스위치블록이 종료될 때까지 또는 break 스테이트먼트를 처음 볼 때까지 스테이트먼트를 계속 실행합니다.케이스의 스테이트먼트 리스트 끝에 브레이크 스테이트먼트를 쓰지 않으면 PHP는 다음 케이스의 스테이트먼트를 계속 실행합니다.예를 들어 다음과 같습니다.

<?php
switch ($i) {
    case 0:
        echo "i equals 0";
    case 1:
        echo "i equals 1";
    case 2:
        echo "i equals 2";
}
?>

여기서 $i가 0이면 PHP는 모든 echo 문을 실행합니다!$i가 1일 경우 PHP는 마지막 두 개의 에코 문을 실행합니다.$i가 2일 경우에만 예상되는 동작('i=2'가 표시됩니다)이 표시됩니다.따라서 break 문을 잊지 않는 것이 중요합니다(특정 상황에서는 일부러 break 문을 제공하지 않는 것이 좋습니다).

언급URL : https://stackoverflow.com/questions/1437461/php-coding-styles-return-in-switch-case