La ligne de code suivante contient deux points d'interrogation :
final myStringList = prefs.getStringList('my_string_list_key') ?? [];
Quelle est la signification?
La ligne de code suivante contient deux points d'interrogation :
final myStringList = prefs.getStringList('my_string_list_key') ?? [];
Quelle est la signification?
L'opérateur double point d'interrogation ??
signifie "si null". Prenez par exemple l'expression suivante.
String a = b ?? 'hello';
Cela signifie que a
équivaut à b
, mais si b
est nul, alors a
équivaut à 'hello'
.
Un autre opérateur connexe est ??=
. Par exemple:
b ??= 'hello';
Cela signifie que si b
est nul, alors le définir égal à hello
. Sinon, ne le changez pas.
Référence
Termes
La nouvelle de la version 1.12 de Dart a collectivement désigné les éléments suivants comme des opérateurs prenant en compte la nullité:
??
-- opérateur si null??=
-- affectation prenant en compte la nullitéx?.p
-- accès prenant en compte la nullitéx?.m()
-- invocation de méthode prenant en compte la nullité(??) opérateur null, il renvoie l'expression sur sa gauche lorsqu'elle n'est pas nulle
, sinon il renverra l'expression de droite.
(??=) Attribution null-aware - Cet opérateur attribue une valeur à la variable sur sa gauche, uniquement si cette variable est actuellement nulle.
(?.) Accès null-aware Cet opérateur vous évite de faire planter votre application en essayant d'accéder à une propriété ou une méthode d'un objet qui pourrait être nul. Par exemple,
String x;
print(x.toUpperCase()); // GÉNÈRERA UNE ERREUR
print(x?.toUpperCase()); // LA SORTIE SERA NULL
(...?) opérateur de propagation null-aware - Cet opérateur vous empêche d'ajouter des éléments nuls en utilisant l'opérateur de propagation.
Dart propose des opérateurs pratiques pour traiter les valeurs qui pourraient être nulles. L'un d'eux est l'opérateur d'assignation ??=, qui affecte une valeur à une variable seulement si cette variable est actuellement nulle :
int a; // La valeur initiale de a est nulle.
a ??= 3;
print(a); // <-- Affiche 3.
a ??= 5;
print(a); // <-- Affiche toujours 3.
Un autre opérateur null-aware est ??, qui retourne l'expression à sa gauche à moins que sa valeur soit nulle, auquel cas il évalue et renvoie l'expression à sa droite :
print(1 ?? 3); // <-- Affiche 1.
print(null ?? 12); // <-- Affiche 12.
Ceci est particulièrement utile dans la méthode copyWith qui est utilisée très souvent dans flutter pour les remplacements. Voici un exemple ci-dessous:
import './color.dart';
import './colors.dart';
class CoreState {
final int counter;
final Color backgroundColor;
const CoreState({
this.counter = 0,
this.backgroundColor = Colors.white,
});
CoreState copyWith({
int? counter,
Color? backgroundColor,
}) =>
CoreState(
counter: counter ?? this.counter,
backgroundColor: backgroundColor ?? this.backgroundColor,
);
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is CoreState &&
runtimeType == other.runtimeType &&
counter == other.counter &&
backgroundColor == other.backgroundColor;
@override
int get hashCode => counter.hashCode ^ backgroundColor.hashCode;
@override
String toString() {
return "counter: $counter\n"
"color:$backgroundColor";
}
}
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.