Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Chroniqueur Actualités
    Avatar de Patrick Ruiz
    Homme Profil pro
    Redacteur web
    Inscrit en
    février 2017
    Messages
    776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Redacteur web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : février 2017
    Messages : 776
    Points : 26 893
    Points
    26 893

    Par défaut Typescript 3.7.0 va prendre en charge l’opérateur de chaînage d’optionnels (?.)

    Typescript 3.7.0 va prendre en charge l’opérateur de chaînage d’optionnels (?.)
    En s'appuyant sur le 3e draft pour JavaScript

    Supposons, dans l’exemple qui suit, que l’on veuille extraire le nom de la cité au sein d’un enregistrement obtenu d’une API tierce :

    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const apiResult = {
      name: "Patrick elgato",
      office: {
        primary: {
          city: "Lohove",
          state: "South"
        }
      }
    }

    L’une des solutions serait alors de procéder de la manière suivante :

    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const city = apiResult.office.primary.city;
    // --> "Lohove"

    L’approche est directe. Néanmoins, elle se base sur la dangereuse hypothèse que l’API renverra toujours la réponse sous la même forme lors de l’exécution. En effet, il suffit que l’API renvoie un profil utilisateur duquel la sous-structure office est manquante pour que des problèmes surviennent . Illustration avec le bout de code qui suit :

    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const apiResult = {
      name: "Patrick elgato"
    }const city = apiResult.office.primary.city;
    // --> Uncaught TypeError: Cannot read property 'primary' of null

    De façon globale, le problème se pose avec les API qui ne dévoilent pas tous les types de réponses possibles. Une bonne approche à la résolution du problème consiste alors à considérer les propriétés au sein de ces structures comme optionnelles. C’est là qu’intervient l’opérateur dit de chaînage d’optionnels ( ?.) dont le fonctionnement est résumé ci-dessous :

    /
    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /  if `a` is `undefined` or `null`:
    //    return `undefined`
    //  else: 
    //    return `a.b`
    a?.b;// The optional chaining operator is equivalent to:
    (a == null) ? undefined : a.b;

    De façon brossée, l’opérateur de chaînage d’optionnels permet de parcourir des structures similaires à des arbres de façon élégante : si l’une des propriétés intermédiaires est null ou undefined, la chaîne entière est alors évaluée comme undefined. Application à l’exemple de la tentative d’extraction du nom de la cité au sein de l’enregistrement obtenu d’une API tierce :

    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const city = apiResult?.office?.primary?.city;
    // --> string | undefined

    Les développeurs habitués de langages de programmation comme C# de Microsoft ou Swift d’Apple connaissent cet opérateur puisque celui-ci est pris en charge par ces langages. À contrario, sa prise en charge continue de se faire attendre sous TypeScript, mais semble-t-il, plus pour longtemps d’après ce qui ressort des derniers développements.

    En effet, le contenu de discussions en cours sur le GitHub de Microsoft laisse filtrer que TypeScript 3.7.0 est pressenti pour offrir la prise en charge de l’opérateur de chaînage d’optionnels. TypeScript 3.6.0 est disponible en bêta depuis peu et la version finale est prévue pour la fin du mois en cours. TypeScript 3.7.0 devrait être disponible au mois d’octobre si l’on prend en compte le fait que de nouvelles versions du langage de programmation libre et open source sortent approximativement tous les deux mois.

    La décision de l’équipe TypeScript fait suite à la publication du troisième brouillon ECMAscript relatif à la prise en charge de l’opérateur de chaînage d’optionnels. Ce dernier permet grosso modo d’entrevoir les axes retenus du côté de Microsoft. La fenêtre de code dans la suite dresse une liste de cas de figures de base auxquels les développeurs pourront faire face sous TypeScript 3.7.0 :

    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    a?.b                 // undefined si `a` est null/undefined, sinon `a.b`.
    a == null ? undefined : a.b
     
    a?.[x]                 // undefined si `a`est null/undefined, sinon `a[x]`.
    a == null ? undefined : a[x]
     
    a?.b()                        // undefined si `a` est null/undefined
    a == null ? undefined : a.b() // génère une erreur de type si `a.b` n’est pas une fonction
                                  // sinon, évaluation de `a.b()`
     
    a?.()                        // undefined si `a` est null/undefined
    a == null ? undefined : a()  // génère une erreur de type si `a` n’est ni null/undefined, ni une fonction
                                 // sinon appelle la fonction `a`

    Le draft laisse également filtrer que TypeScript 3.7.0 arrive avec l’opérateur ?? (nullish coalescing) complémentaire de celui de chaînage d’optionnels. Illustration avec le bout de code dans la suite :

    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // falls back to a default value when response.settings is missing or nullish
    // (response.settings == null) or when response.settings.animationDuration is missing
    // or nullish (response.settings.animationDuration == null)
    const animationDuration = response.settings?.animationDuration ?? 300;

    Nom : 2.png
