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 nul". Prenez par exemple l'expression suivante.
String a = b ?? 'bonjour';
Cela signifie que a
est égal à b
, mais si b
est nul, alors a
est égal à 'bonjour'
.
Un autre opérateur connexe est ??=
. Par exemple:
b ??= 'bonjour';
Cela signifie que si b
est nul, alors le définir égal à bonjour
. Sinon, ne pas le changer.
Référence
Termes
Les nouvelles de la version 1.12 de Dart ont collectivement désigné les éléments suivants comme des opérateurs conscients de la nullité:
??
- opérateur si nul??=
- attribution consciente de la nullitéx?.p
- accès conscient de la nullitéx?.m()
- invocation de méthode consciente de la nullité(??) opérateur null, il renvoie l'expression à sa gauche quand celle-ci n'est pas nulle
, sinon il renverra l'expression de droite.
(??=) Affectation null-aware - Cet opérateur affecte une valeur à la variable à sa gauche, uniquement si cette variable est actuellement nulle.
(?.) Accès null-aware Cet opérateur vous empêche 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()); // DONNERA UNE ERREUR
print(x?.toUpperCase()); // LA SORTIE SERA NULL
(...?) Operateur de spread null-aware - Cet opérateur vous empêche d'ajouter des éléments nuls en utilisant l'opérateur de spread.
Dart propose quelques opérateurs pratiques pour traiter les valeurs qui pourraient être nulles. L'un d'eux est l'opérateur d'assignation ??=, qui attribue une valeur à une variable uniquement 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 prenant en compte la nullité est ??, qui renvoie l'expression à sa gauche sauf si la valeur de cette expression est 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 souvent utilisée 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.