user 평가객체 또는 nullish 값에서 시작한다.
?.는 값 없음을 건너뛰고, ??가 마지막에 복구한다옵셔널 체이닝은 각 ?. 왼쪽 값만 nullish인지 검사한다. 체인이 멈추면 undefined를 만들고, ??는 그 결과가 null 또는 undefined일 때만 기본값을 계산한다.
user 평가객체 또는 nullish 값에서 시작한다.
profile 접근user가 nullish면 남은 체인을 건너뛰고 undefined.
score 접근profile이 있을 때만 다음 속성을 읽는다.
체인 결과가 nullish일 때만 0을 사용한다.
?? 0의미
score=000 유지유효한 falsy
score="""""" 유지유효한 falsy
profile 없음undefined0fallback
foo?.bar.baz?.는 바로 왼쪽의 foo만 검사한다. bar도 없을 수 있다면 foo?.bar?.baz가 필요하다.
foo?.bar / work()단락 범위는 체인 밖으로 퍼지지 않는다. bar가 없어도 work()와 나눗셈은 계속 평가된다.
런타임 경계: ?.는 Maybe 객체나 오류 채널을 만들지 않는다. “왜 값이 없는가”까지 도메인 계약으로 남겨야 한다면 Option/Result 같은 별도 타입과 런타임 표현이 필요하다.