Affichages : 1609
Taille : 15,1 Ko

    La publication d’un troisième brouillon ECMAscript relatif à la prise en charge de l’opérateur de chaînage d’optionnels est le signe que la fonctionnalité se rapproche des développeurs qui font usage de JavaScript également. C’est désormais la version finale de la spécification qui est attendue. En attendant, Microsoft va prendre les devants. La manœuvre pourrait, avec les retours d’expérience des développeurs TypeScript, influer sur les choix finaux du côté de JavaScript.

    Sources : ticket TypeScript, tc39

    Et vous ?

    Qu’en pensez-vous ?
    Comment accueillez-vous la disponibilité future de cet opérateur pour les langages de script TyepScript et JavaScript ?
    Entrevoyez-vous des inconvénients à l’introduction de cette fonctionnalité ? Si oui, lesquels ?

    Voir aussi :

    Après avoir réécrit Angular en TypeScript, Google approuve le surensemble JavaScript de Microsoft pour ses développements internes
    Google s'oriente vers TypeScript et voici pourquoi, selon Evan Martin, un ingénieur de la firme qui travaille sur le langage
    TypeScript 3.1 est disponible, cette version s'accompagne des redirections de versions ainsi que des types de tableau et de tuple mappables
    Microsoft annonce la disponibilité de TypeScript 3.3 qui apporte une meilleure gestion des projets composites introduits par TypeScript 3.0
    La RC de TypeScript 3.4 est disponible et apporte une nouvelle syntaxe pour ReadonlyArray ainsi que la vérification de type pour globalThis
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #2
    Membre expérimenté Avatar de dfiad77pro
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    décembre 2008
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : FrancesƆ

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2008
    Messages : 458
    Points : 1 342
    Points
    1 342

    Par défaut Une fonctionnalitée à prendre avec des pincettes

    J'aime bien cela venant de C#.

    Cela dit attention à ce genre de code. Qu'on voit trop souvent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    personne?.adresse?.rue ='toto';
    personne?.adresse?.cpost='69000';
    personne?.adresse?.ville='=Lyon';
    Dans ce cas il vaut mieux utiliser une seule condition pour éviter de répéter le test …

  3. #3
    Modérateur
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2005
    Messages
    4 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2005
    Messages : 4 121
    Points : 16 801
    Points
    16 801

    Par défaut

    Ou sinon utiliser lodash.
    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  4. #4
    Membre extrêmement actif Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    avril 2014
    Messages
    1 647
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : avril 2014
    Messages : 1 647
    Points : 1 998
    Points
    1 998

    Par défaut

    Le moins de dépendances à des librairies externes devrait toujours être un objectif principal de développeur.

    À part ça je ne connaissais pas cet opérateur dans les autres langages mais ça me semble très intéressant.

  5. #5
    Modérateur
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2005
    Messages
    4 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2005
    Messages : 4 121
    Points : 16 801
    Points
    16 801

    Par défaut

    Oui évidemment c'est toujours mieux d'éviter des dépendances mais là c'est quand même lodash, c'était juste pour souligner que ça existe depuis longtemps avec une lib qui peut être considérée comme faisant partie de l'API standard.

    Bref.
    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

Discussions similaires

  1. commande DOS pour prendre une partie d'un mot
    Par sofiane1111 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 21/09/2007, 10h59
  2. comment configurer tomcat pour prendre une racine determinée
    Par diamonds dans le forum Tomcat et TomEE
    Réponses: 12
    Dernier message: 26/03/2007, 21h42
  3. Formule pour prendre certains digits d'un Champs.
    Par jboumaaz dans le forum Formules
    Réponses: 6
    Dernier message: 17/01/2007, 15h37
  4. Quelle URL dois-je entrer pour prendre Developper.com en RSS ?
    Par koKoTis dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 19
    Dernier message: 03/09/2006, 13h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo