엔딩 엔딩 엔딩()?검사 없이 호출

6162 단어 FlutterDarttech

결론


예를 들어 속성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 검사 없이 불러낸 사람은 꼭 사용하세요!

좋은 웹페이지 즐겨찾기