문제

이것이 Comp-Sci 101 질문이라면 죄송합니다. 나는 분명한 것을 놓친 것인지 확실하지 않습니다.

따라서 일부 사용자 입력이 오류를 던지고 피드백을 반환하고 싶습니다. 오류는 숫자, 0-8입니다. 0은 "오류 없음"을 의미합니다. 오류가 3 인 경우 사용자에게 매우 구체적인 피드백을 제공하고 싶습니다 (숫자가 허용되지 않음). 다른 7 가지 가능성에 대해서는 스크립트를 종료하고 오류를 반영하고 싶습니다.

나는 이것을 해결하고 있었고 이것과 함께 가기로 결정했습니다.

$no_errors ($_error != 0 || $_error != 3) ? FALSE : TRUE;
if (!$no_errors)
echo $error_msg['$_error'];
$error_3 ($no_errors && $_error == 3) ? TRUE : FALSE;
if ($error_3)
   bunch of stuff happens;
else
   bunch of other stuff;

어쨌든, 나는 첫 번째 줄에서 OR 연산자를 알아 차리고 사용자 AN 및 운영자가 더 나은/더 안전 할 것이라고 생각하고있었습니다. 그러나 더 많이 생각할수록 차이가 덜 보입니다.

따라서 실제 질문은 특정 변수의 두 가지 가능성을 제거하려면, 또는 동일하거나 논리적으로/기능적으로 더 최적입니까?

도움이 되었습니까?

해결책

논리적으로 다음은 동일합니다 (내 의사 코드를 실례합니다)

(! expression_one || ! expression_two) /** this is the same as the one below **/
! (expression_one && expression_two)

기능적으로 어떤 것이 더 최적입니까? 둘 다 서로 최적입니다. 두 가지 방법 (&& ||) 첫 번째 표현식이 true (|| 케이스에서) 또는 false (&& case) 인 경우 단락을 허용합니다.

다른 팁

스위치 명령문을 사용하면 훨씬 더 읽을 수 있습니다.

switch ($_error) {
    case 0;
        nothing happens;
        break;
    case 3:
        bunch of stuff happens;
        break;
    default:
        bunch of other stuff;
        break;
}

우선, 나는 "매직 숫자"를 사용하는 것보다 오류를 식별하는 다른 방법을 사용하는 것이 좋습니다. "3"의 의미를 쉽게 잊어 버리기 때문에 유지하기가 어렵습니다. 당신의 언어가 PHP 인 것처럼 보이며, 예외를 지원합니다. 대신 사용하는 것이 좋습니다. 여기에서 자세한 내용을 읽을 수 있습니다. http://dk.php.net/exceptions

논리 연산자의 경우 실제로 "모범 사례"로 간주되는 것은 없습니다. 원하는 것을 사용하십시오. 표현이 참/거짓인지 파악하는 데 어려움이 있다면 진실 테이블을 만들어보십시오. http://en.wikipedia.org/wiki/truth_table

성능 측면에서, 평가는 대부분의 언어에서 게으르다는 것을 명심하십시오. 첫 번째 조건을 사용하거나 사용하는 경우 두 번째 조건을 평가하지 않고 True를 반환합니다. 그리고 첫 번째 조건이 False 인 경우 두 번째 조건을 평가하지 않고 False를 반환합니다.

그렇지 않으면 운영자 자체의 성능은 실제로 다르지 않습니다. 가장 읽을 수있는 것을 사용하십시오.

최고는 도움이되는 것입니다 더 빨리 코드를 읽으십시오. 여기에서 그리고 아마도 수백만 개의 다른 장소에서 만들 수있는 유일한 진정한 최적화입니다.

이것은 더 간단하게 읽는 것처럼 보일 것입니다.

  if($_error==3)
      do stuff;
    else if($_error>0)
      do some other stuff
    else
      do normal stuff

아무도 당신이 이길 수 있다는 마이크로 초를 눈치 채지 못합니다.

  1. 개인적으로 나는 그 숫자의 사용을 제거하고 대신 상수를 사용합니다. 유지 관리가 쉬운 것 외에도 코딩 자체를 훨씬 쉽게 만들고 내일 값을 업데이트 할 수 있습니다. 예를 들어 일부 상황이 3에서 숫자를 변경할 것으로 예상하면 모든 코드를 거의 살펴 봐야합니다.
  2. GKROGERS가 제안한 바와 같이, 같은 것을 달성하는 동안 스위치는 읽고 유지하기가 훨씬 쉽습니다.

성능 현명한 나는 그것들이 매우 유사하다고 생각하지만 (Wvanbergen의 게시물 참조) 행동에는 명백한 차이가 있습니다. 나는 당신의 현재 게시물이 당신이 기대하고있는 일을하지 않을 것이라고 생각합니다. 첫 줄에서 $ _error = 3이면 $ no_errors = false가 있습니다. 둘 다 만족해야 할 두 가지 조건을 확인하고있을 때 더 적절할 것입니다.

때로는 논리를 확인하는 가장 쉬운 방법은 실제로 내가 원하는 것을 실제로 말하는 것입니다. 예를 들어, "오류 코드가있는 경우 오류가 없습니다. ~ 아니다 0 그리고 ~ 아니다 3"

나는 일반적으로 이와 같은 상황에서 몇 가지 변수만으로 문장을 영어로 작성하는 방법은 논리 연산자를 결정하기위한 가장 직관적이고 정확한 방법을 제공한다는 것을 알게됩니다.

이 과정 후 코드가 지저분 해 보인다면 이것 De Morgan의 법칙에 대한 링크가 유용합니다

(a || b) =! (a && b). 그래서 그것은 실제로 차이를 만들지 않습니다

편집 : (a || b) =! (a && b)가 잘못되었습니다. 댓글에 대한 tks. 올바른 형태는 (! a ||! b) =! (a && b)입니다.

내 사과

사용하는 경우 :

$no_errors ($_error != 0 && $_error != 3) ? FALSE : TRUE;

이는 $ error! = 0 및 $ error! = 3 인 경우 $ error가 == ~ 3 및 0이 될 수 없기 때문에 유효하지 않은 로직 인 경우를 의미합니다.
위의 예에서 $ error = 0 인 경우 위의 예에서는 3 && 0이 아니기 때문에 False로 평가됩니다. 3 || 0.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top