106 votes

Comparateur de chaînes Dart

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;

157voto

Darshan-Josiah Barber Points 15914

Oui, == est la méthode pour tester si deux chaînes de caractères sont égales (contiennent exclusivement la même séquence de caractères). La dernière ligne de votre code évalue à true.

27voto

SoftwareCarpenter Points 1676

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

14voto

Alexandre Ardhuin Points 16297

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 ==.

8voto

user1506104 Points 1298

(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.

4voto

Quyết Points 38

Il existe plusieurs façons de comparer des chaînes de caractères. Selon vos besoins, vous devez choisir une solution appropriée :

  1. En utilisant l'opérateur str1 == str2 : L'opérateur renvoie true si str1 est égal à str2. Sinon, il renvoie false. Cet opérateur est utile lorsque vous voulez déterminer si les chaînes ont la même séquence de codes unitaires.
  2. En utilisant la méthode str1.compareTo(str2) : la méthode renvoie une valeur négative (-1) si str1 est ordonné avant str2, une valeur positive (1) si str1 est ordonné après str2, ou zéro si str1 et str2 sont équivalents. Cette méthode est utile si vous souhaitez trier une collection de chaînes de caractères.

Prograide.com

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.

Powered by:

X