Null 병합 연산자
Null coalescing operator![]() |
null 병합 연산자(Perl에서는 논리적 정의-또는 연산자라고 함)는 C#,[1] 버전 7.0.[2]0의 PowerShell, 버전 [3]5.10의 Perl, [4]Swift 및 PHP 7.0.[5]0을 비롯한 여러 프로그래밍 언어의 기본 조건식 구문의 일부인 이진 연산자입니다.동작은 구현에 따라 다르지만 null 병합 연산자는 일반적으로 가장 왼쪽 끝 피연산자의 결과를 반환하며, 그렇지 않으면 가장 오른쪽 피연산자의 결과를 반환합니다.이 동작에 의해, 보다 구체적인 값을 사용할 수 없는 경우에 디폴트치를 정의할 수 있습니다.
연산자가 다음과 같이 사용되는 삼원 조건과는 대조적으로 x ? x : y
2진수 엘비스 연산자처럼x ?: y
, null 병합 연산자는 바이너리 연산자이며, 따라서 연산자의 피연산자를 한 번에 평가합니다.이것은, 의 평가의 경우에 중요합니다.x
부작용이 있다.
언어별 예
본라이크 셸
Bourne 쉘(및 파생 모델)에서는 "파라미터가 설정되지 않았거나 null일 경우 단어 확장이 대체됩니다.그렇지 않으면 파라미터 값이 대체됩니다."[6]
#provided_title='provided title' # 제공된 제목을 사용하려면 이 줄의 주석을 해제합니다. 직함=${supplied_disclosed:-'기본 제목'} 메아리치다 "$140" 인쇄 수:기본 제목
C#
C#에서 늘 머지 연산자는 다음과 같습니다.??
.
표현식을 다음과 같이 단순화하는 데 가장 많이 사용됩니다.
Null 값일 수 있음 ?? 값 If Null
예를 들어, C# 코드가 존재하지 않는 경우 페이지에 기본 제목을 부여하기 위해 몇 가지 C# 코드를 구현하는 경우 다음 문을 사용할 수 있습니다.
스트링 페이지 제목 = 공급했다제목 ?? "기본 제목";
좀 더 장황하게 말하는 대신
스트링 페이지 제목 = (공급했다제목 != 무효) ? 공급했다제목 : "기본 제목";
또는
스트링 페이지 제목; 한다면 (공급했다제목 != 무효) { 페이지 제목 = 공급했다제목; } 또 다른 { 페이지 제목 = "기본 제목"; }
세 가지 형식을 사용하면 동일한 값이 지정된 변수에 저장됩니다.pageTitle
.
주의:suppliedTitle
를 사용할 때 참조되는 것은 1회뿐입니다.??
연산자, 그리고 다른 두 가지 코드 예제에서는 두 번을 사용합니다.
연산자는 동일한 식에서 여러 번 사용할 수도 있습니다.
돌아가다 일부_값 ?? some_Value ?? 일부_값3;
null 이외의 값이 번호에 할당되거나 최종 값(null 또는 null이 아닐 수도 있음)에 도달하면 식이 완료됩니다.
예를 들어 C# 8.0은 변수 값을 null로 평가한 경우 변수를 다른 값으로 변경해야 합니다.??=
null 병합 할당 연산자를 사용할 수 있습니다.
일부_값 ??= some_Value;
다음 중 더 간결한 버전은 무엇입니까?
일부_값 = 일부_값 ?? some_Value;
null-conditional 연산자와 조합하여 ?.
또는 null-conditional 요소 액세스 연산자?[]
개체 또는 개체의 구성원이 null인 경우 null 병합 연산자를 사용하여 기본값을 제공할 수 있습니다.예를 들어 다음과 같은 경우 기본 제목을 반환합니다.page
객체가 null 또는page
null이 아니라 그Title
속성은 다음과 같습니다.
스트링 페이지 제목 = 페이지입니다.?.제목 ?? "기본 제목";
CFML
ColdFusion 11,[7][8]Railo 4.1에서 CFML은 null 병합 연산자를 3진 연산자의 변형으로 지원합니다.?:
위의 C#과 기능적으로 구문적으로 동등합니다.예:
possible Null Value ? : value If Null
F#
null 값은 일반적으로 값 또는 [9]변수에 대해 F#에서 사용되지 않습니다.단, 예를 들어 F# 코드가 C#에서 호출된 경우 null 값이 표시될 수 있습니다.
F#에는 내장된 null 병합 연산자가 없지만 필요에 따라 사용자 지정 [10]연산자로 정의할 수 있습니다.
허락하다 ( ?) lhs rhs = (한다면 lhs = 무효 그리고나서 rhs 또 다른 lhs)
이 커스텀 연산자는 C#의 빌트인 늘 병합 연산자에 따라 적용할 수 있습니다.
허락하다 페이지 제목 = 공급했다제목 ? "기본 제목"
프리마커
Apache FreeMarker에서 값이 누락되면 일반적으로 예외가 발생합니다.단,[11] missing 값과 null 값 모두 생략 가능한 기본값으로 처리할 수 있습니다.
${missing 변수!"기본값"}
또는 출력을 공백으로 두려면:
${missing 변수!}
하스켈
일반적으로 Haskell의 유형은 null일 수 없습니다.의미 있는 결과를 반환할 수도 있고 반환하지 않을 수도 있는 계산의 표현은 표준[12] 라이브러리에서 다음과 같이 정의된 일반적인 Maybe 유형으로 표현됩니다.
데이터. 아마도요. a = 아무 것도 없어요. 그저. a
null 병합 연산자는 null 포인터를 기본값으로 바꿉니다.Haskell 등가는 기본값을 제공하여 Maybe에서 값을 추출하는 방법입니다.이것은 Maybe의 기능입니다.
어쩌면 :: a -> 아마도요. a -> a 어쩌면 default Value(기본값) x = 사례. x 의 아무 것도 없어요. -> default Value(기본값) 그저. 가치 -> 가치
다음은 사용 예를 제시하겠습니다.
어쩌면 0 (그저. 3) -- 3을 반환합니다. 어쩌면 "" 아무 것도 없어요. -- "를 반환합니다.
자바스크립트
JavaScript의 가장 가까운 연산자는 다음과 같습니다.??
ECMAScript 11번째 [13]판에서 표준에 추가된 "nullish coalesing operator"입니다.이전 버전에서는 Babel 플러그인을 통해 TypeScript에서 사용할 수 있었습니다.왼쪽 피연산자를 평가하여 결과값이 "nullish"(늘)가 아닌 경우)null
또는undefined
)는 그 값을 결과로 가져옵니다.그렇지 않으면 오른쪽 오퍼랜드를 평가하여 결과값을 가져옵니다.
다음 예제에서는a
값이 할당됩니다.b
가치가 있다면b
아니다null
또는undefined
그렇지 않으면 3이 할당됩니다.
컨스턴트 a = b ?? 3;
nullish 병합 연산자 이전에는 프로그래머가 논리 OR 연산자(
). 단, 어디에??
특히 를 찾습니다.null
또는undefined
,그
연산자는 위변조 값을 찾습니다.null
,undefined
,""
,0
,NaN
,그리고 물론.false
.
다음 예제에서는a
값이 할당됩니다.b
가치가 있다면b
truthy 입니다.그렇지 않으면 3이 할당됩니다.
컨스턴트 a = b 3;
코틀린
Kotlin은?:
오퍼레이터.[14]이것은 이례적인 기호 선택이다.?:
는 보통 엘비스 오퍼레이터에게 사용되며, 눌 결합은 아니지만 눌이 거짓으로 간주되는 그루비(프로그래밍 언어)에서 영감을 받았습니다.
값 직함 = 공급했다제목 ?: "기본 제목"
목표-C
Obj-C에서 제로 결합 연산자는?:
. 참조가 0인 경우 기본값을 제공하기 위해 사용할 수 있습니다.
아이디 가치 = 가치 That Might Be Nil ?: 값 If Nil;
이건 글쓰기랑 똑같아요.
아이디 가치 = 가치 That Might Be Nil ? 가치 That Might Be Nil : 값 If Nil;
펄
Perl(버전 5.10 이후)에서는 오퍼레이터는//
동등한 Perl 코드는 다음과 같습니다.
$syslog_value // $value_if_module
possible_null_value는 null 또는 not-null로 평가됩니다(Perl 용어에서는 정의되지 않았거나 정의되어 있습니다).평가에 따라 표현식은 가능한_null_value가 null일 경우 value_if_null을 반환하고 그렇지 않을 경우 가능한_null_value를 반환합니다.부작용이 없을 경우 이는 3원 연산자(?:
문)가 이를 지원하는 언어로 작동하는 방식과 유사하다.위의 Perl 코드는 아래의 3진 연산자의 사용과 동일합니다.
정의되어 있다($syslog_value) ? $syslog_value : $value_if_module
이 연산자의 가장 일반적인 용도는 단순한 null 체크에 사용되는 코드의 양을 최소화하는 것입니다.
Perl은 또한//=
할당 연산자, 여기서
$a //= b달러
는 주로 다음과 같습니다.
$a = $a // b달러
이 연산자는 이전 Perl 연산자와 다릅니다.
그리고. =
연산자는 진리가 아닌 정의성을 고려한다는 점에서 중요합니다.따라서 0 또는 " (0-length 문자열)와 같이 false이지만 정의된 값에서는 다르게 동작합니다.
$a = 0; b달러 = 1; c달러 = $a // b달러; # $c = 0 c달러 = $a b달러; # $c = 1
PHP
PHP 7은 Null-Coalesing 연산자를 도입했습니다[15].??
구문을 사용합니다.이는 NULL 또는 존재하지 않는 변수/배열 인덱스/속성을 엄격하게 확인합니다.이 점에서 PHP와 비슷하게 동작합니다.isset()
의사 함수:
이름 = $요구->입력[이름] ?? $요구->질문하다[이름] ?? '기본 이름'; /****에 상당합니다. 한다면 (세트($요구->입력[이름])) { 이름 = $요구->입력[이름]; } 그렇지 않으면 (세트($요구->질문하다[이름])) { 이름 = $요구->질문하다[이름]; } 또 다른 { 이름 = '기본 이름'; }
유저 = $ this->get User(사용자 가져오기)() ?? $ this->createGuestUser 사용자(); /****에 상당합니다. 유저 = $ this->get User(사용자 가져오기)(); 한다면 (무효 === 유저) { 유저 = $ this->createGuestUser 사용자(); }
$pageTitle = $140 ?? '기본 제목'; /****에 상당합니다. $pageTitle = 세트($140) ? $140 : '기본 제목';
버전 7.4의 PHP에서는 Null Collescing Assignment Operator와??=
구문:[16]
// 다음 행도 같은 동작을 하고 있습니다. $ this->부탁한다->데이터.['실패']['user_id'] = $ this->부탁한다->데이터.['실패']['user_id'] ?? '값'; // 긴 이름으로 변수를 반복하는 대신 동일한 병합 연산자를 사용합니다. $ this->부탁한다->데이터.['실패']['user_id'] ??= '값';
파이썬
Python에는 null 병합 연산자가 없습니다.이 기능은 다음 조건식을 사용하여 모방할 수 있습니다.
지금이다() 한다면 시간을 이 없음. 또 다른 시간을
Python 3.8에 null-coalesing-type 연산자를 추가하는 제안이 있었지만, [17]그 제안은 연기되었습니다.
관련 기능
파이썬의or
연산자는 관련되지만 다른 동작을 제공합니다.다른 점은 말이다.or
또한 첫 번째 용어가 정의되어 있지만 값이 다음과 같은 경우 오른쪽 용어를 반환합니다.False
부울 컨텍스트:
42 또는 "뭔가" #는 42를 반환한다. 0 또는 "뭔가" #는 "something"을 반환합니다. 거짓의 또는 "뭔가" #는 "something"을 반환합니다. "" 또는 "뭔가" #는 "something"을 반환합니다. [] 또는 "뭔가" #는 "something"을 반환합니다. 받아쓰다() 또는 "뭔가" #는 "something"을 반환합니다. 없음. 또는 "뭔가" #는 "something"을 반환합니다.
진정한 null 병합 연산자는 반환만 합니다."something"
false-ish 값을 반환합니다.0
,False
,""
,[]
,dict()
를 참조해 주세요.
PowerShell
PowerShell 7 이후??
null 병합 연산자는 이 [2]기능을 제공합니다.
$myVar = $140 x달러 = $myVar ?? "뭔가" #는 "something"을 할당합니다.
녹
없는 동안null
녹의 경우 태그 부착 유니언은 동일한 목적으로 사용됩니다.예를들면,Result<T, E>
또는Option<T>
.
unwrap_or_else()
는, 다른 언어의 늘 통합 연산자와 같은 목적으로 기능합니다.디폴트값 계산에 부작용이 없는 경우unwrap_or()
는, 보다 간결한(최적화를 실시하지 않고, 보다 효율적인) 선택으로서 사용할 수 있습니다.
parsed_parsed:Vec <_> = [1", "숫자가 아닙니다", "3" .iter() .map ( n . n . sn . sn unwrap rap _ or _ map ( _ std : : : : i64 : MIN ) . collect ( ) ; // " - 92233720368575808 , 3 ] println ! ( { : { : { : } ) } ) , parse 。
SQL
Oracle의 PL/SQL에서 NVL() 함수는 다음과 같은 결과를 제공합니다.
NVL(possible_value(가능), 'null의 경우 값');
SQL Server/Transact-SQL에는 동일한 프로토타입 패턴을 따르는 ISNULL 함수가 있습니다.
하지 않다(possible_value(가능), 'null의 경우 값');
ISNULL과 IS NULL을 혼동하지 않도록 주의해야 합니다.IS NULL은 일부 콘텐츠가 NULL로 정의되어 있는지 여부를 평가하는 역할을 합니다.
ANSI SQL-92 표준에는 Oracle,[18] SQL Server,[19] Postgre에 구현된 COALESCE 기능이 포함되어 있습니다.SQL,[20] SQLite[21] 및 MySQL.[22]COALESCE 함수는 늘이 아닌 첫 번째 인수를 반환합니다.모든 항이 null이면 null을 반환합니다.
통합(possible_value(가능)[, possible_value(가능), ...]);
재빠르다
Swift에서 제로 통합 연산자는 다음과 같습니다.??
. 옵션 타입을 개봉할 때 기본값을 제공하기 위해 사용됩니다.
옵션값 ?? 값 If Nil
예를 들어, Swift 코드가 존재하지 않는 경우 페이지에 기본 제목을 부여하기 위해 일부 Swift 코드를 구현하려는 경우 다음 문을 사용할 수 있습니다.
변화하다 공급했다제목: 스트링? = ... 변화하다 페이지 제목: 스트링 = 공급했다제목 ?? "기본 제목"
좀 더 장황하게 말하는 대신
변화하다 페이지 제목: 스트링 = (공급했다제목 != 제로) ? 공급했다제목! : "기본 제목";
VB.NET
VB.NET에서는If
[23] operator/module은 늘 병합 연산자 효과를 달성합니다.
어둡다 페이지 제목 = 한다면(공급했다제목, "기본 제목")
변형을 좀 더 간결하게 사용한다면
어둡다 페이지 제목 = 한다면(공급했다제목 << 고객명 >>님 아무 것도 없어요., 공급했다제목, "기본 제목")
「 」를 참조해 주세요.
- ?: (조건부)
- Elvis 오퍼레이터(이진수?:)
- Null 조건 연산자
- 연산자(프로그래밍)
레퍼런스
- ^ BillWagner. "?? Operator (C# Reference)". msdn.microsoft.com.
- ^ a b "PowerShell 7 Preview 5". PowerShell. 2019-10-23. Retrieved 2020-02-15.
- ^ "perlop - perldoc.perl.org". perldoc.perl.org.
- ^ "The Swift Programming Language (Swift 4): Basic Operators". developer.apple.com.
- ^ "PHP: News Archive - 2015". php.net.
- ^ "Bash man page".
- ^ "Elvis operator". wikidocs.adobe.com.
- ^ "[RAILO-2195] add support for the Elvis Operator - JBoss Issue Tracker". issues.jboss.org.
- ^ cartermp. "Null Values (F#)". msdn.microsoft.com.
- ^ cartermp. "Operator Overloading (F#)". msdn.microsoft.com.
- ^ "Expressions". Apache FreeMarker Manual.
- ^ "Hackage". Retrieved 10 July 2015.
- ^ "ECMAScript 2020 Language Specification". Ecma International. June 2020.
- ^ 를 클릭합니다"Null safety"..
- ^ "PHP: rfc:isset_ternary". Retrieved 16 December 2014.
- ^ Kocak, Midori. "PHP RFC: Null Coalescing Assignment Operator". PHP.net. Retrieved 20 July 2017.
- ^ "PEP 505 -- None-aware operators".
- ^ "Database SQL Language Reference". docs.oracle.com.
- ^ "COALESCE (SQL Server Compact)". technet.microsoft.com.
- ^ "PostgreSQL: Documentation: 9.1: Conditional Expressions". www.postgresql.org. 27 October 2016.
- ^ "SQLite Query Language: Core Functions". www.sqlite.org.
- ^ "MySQL :: MySQL 5.5 Reference Manual :: 12.3.2 Comparison Functions and Operators". dev.mysql.com.
- ^ dotnet-bot. "If Operator (Visual Basic)". docs.microsoft.com.