Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Des ingénieurs demandent à ce que soient ajoutés les opérateurs de type Bash && et || à PowerShell
Dans une RFC

Le , par Stéphane le calme

65PARTAGES

12  0 
Les requests for comments (RFC), littéralement « demande de commentaires », sont une série numérotée de documents officiels décrivant les aspects et spécifications techniques de l'Internet, ou de différents matériels informatiques (routeurs, serveur DHCP). Peu de RFC sont des standards, mais tous les documents publiés par l'IETF sont des RFC.

Dans une RFC, des ingénieurs ont demandé à ce que Powershell envisage d'ajouter des opérateurs && et || de type Bash. Robert Holt, ingénieur de l'équipe Powershell répondant au pseudonyme rjmholt a expliqué ceci :

Implémenter && et ||.

Une instruction comme cmd1 && cmd2 devrait se comporter comme cmd1; if ($?) { cmd2 }.

Je voudrais avoir des retours sur ce Pull-Request concernant une telle implémentation et les tests (je suis toujours à la recherche de nouveaux tests!).

Notez s'il vous plaît :
  • J'ai choisi l'indicateur de fonctionnalité expérimentale en partant du principe que :
    1. nous devrions tester les nouvelles fonctionnalités de langage le plus largement possible,
    2. et en faisant de la syntaxe une fonctionnalité expérimentale afin que les tests ne puissent pas utiliser cette syntaxe.
  • Après avoir discuté avec @daxian-dbw, je n’ai pas implémenté les continuations. Ils peuvent être mis en œuvre si vous le souhaitez à l'issue de la RFC.

En fait, cette suggestion ne date pas de maintenant. Des suggestions similaires avaient déjà été faite avant comme celle de mars 2017 par l'ingénieur Michael Klement répondant au pseudonyme mklement0. Il avait expliqué que le style Bash avec les opérateurs de contrôle && et || serait des ajouts pratiques au langage Powershell. Il a donné des exemples pour illustrer son propos disant qu'au lieu d'écrire

Code PowerShell : Sélectionner tout
1
2
3
4
5
6
7
# If command A succeeds, execute command B too. 
csc /nologo file.cs 
if (0 -eq $LASTEXITCODE) { git commit -m 'ok' } 
  
# if command A fails, execute command B. 
csc /nologo file.cs 
if (0 -ne $LASTEXITCODE) { git commit -m 'failed'  }

Quelqu'un serait en mesure d'écrire

Code PowerShell : Sélectionner tout
1
2
3
4
5
# If command A succeeds, execute command B too. 
csc /nologo file.cs && git commit -m 'ok' 
  
# if command A fails, execute command B. 
csc /nologo file.cs || git commit -m 'failed'

Et Michael d'indiquer que « les exemples s'appuient sur des utilitaires externes, mais ces opérateurs seraient tout aussi pratiques pour les commandes natives de PowerShell (où $? Plutôt que $LASTEXITCODE devrait être examiné) ».

Ryan Yates, MVP Microsoft répondant au pseudonyme Kilasuit, a expliqué à Robert Holt :

« Honnêtement, les cas d'utilisation montrés dans le RFC ne rendent pas cela assez clair pour que je puisse penser que c'est un ajout utile au langage, mais c'est peut-être parce que je suis un utilisateur Windows PowerShell de longue date et que, pour certains des cas d'utilisation, j'aurais déjà codé les avantages supposés que cela pourrait apporter de manière beaucoup plus lisible subjectivement parlant

« J'ai un autre problème clé avec la RFC, c'est le fait qu'il soit prémarqué comme étant prévu pour implémentation. Techniquement, cela se lit comme si vous aviez rempli le RFC et, quels que soient les commentaires reçus, cela se produira. Ce qui, je l’espère, n’est pas le cas et que les commentaires ici seront correctement pris en compte (comme ils le devraient également pour les autres RFC)

« Je pense que cela devrait être renommé Désir d'implémenter: (Faible | Moyen | Élevé) bien que ce soit un aparté pour le modèle RFC ».

Les opérateurs && et || autorisent l’exécution conditionnelle d’une commande cmd suivant la valeur du code de retour de la dernière commande précédemment exécutée.

Opérateur : &&Syntaxe : cmd1 && cmd2Le fonctionnement est le suivant : cmd1 est exécutée et si son code de retour est égal à 0, alors cmd2 est également exécutée.

Code Bash : Sélectionner tout
1
2
3
4
$ grep daemon pass && echo daemon existe 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh 
daemon existe 
$

La chaîne de caractères daemon est présente dans le fichier pass, le code de retour renvoyé par l’exécution de grep est 0 ; par conséquent, la commande echo daemon existe est exécutée.

Opérateur : ||Syntaxe : cmd1 || cmd2cmd1 est exécutée et si son code de retour est différent de 0, alors cmd2 est également exécutée.

Pour illustrer cela, supposons que le fichier tutu n’existe pas.

Code Bash : Sélectionner tout
1
2
3
4
5
6
7
8
$ ls pass tutu 
ls: impossible d'accéder à tutu: Aucun fichier ou dossier de ce type 
pass 
$ 
$ rm tutu || echo tutu non efface 
rm: impossible de supprimer «tutu»: Aucun fichier ou dossier de ce type 
tutu non efface 
$

Le fichier tutu n’existant pas, la commande rm tutu affiche un message d’erreur et produit un code de retour différent de 0 : la commande interne echo qui suit est donc exécutée.

Source : Pull-Request

Et vous ?

Utilisez-vous PowerShell ?
Que pensez-vous de cette proposition ?

Voir aussi :

Microsoft avance que la prochaine itération de PowerShell Core sera baptisée PowerShell 7, l'éditeur explique pourquoi il envisage de supprimer "Core"
PowerShell Core 6.1 est disponible : support de .NET Core 2.1, compatibilité avec les modules Windows, cmdlets et rendu Markdown et plus
PowerShell est maintenant disponible sur Linux en tant que paquet snap, pour une meilleure prise en charge des distributions Linux
Vous pouvez maintenant utiliser Linux pour administrer à distance des machines Windows, avec un accès distant PowerShell via SSH

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de ericlm128
Membre expert https://www.developpez.com
Le 03/09/2019 à 7:54
Perso, je préfère voir cette syntaxe plus clair :
Code powershell : Sélectionner tout
Get-ChildItem z:\; if ($?) { Write-Host success } else { Write-Host failed }
Code powershell : Sélectionner tout
Get-ChildItem z:\; if (!$?) { Write-Host failed }

Je suis d'avis que l'implémentation de l'opérateur conditionnel ou ternaire issu de langage évolué serait plus intéressant.
2  0 
Avatar de Laurent Dardenne
Rédacteur https://www.developpez.com
Le 04/09/2019 à 19:26
Salut,
Citation Envoyé par ericlm128 Voir le message

Je suis d'avis que l'implémentation de l'opérateur conditionnel ou ternaire issu de langage évolué serait plus intéressant.
C'est en cours, du coup il faut modifier les outils.
Ensuite la présence de ce type d'opérateur n'oblige pas son utilisation, on pourrait aussi épiloguer qu'il y a des points plus intéressants à corriger et/ou à ajouter ...
0  0