본문 바로가기

개발하자

플러터에 있는 연산자 == 방법은 무엇입니까?

반응형

플러터에 있는 연산자 == 방법은 무엇입니까?

문서에 따라 다음과 같이 구현됩니다

@override
bool operator ==(Object other) {
  if (identical(this, other))
    return true;
  if (other.runtimeType != runtimeType)
    return false;
  return other is BoxShadow
      && other.color == color
      && other.offset == offset
      && other.blurRadius == blurRadius
      && other.spreadRadius == spreadRadius;
}

그리고 그 재산은 다음과 같다

@override
int get hashCode => hashValues(color, offset, blurRadius, spreadRadius);

이것은 실제로 무엇을 하는가? 그리고 그것은 어디에서 유용한가? 코드에서 , 등의 목적은 무엇입니까? 몇 가지 예를 더 간단한 용어로 제공해 주시면 감사하겠습니다.




이 연산자는 두 객체/클래스의 실제 값을 비교해야 할 때 유용합니다. 왜냐하면 기본적으로 flalling 객체의 인스턴스를 비교하며, 이 경우 두 객체의 실제 값이 동일하더라도 결코 동일하지 않기 때문입니다,

예를 들어 ~다음 예제를 실행합니다

플러터 기본 케이스:

void main() {
  Person p1 = Person("StackOverFlow");
  Person p2 = Person("StackOverFlow");

  print("Both Classes are same: ${p1 == p2}"); // <- print 'false'
}

class Person {
  String name;
  Person(this.name);
}

재정의 경우:

void main() {
  Person p1 = Person("StackOverFlow");
  Person p2 = Person("StackOverFlow");

  print("Both Classes are same: ${p1 == p2}"); // <- print 'true'
}

class Person {
  String name;
  Person(this.name);

  @override
  bool operator ==(Object other) {
    return (other is Person) && other.name == name;
  }
}

그리고 더 자세한 내용은 이것을 읽어라.




키워드는 특수 기호 함수를 지정합니다. 예를 들어, 더하기의 경우 '+', 같음의 경우 '=='입니다.

Dart에서 객체는 속성이 동일하더라도 서로 같지 않습니다. 왜냐하면 Dart는 Dart가 자동으로 딥 이퀄리티(객체의 각 속성을 검사하는 과정)를 수행하지 않고 인스턴스가 별도이기 때문이다.

이 경우 연산자는 기본 동일성 검사를 재정의하고 심층 동일성 검사를 수행하며 런타임 유형(예: 또는 )이 동일한지 확인합니다. 어떤 코드든 평등하게 실행될 수 있지만 더 많은 평등 검사 이외의 다른 것을 실행하는 것은 좋지 않습니다. 해시 코드 오버라이드는 동일 연산자를 오버라이드할 때 필요한데, Dart가 이를 내부적으로 사용하여 다른 동일 연산을 수행하기 때문이다.


반응형