programing

if-return-return 또는 if-else-return을 사용하는 것이 더 효율적인가?

prostudy 2022. 5. 21. 08:52
반응형

if-return-return 또는 if-else-return을 사용하는 것이 더 효율적인가?

만약 내가 a를 가지고 있다고 가정해 보자.ifA로 진술하다.return에서 볼 때,. 효율성 측면에서 볼 때,

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

또는

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

컴파일된 언어(C) 또는 스크립트로 작성된 언어(Python)를 사용할 때 둘 중 하나를 선호해야 하는가?

그 이후return진술은 현재 기능의 실행을 종료하며, 두 형태는 동등하다(두 번째 형태는 거의 틀림없이 첫 번째 형태보다 읽을 수 있다).

두 가지 형태의 효율성은 비교가능하며, 기본 기계 코드는 다음과 같은 경우에 점프를 수행해야 한다.if어쨌든 조건은 거짓이다.

Python은 하나만 사용할 수 있는 구문을 지원한다는 점에 유의하십시오.return귀하의 경우 다음과 같은 경우:

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

Chromium의 스타일 가이드:

반품 후 다른 사용 금지:

# Bad
if (foo)
  return 1
else
  return 2

# Good
if (foo)
  return 1
return 2

return 1 if foo else 2

나는 개인적으로 피한다.else가능하면 차단한다.반전 캠페인 보기

또한, 그들은 '추가' 라인에 대해 요금을 청구하지 않는다.

"단순함이 콤플렉스보다 낫다" & "독해력이 왕"

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

이것은 통역이 신경 쓰지 않기 때문에 스타일(또는 선호)에 대한 질문이다.개인적으로 나는 함수 베이스가 아닌 들여쓰기 레벨에서 값을 반환하는 함수의 최종 진술을 하지 않으려고 한다.예제 1의 다른 하나는 기능의 끝이 있는 곳에 약간만 있는 경우 모호하게 된다.

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

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

함수의 마지막 문장으로서 하나의 반환문을 가지는 좋은 관습과 명령형 중간 결과를 피하는 좋은 기능 프로그래밍 패러다임을 모두 준수하기 때문이다.

더 복잡한 기능의 경우 가능하면 조기 복귀를 방지하기 위해 기능을 여러 하위 기능으로 분리하는 것이 좋다.그렇지 않으면 rval이라는 명령 스타일 변수를 사용하는 것으로 되돌린다.함수가 사소한 것이거나 종료 전 반환문이 오류로 인한 것이 아니라면 복수의 반환문을 사용하지 않으려고 한다.일찍 돌아오는 것은 계속할 수 없다는 사실을 강조한다.여러 하위 기능으로 분기되도록 설계된 복잡한 기능의 경우, 나는 그것들을 사례문(예: 명령어에 의해 구동됨)으로 코드화하려고 한다.

몇몇 포스터들은 작동속도에 대해 언급해왔다.실행 속도가 필요하면 Python을 사용하는 것이 가장 좋은 언어가 아니기 때문에 나는 런타임의 속도가 보조적이다.나는 나에게 중요한 코딩(즉, 오류 없는 코드 쓰기)의 효율성으로 파이썬을 사용한다.

분별력 있는 컴파일러를 사용하는 경우, 당신은 어떠한 차이도 관찰하지 말아야 한다. 이 컴파일러들은 동일한 기계 코드로 컴파일되어야 한다.

A버전은 더 간단하고 그래서 내가 그것을 사용할 것이다.

그리고 당신이 Java에서 컴파일러 경고를 모두 켜면 당신은 두번째 버전에 대한 경고를 받게 될 것이다. 왜냐하면 그것은 위험하지 않고 코드 복잡성을 증가시키기 때문이다.

코딩 스타일 관련:

언어와 상관없이 대부분의 코딩 표준은 하나의 기능에서 복수의 리턴 문구를 나쁜 관행으로 금지한다.

(개인적으로 여러 개의 반환문이 타당하다고 말할 수 있지만, 텍스트/데이터 프로토콜 파서, 광범위한 오류 처리가 있는 기능 등)

이러한 모든 산업 코딩 표준의 합의는 이 표현이 다음과 같이 작성되어야 한다는 것이다.

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.

그 질문이 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

여러 번의 수익률을 내지 못하는 스타일 문제를 잘 해결해주지

성능적인 관점에서 보면 파이톤에서는 상관없고, 나는 모든 현대 언어에 대해 같은 것을 가정할 것이다.

그것은 정말로 스타일과 가독성으로 귀결된다.두 번째 옵션(If-Else 블록)은 첫 번째 옵션보다 읽기 쉽고, 한 번의 Liner ternary 작업보다 훨씬 읽기 쉽다.

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

반응형