Quel est le meilleur moyen de comparer des chaînes de caractères en Dart? La classe String ne contient pas de méthode equals
. Est-ce que ==
est recommandé?
Par exemple:
String rubi = 'good';
String ore = 'good';
rubi == ore;
Quel est le meilleur moyen de comparer des chaînes de caractères en Dart? La classe String ne contient pas de méthode equals
. Est-ce que ==
est recommandé?
Par exemple:
String rubi = 'good';
String ore = 'good';
rubi == ore;
Les chaînes de caractères sont des objets immuables, ce qui signifie que vous pouvez les créer mais vous ne pouvez pas les modifier. Vous pouvez bien sûr construire 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 = 'bien';
String ore = 'bien';
print(rubi == ore); // true, contiennent les mêmes caractères
print(identical(rubi, ore)); // true, sont le même objet en mémoire
Contrairement à Java, Dart permet de remplacer des opérateurs tels que ==
. Ainsi, vous pouvez définir votre propre test pour cet opérateur pour vérifier l'égalité. Vous pouvez également utiliser la fonction identical pour vérifier si deux références pointent vers le même objet (l'équivalent de ==
sur les objets en Java).
Pour les String, c'est un peu spécial. Selon la manière dont vous instanciez le String, vous pouvez obtenir des résultats différents avec DartVM :
main() {
final s = "test";
printTests(s, "test");
// affiche '==' => vrai 'identical' => vrai
printTests(s, "$s");
// affiche '==' => vrai 'identical' => faux
printTests(s, new String.fromCharCodes(s.codeUnits));
// affiche '==' => vrai 'identical' => faux
}
printTests(String s1, String s2) {
print("'==' => ${s1 == s2} 'identical' => ${identical(s1, s2)}");
}
Comme vous pouvez le constater, identical
ne retourne vrai
que pour le premier cas et ==
toujours vrai
. Mais ce n'est pas toujours vrai. Si vous exécutez ce code en javascript après une compilation dart2js, identical
et ==
retournent toujours vrai
.
Dans la plupart des cas, vous souhaitez comparer les valeurs des String et non leurs références, donc vous devriez utiliser ==
.
(Pour des raisons de complétude, voici une autre façon de comparer deux chaînes de caractères.)
String
en Dart implémente l'interface Comparable
. Vous pouvez utiliser compareTo
pour comparer des chaînes de caractères.
String rubi = 'bon';
String ore = 'bon';
rubi.compareTo(ore) == 0;
Cependant, vous devez vérifier les valeurs NULL.
Il existe plusieurs façons de comparer des chaînes de caractères. Selon vos besoins, vous devez choisir une solution appropriée :
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.