뻘글입니다

닷넷에 ?? 연산자가 있는데요.

var a = na ?? 0;

이게 가능 합니다.

가끔 코드 짜다가 ?! 혹은 !? 연산자는 왜 없을까 싶은데요

if (na == null)
   a = na;
else
   a = na * 10;

이런 로직이 가끔씩 있는데
간단하게

a = na ?! na * 10;

요런거 있음 좋겠다 싶네요.

1 Like

저런게 있는 언어가 있나요? 코틀린?

int? na = null;
var a = na * 10;

이러면 굳이 체크없이도 null 혹은 *10의 값이 나옵니다

4 Likes

전 닷넷말곤 아는게 없어서…;;

됩니다.

int? na = 10;
var a = na ?? na * 10;

근데, 보통은 아래와 같이 쓰는 경우가 많죠.

private int? a;

// ...
{
   a ??= na * 10;
}
1 Like

되는지요?

1 Like

안되나요?
피 연산자가 nullable 로 인식되면 됩니다.

1 Like

na가 null이면 na * 10이 a에 대입되는거 아닌가요? 동작해야 할 것 같습니다~


실행해보니 na가 null이면 null * 10의 연산결과인 null이 a에 들어가네요
null * 10은 null이군요 :grin:

1 Like

이때 '*'를 lifted operator 라고 부릅니다.
값 객체의 * 연산자와 다릅니다.

3 Likes

보통 저럴경우 삼항자 사용해서 해결하지 않나요?

var a = na == null ? na : na * 10;
이러면 말씀하신 ?! 인거 아닐까요

단항일땐 삼항연산자 쓰긴 하는데 다항식이면 가독성 떨어져서
if로 처리 하는 편입니다.

double? na = null;
var temp = na * 10;
Console.WriteLine(temp ?? double.NaN);

이게 되네요…?
null 에 연산을 한다는 생각을 해본적이 없어서…

하나 배웠습니다.

int? na = 2;
var a = na ?? na * 10;

a 는 얼마가 되어야 하는지요?

IDE 를 열 수 없는 상황이라면, .net fiddle 도 코드 실험하기 좋습니다.

1 Like

[* 10] 의 역할은 무엇인가요?

그냥… 대충… 막 적은… 예시입니다.

1 Like

C# 기초 문법을 설명해달라는 의미이신가요?

네. 설명 부탁드립니다.

?? and ??= operators - null-coalescing operators - C# reference | Microsoft Learn

Lifted Operator of Nullable value types

위 로직(na 가 null 아닐 때만 na * 10을 수행)의 경우라면, C#에서는 아래와 같이 한 문장으로 쓸 수 있습니다.

var a = na * 10;

?!, !? 이런 잡다한 게 필요가 없는 것이죠.

2 Likes

@naratteu @마수리 @BigSquare

모두들 감사드립니다.

전 당연하게 null 에 연산을 하는건 미친짓이라 생각했는데…
오늘 그게 깨지네요.

제가 가끔 쓰는 걸 간단히 예를 들어 설명 하면

double? mm = settingValue ?? initValue;
// ......
if (mm == null)
   cm = null;
else
   cm = mm * 10;

위에서 보시듯 settingValue가 null 일때는 ?? 통해서 식을 간단하게 할 수 있죠.

그런데 mm * 10의 경우는 지금까지 저는 당연히 안된다고 생각했습니다.
어떤 누가! null 일수도 있는 놈을 가지고 연산을 하겠습니까!

물론

cm = mm?.toCm();

요런거 정도는 알고 있었는데
연산을 하다니…
지금까진 코드 저따위로 짜면
프로그램 꾀꼴락 하고 팀장님한테 끌려 가는줄 알았는데…

다시 한번 가르침에 감사 드립니다.

5 Likes