No Flutter / Dart, qual é a diferença entre usar “==” vs “é” em uma instrução if condicional [duplicado]
Estou fazendo um tutorial sobre BLoC no Flutter e o tutor usa a palavra-chave "é" em sua instrução if condicional, que ele disse "smartcasts" o estado. Alguém pode me ajudar a entender como a operadora "is" me dá acesso ao estado do bloco no código abaixo?
BlocBuilder<WeatherBloc, WeatherState>(
builder: (context, state) {
if (state is WeatherLoaded) {
return buildColumnWithData(context,state.weather);
}
Quando tentei o mesmo código com if (state == WeatherLoaded), não consegui passar o state.weather para a função buildColumnWithData. Por que é isso?
Respostas
'==' é um operador de igualdade .
Para testar se dois objetos x e y representam a mesma coisa, use o operador ==. (No caso raro em que você precisa saber se dois objetos são exatamente o mesmo objeto, use a função idêntica ().) Veja como funciona o operador ==:
Se x ou y for nulo, retorna verdadeiro se ambos forem nulos e falso se apenas um for nulo.
Retorne o resultado da invocação do método x. == (y). (Isso mesmo, operadores como == são métodos que são chamados em seu primeiro operando. Para obter detalhes, consulte Operadores.)
'é' é um operador de teste de tipo
O resultado de
obj is T
é verdadeiro se obj implementa a interface especificada por T. Por exemplo, obj is Object é sempre verdadeiro.
Em seu código:
is
verifica se o estado é uma instância da WeatherLoaded
classe.
Além disso, você não precisa fazer uma conversão para WeatherLoaded
se a verificação foi bem-sucedida - no escopo da variável de estado da instrução if WeatherLoaded
é reduzida para ("é smartcasts o estado").
Com o ==
operador, você pode comparar 2 instâncias de uma classe.