IIf

IIf

컴퓨팅에서 IIf(Immediate[1] if의 약자)는 Visual Basic 프로그래밍 언어 및 ColdFusion Markup Language(CFML)의 여러 에디션 및 첫 번째 파라미터의 평가에 따라 두 번째 또는 세 번째 파라미터를 반환하는 스프레드시트함수입니다.이것은 조건식과 유사한 조건식의 예입니다.

구문

IIf 함수의 구문은 다음과 같습니다.

IIf(expr, true part, false part)

다음 3가지 파라미터가 모두 필요합니다.

  • expr은 평가하는 표현입니다.
  • truepartexpr의 평가가 true를 반환할 경우 IIf 함수가 반환하는 내용을 정의합니다.
  • falsepartexpr 평가가 false를 반환할 경우 IIf 함수가 반환하는 내용을 정의합니다.

많은 언어에는 동일한 목적을 달성하기 위한 연산자가 있으며, 일반적으로 조건부 연산자(또는 3진 연산자)로 불리며, 가장 잘 알려진 것은 C, C++ 및 관련 언어에서 사용되는 ?:입니다.IIf 함수의 문제들 중 일부는, 나중에 논하듯이, 조건부 연산자와 함께 존재하지 않는다. 왜냐하면 언어는 단순히 피연산자를 라이브러리 함수에 전달하는 것이 아니라, 피연산자의 유형과 지연 평가를 자유롭게 검토할 수 있기 때문이다.

이러한 예에서는 수학식을 평가하고 결과에 따라 두 문자열 중 하나를 반환합니다.

result = IIf (5 < 10, "Yes it", "No it not") 'Yes it is'를 반환합니다.
결과 = IIf(2 + 2 = 5, "정답", "틀림") ' "틀림"을 반환합니다.

비판

효율성.

왜냐면IIf는 라이브러리 함수이며, 항상 함수 호출의 오버헤드가 필요하지만 조건부 연산자는 인라인 코드를 생성할 가능성이 높습니다.

게다가, 그 인수의 데이터 타입은Variant함수가 다른 유형(변수 또는 리터럴)의 인수와 함께 호출되면 이러한 인수들을 변환하기 위한 추가 오버헤드가 발생합니다.Variant또한 인수 유형을 확인하고 동일한 유형이 아닌 경우 인수 유형 중 하나를 변환하기 위한 추가 오버헤드가 있을 수 있습니다.

부작용

또 다른 문제IIf라이브러리 함수이기 때문에 발생합니다.C에서 파생된 조건부 연산자와 달리 truepartfalsepart는 실제로 반환되는 함수에 관계없이 모두 평가됩니다.다음 코드 조각:

가치 = 10 결과 = IIf(가치 = 10, ''진정한 기능', 잘못된 기능) 

TrueFunction은 호출을 목적으로 하는 함수이지만,IIf는 TrueFunction과 FalseFunction을 호출합니다.유사하게,

a = 10 b = 0 결과 = IIf(b << 고객명 >>님 0, a / b, 0) 

제로 나눗셈을 회피하는 것이 목적일 수 있지만, b가 제로일 때는 에러가 실제로 발생합니다.이는 스니펫의 코드가 다음과 같이 실행되기 때문입니다.

a = 10 b = 0 _param1 = b << 고객명 >>님 0 _param2 = a / b ' b = 0이면 오류 발생 _param3 = 0 한다면 _param1 그리고나서     결과 = _param2 또 다른     결과 = _param3 끝. 한다면 

이 문제로 인해 IIf() 콜은 조건부 연산자보다 유용하지 않습니다.이 문제를 해결하기 위해 마이크로소프트 개발자들은 다음과 같이 변환할 것을 고려했습니다[2].IIf이 경우 컴파일러는 함수 호출을 인라인 코드로 대체함으로써 유형 추론 및 쇼트 컷팅을 수행할 수 있습니다.

IIf의 대체 방법

Visual Basic에서 IIf는 식의 참 또는 거짓 여부를 평가하고 액션을 수행하는 유일한 방법이 아닙니다.

다음의 예에서는, IIf 를 사용하고 있습니다.

결과 = IIf(x = y, value1, value2)

표준 조건을 사용하여 다음과 같은 방법으로 작성할 수도 있습니다.

한다면 x = y 그리고나서     결과 = 값 1 또 다른     결과 = 값 2 끝. 한다면 

위의 예에서는 IIf가 부분과 거짓 부분 매개변수를 모두 평가하는 문제도 없어집니다.

Visual Basic 2008(VB 9.0)에서는 단순히 "If"라고 불리는 진정한 조건부 연산자가 도입되어 이 문제도 해소되었습니다.이 구문은 IIf 함수의 구문과 유사합니다.

결과 = 한다면(x = y, 값 1, 값 2) 

다른 프로그래밍 언어에서의 IIf

$iif()는 유사한 구문을 가진 mIRC 스크립트에 있습니다.

별칭 testiif { %testiif = 0 echo -a $iif(1,$testiif2,$testiif2) %testiif 실행이 %testiif } 별칭 testiif2 {inc %testiif 반환 테스트 $!iif:}을(를) 설정 해제함

부르기/testiif는 "testing $iif: 1 execution(s)"을 출력합니다.mIRC의$iifC와 같은 행동을 하다?:보다IIf()둘 다 사전 평가하지 않을 것이기 때문에 VB에서요.

IIF()dBasexBase(1992년 이후)의 함수입니다.

iif()Oxygene의 컴파일러 매직 함수이기도 합니다.이 함수는 실제 함수가 아니며 컴파일 시에 조건부 문으로 전개됩니다.

변화하다 일부 문자열 := 만약(일부 정보 > 35 , '대형', '작다'); 

이 예에서는 "someString"이라는 이름의 새로운 strong type 문자열이 (Type inference를 사용하여) 생성되고iif함수는 부울식의 결과에 따라 이 값을 채웁니다.

SQL Server 2012 이후에는 IIF() 기능이 구현되어 있습니다.

선언하다 @a 인트 = 45; 선언하다 @b 인트 = 40; 선택한다. IIF ( @a > @b, '참', 'FALSE' ) ~하듯이 결과; 

C의 IIf는 ?: 조건부 연산자:

인쇄물("%d는 %s 짝수", 숫자, 숫자 % 2 ? "없음" : ""); 

Python의 IIf:

패리티 = '홀수' 한다면 n%2 또 다른 '짝수' 

IIf(빨간색 및 리볼):

패리티: 홀수 중 하나?n['홀수]['짝수] 

레퍼런스

  1. ^ "How to Use the IIf() (Immediate If) Function". 2004-06-08. Retrieved 2007-05-09.
  2. ^ Paul Vick (2006-12-29). "IIF, a True Ternary Operator and Backwards Compatibility". Retrieved 2007-02-01.

외부 링크