Flutter / Dart에서 조건부 if 문에서 "=="와 "is"를 사용하는 것의 차이점은 무엇입니까 [duplicate]
저는 Flutter에서 BLoC에 대한 튜토리얼을 진행 중이며 교사는 조건부 if 문에서 "is"라는 키워드를 사용하여 상태를 "스마트 캐스트"한다고 말했습니다. 아래 코드에서 "is"연산자가 나에게 블록의 상태에 대한 액세스를 제공하는 방법을 이해하도록 도와 줄 수 있습니까?
BlocBuilder<WeatherBloc, WeatherState>(
builder: (context, state) {
if (state is WeatherLoaded) {
return buildColumnWithData(context,state.weather);
}
if (state == WeatherLoaded)로 동일한 코드를 시도했을 때 state.weather를 buildColumnWithData 함수에 전달할 수 없습니다. 왜 이런거야?
답변
'=='는 등호 연산자 입니다.
두 객체 x와 y가 같은 것을 나타내는 지 테스트하려면 == 연산자를 사용하십시오. (드문 경우 두 객체가 정확히 동일한 객체인지 알아야하는 경우에는 대신 same () 함수를 사용하십시오.) == 연산자의 작동 방식은 다음과 같습니다.
x 또는 y가 null이면 둘 다 null이면 true를 반환하고 하나만 null이면 false를 반환합니다.
메서드 호출 x. == (y)의 결과를 반환합니다. (맞습니다. ==와 같은 연산자는 첫 번째 피연산자에서 호출되는 메서드입니다. 자세한 내용은 연산자를 참조하세요.)
'is'는 유형 테스트 연산자입니다.
obj is T
obj가 T로 지정된 인터페이스를 구현하면 의 결과 는 true입니다. 예를 들어, obj는 Object는 항상 true입니다.
코드에서 :
is
상태가 WeatherLoaded
클래스의 인스턴스인지 확인합니다 .
무엇 WeatherLoaded
보다 확인이 성공한 경우 캐스트 할 필요가 없습니다 . if 문 상태 변수의 범위에서 WeatherLoaded
"is smartcasts the state"가 있습니다.
와 ==
운영자, 당신은 클래스의 두 인스턴스를 비교할 수 있습니다.