IT

if-return-return 또는 if-else-return을 사용하는 것이 더입니까?

lottoking 2020. 8. 2. 17:15
반응형

if-return-return 또는 if-else-return을 사용하는 것이 더입니까?


if이 존재 가정 합니다 return. 효율성 관점에서

if(A > B):
    return A+1
return A-1

또는

if(A > B):
    return A+1
else:
    return A-1

언어 (C) 또는 펼쳐 언어 (Python)를 사용할 때 서로 선호해야합니까?


return명령문이 현재 함수의 실행을 종료 하고 두 형식은 동일하지만 두 번째 형식은 첫 번째 형식보다 읽기입니다.

두 형식의 효율성은 기본적으로 머신 코드는 if조건이 거짓 이면 점프를 수행해야 합니다.

은 파이썬 return당신의 경우에 하나의 문장 만 사용할 수있는 문법을 지원합니다 :

return A+1 if A > B else A-1

에서 크롬의 스타일 가이드 :

반품 후 다른 것을 사용하지 않습니다.

# Bad
if (foo)
  return 1
else
  return 2

# Good
if (foo)
  return 1
return 2

return 1 if foo else 2

코딩 스타일과 관련하여 :

언어에 관계없이 대부분의 코딩 표준은 단일 함수에서 여러 개의 리턴 문을 나쁜 습관으로 금지합니다.

(개인적으로는 여러 가지 반환 문이 의미가있는 몇 가지 경우가 많은 말하고 싶습니다 : 텍스트 / 데이터 프로토콜 파서, 광범위한 오류 처리 기능 등)

모든 산업 코딩 표준의 표현을 다음과 같이 코딩해야한다는 것입니다.

int result;

if(A > B)
{
  result = A+1;
}
else
{
  result = A-1;
}
return result;


효율성과 관련하여 :

문제의 위 예와 두 가지 예는 모두 효율성에서 완전히 동일 합니다. 모든 경우에 머신 코드는 A> B를 비교 한 다음 A + 1 또는 A-1 계산으로 분기 한 다음 그 결과를 CPU 또는 스택에 저장해야합니다.

편집하다 :

출처 :

  • MISRA-C : 2004 규칙 14.7, 차례로 인용 :
  • IEC 61508-3. 3 부, 표 B.9.
  • IEC 61508-7. C.2.9.

현명한 컴파일러를 사용하면 차이가 없어야합니다. 동등하므로 동일한 기계어 코드로 컴파일해야합니다.


버전 A는 더 간단해서 제가 사용하는 것입니다.

그리고 Java에서 모든 컴파일러 경고를 켜면 두 번째 버전에 대한 경고가 표시됩니다. 이는 불필요하고 코드가 복잡해지기 때문입니다.


질문에 python 태그가 있다는 것을 알고 있지만 동적 언어를 언급하므로 루비에서 if 문에는 실제로 반환 유형이 있으므로 다음과 같은 작업을 수행 할 수 있다고 언급해야한다고 생각했습니다.

def foo
  rv = if (A > B)
         A+1
       else
         A-1
       end
  return rv 
end

또는 암시 적 반환도 있기 때문에

def foo 
  if (A>B)
    A+1
  else 
    A-1
  end
end

여러 번의 수익이 발생하지 않는 스타일 문제를 아주 잘 해결합니다.


저는 개인적으로 else가능하면 블록을 합니다. 참고 항목 안티 경우 캠페인

또한 그들은 라인에 대해 '추가'를 청구하지 않습니다.

"단순함이 복잡한 것보다 낫다" & "가독성이 왕이다"

delta = 1 if (A > B) else -1
return A + delta

다음과 같이 생각하십시오.

if (a > b):
    output = a + 1

output = a - 1

return output

이것과 비교 :

if (a > b):
    output = a + 1
else:
    output = a - 1

return output

첫 번째 예는 작동하지 않는 반면 두 번째 예는 잘 작동합니다. 성능이 동일하므로 제 생각에는 읽기 쉽기 때문에 예제 2를 사용하는 것이 좋습니다.


통역사가 상관하지 않기 때문에 이것은 스타일 (또는 선호도)의 문제입니다. 개인적으로 함수 기반이 아닌 들여 쓰기 수준에서 값을 반환하는 함수의 최종 진술을하지 않으려 고합니다. 예제 1의 else는 함수의 끝이 약간만 모호해집니다.

선호도에 따라 다음을 사용합니다.

return A+1 if (A > B) else A-1

함수의 마지막 문 (이미 언급했듯이)으로 단일 return 문을 사용하는 좋은 규칙과 명령형 중간 결과를 피하는 좋은 함수 프로그래밍 패러다임을 모두 준수합니다.

더 복잡한 함수의 경우 가능한 경우 조기 반환을 피하기 위해 함수를 여러 하위 함수로 나누는 것을 선호합니다. 그렇지 않으면 rval이라는 명령형 스타일 변수를 사용하도록 되돌립니다. 함수가 사소하거나 끝 이전의 return 문이 오류의 결과 인 경우가 아니면 여러 return 문을 사용하지 않으려 고합니다. 일찍 돌아 오는 것은 계속할 수 없다는 사실을 강조합니다. 여러 하위 함수로 분기되도록 설계된 복잡한 함수의 경우 케이스 문 (예 : dict에 의해 구동)으로 코딩하려고합니다.

일부 포스터는 작동 속도를 언급했습니다. 실행 속도가 필요한 경우 Python이 사용하기에 가장 좋은 언어가 아니기 때문에 런타임 속도는 저에게 부차적입니다. 저는 Python을 코딩의 효율성 (예 : 오류없는 코드 작성)으로 사용합니다.

참고 URL : https://stackoverflow.com/questions/9191388/it-is-more-efficient-to-use-if-return-return-or-if-else-return

반응형