Quelle est la meilleure façon de comparer les cordes dans Dart? La classe String ne contient pas de méthode equals
. Est ==
conseillé?
Par exemple:
String rubi = 'good';
String ore = 'good';
rubi == ore;
Oui, ==
est le moyen de tester si deux chaînes sont égales (contiennent exclusivement la même séquence de caractères). La dernière ligne de votre code est évaluée à true
.
Les chaînes sont des objets immuables, ce qui signifie que vous pouvez les créer mais pas les modifier. Vous pouvez bien sûr créer une nouvelle chaîne à partir d'autres chaînes, mais une fois créée, le contenu de la chaîne est fixe.
Il s'agit d'une optimisation, car deux chaînes avec les mêmes caractères dans le même ordre peuvent être le même objet.
String rubi = 'good';
String ore = 'good';
print(rubi == ore); // true, contain the same characters
print(identical(rubi, ore)); // true, are the same object in memory
Contrairement à Java , Dart permet de remplacer les opérateurs tels que ==
. Vous pouvez donc définir votre propre test pour cet opérateur afin de vérifier l'égalité. Vous pouvez également utiliser fonction identique pour vérifier si deux références sont au même objet (l'équivalent de ==
sur des objets en Java ).
Pour String s, c'est un peu spécial. Selon la façon dont vous instanciez le String vous pouvez avoir des résultats différents avec DartVM:
main() {
final s = "test";
printTests(s, "test");
// displays '==' => true 'identical' => true
printTests(s, "$s");
// displays '==' => true 'identical' => false
printTests(s, new String.fromCharCodes(s.codeUnits));
// displays '==' => true 'identical' => false
}
printTests(String s1, String s2) {
print("'==' => ${s1 == s2} 'identical' => ${identical(s1, s2)}");
}
Comme vous pouvez le voir, identical
renvoie true
uniquement pour le premier cas et ==
toujours true
. Mais ce n'est pas toujours vrai. Si vous exécutez ce code en javascript après une compilation Dart2js , identical
et ==
renvoie toujours true
.
Dans la plupart des cas, vous souhaitez comparer les valeurs de String et non leurs références, vous devez donc utiliser ==
.