197 votes

Quels sont les ?? doubles points d'interrogation en Dart ?

La ligne de code suivante contient deux points d'interrogation :

final myStringList = prefs.getStringList('my_string_list_key') ?? [];

Quelle est la signification?

384voto

Suragch Points 197

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é

15voto

Mayur Agarwal Points 171

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

14voto

Officiallygod Points 447

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.

3voto

Enoch Sem Points 31

? ? est un opérateur nul, cela signifie que, si la valeur de "my_string_list_key" dans l'instance prefs est null, alors attribuez une liste vide à myStringList.

2voto

Solen Dogan Points 149

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";
  }
}

0 votes

Ce que nous faisons ici, c'est donner à l'utilisateur la possibilité de remplacer, remarquez les paramètres nuls dans la méthode copyWith, puis vérifiez si le paramètre est nul pour revenir à la valeur existante définie

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