197 votes

Qu'est-ce que les ?? double 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 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é

15voto

Mayur Agarwal Points 171

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

14voto

Officiallygod Points 447

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.

3voto

Enoch Sem Points 31

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

2voto

Solen Dogan Points 149

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