엔딩 엔딩 엔딩()?검사 없이 호출
결론
예를 들어 속성
void Function()? callback
이 있는class가 있으면아래의 문법으로 실현할 수 있다callback?.call()
유형 자체가 Optional?
이기 때문에 표시, 호출.call()
방법을 사용합니다보충
?.call()
사용하지 않으면 아래 표기법에 따라null 검사를 진행합니다final callback = this.callback;
if (callback != null) {
callback();
}
이것은 무엇이냐
Dart에는 Callable classes 기능이 있습니다.간단하게 말하자면
call
방법이 있는class는 함수 호출의 문법으로 call
방법을 호칭할 수 있다.다음 예는'스타 주세요'입니다.이 기능이 이 Callable classes 기능이라고 할 수 있죠.document: https://dart.dev/guides/language/language-tour#callable-classes
class GiveMeStarFunction {
void call() => print('Give me star!');
}
var gms = GiveMeStarFunction();
void main() {
gms(); // Give me star!
}
이것으로 추측하다
다만 이것만은 의문이 남는다.Function class에서 콜 방법은 문서에서나 공개 코드에서 정의되지 않았기 때문이다.
Function-class document: https://api.dart.dev/stable/2.5.2/dart-core/Function-class.html
GitHub: https://github.com/dart-lang/sdk/blob/e995cb5f7cd67d39c1ee4bdbe95c8241db36725f/sdk/lib/core/function.dart#L11
펀션 유형에 방법이 없음
call
을 확인했습니다.그럼 왜 call
방법이라고 할 수 있죠?공식 문서에는 이렇게 쓰여 있다.A function value, or an instance of a class with a "call"method, is a subtype of a function type, and as such, a subtype of Function.
즉,
call
방법으로 정의된 인스턴스는 Function의 하위 유형을 사용합니다.다음 코드를 통해 하위 유형을 파악할 수 있습니다.class GiveMeStarFunction {
void call() => print('Give me star!');
}
var gms = GiveMeStarFunction();
void main() {
void Function() f = gms; // Function タイプのインスタンスで宣言してGiveMeStarFunction型のインスタンスを代入する
f(); // Give me star!
}
dart의 운행 시간에 대한 내용을 파악하지 못해 억측이지만 외관과 문서의 설명에 있어서 콜 방법의 실례는 함수 호출의 문법을 사용할 수 있으나 콜 방법을 정의한 실례는 Function의 하위 유형으로 간주된다.dart의 실행 시간에 Function 유형은 call
방법을 통해 호출됩니다.따라서 콜 방법을 정의하면 Function의 하위 유형을 가능하게 처리하고 실제로 함수 호출의 문법을 사용할 수 있다.되다그렇다면 일리가 있는 것 같다.총결산
다시 한 번, Nullable의 Function 속성을 이용하고 싶은 경우
?.call()
편리합니다!펀션이라면 null 검사 없이 불러낸 사람은 꼭 사용하세요!
Reference
이 문제에 관하여(엔딩 엔딩 엔딩()?검사 없이 호출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/bannzai/articles/4caf52612a4fa2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)