Dart Eşitlik ve Eşitlik Paketi
==
Eşitlik, operatörü kullanarak iki nesnenin eşit olup olmadığını kontrol etmek için kullanılır . İki nesne eşitse, ==
operatör olarak değerlendirir, true
aksi takdirde olarak değerlendirir false
.
Dart'ta, operatör varsayılan ==
olarak referans eşitliğini kontrol eder ve true
iki nesnenin ne zaman aynı örnek olduğunu veya aynı referansa ait olduğunu değerlendirir. Aynı değerlere sahip iki sabit olmayan nesneyi karşılaştırırsak, o zaman olarak değerlendirilir false
.
- Bir
User
sınıf oluşturalım:
class User {
final String? name;
final int? age;
const User({this.name, this.age});
}
void main() {
User user = User(name: "Usama", age: 10);
User administrator = User(name: "Usama", age: 10);
print(user == administrator);
}
void main() {
User user = const User(name: "Usama", age: 10);
User administrator = const User(name: "Usama", age: 10);
print(user == administrator);
}
4. Peki ya sabit olmayan iki nesneyi referansa göre değil de değere göre karşılaştırmak istiyorsak?
==
Çözüm şu ki, operatörü geçersiz kılmamız gerekiyor ve hashCode
şöyle:
class User {
final String? name;
final int? age;
const User({this.name, this.age});
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is User &&
runtimeType == other.runtimeType &&
name == other.name &&
age == other.age;
@override
int get hashCode => name.hashCode ^ age.hashCode;
}
Ve şimdi User
, aynı değerlere sahip iki sabit olmayan nesneyi karşılaştırırsak, ifade yazdırılacaktır true
.
Ve bu çok fazla basmakalıp kod!
Bunu başarmanın basit bir yolu, Equatable paketini kullanmaktır.
- Çarpıntı projenizin eşitlenebilir bağımlılığını ekleyin
pubspec.yaml
:
dependencies:
flutter:
sdk: flutter
equatable: ^2.0.5
import 'package:equatable/equatable.dart';
class User extends Equatable {
const User({this.name, this.age});
final String? name;
final int? age;
@override
List<Object?> get props => [name, age];
}
Okuduğunuz için teşekkürler!
Youtube: Bekar Programcı