Question
Comment définir une fonction ? (Résolu)
- Pazefur
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 32
- Remerciements reçus 0
il y a 17 ans 2 mois #3736
par Pazefur
Réponse de Pazefur sur le sujet Re:Lancer une commande
Merci pour tes précieuses explications je pense avoir pigé le truc
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 17 ans 2 mois #3746
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Lancer une commande
Salut !
Moi ce que j'aime avec PowerShell c'est qu'on en apprend tous les jours
. Ca va vous parraître dingue mais je me souvenais pas qu'on pouvait définir une fonction de cette manière :
[code:1]function add ([int]$a,[int]$b) {
$a + $b
}[/code:1]
Ce n'est donc pas une manière de faire que j'apprend à mes élèves (eh, oui je suis devenu formateur PowerShell de temps à autres
, lorsque mon emploi du temps me le permet).
Ce que j'enseigne c'est l'utilisation des arguments et des paramètres; à savoir pour utiliser les arguments :
[code:1]function add {
$args[0] + $args[1]
}[/code:1]
Ce qu'il faut savoir c'est que les arguments de la ligne de commande sont stockés dans le tableau $args. On ajoute donc le premier élément du tableau avec le second.
Version avec les paramètres:
[code:1]function add {
param ([int]$a,[int]$b)
$a + $b
}[/code:1]
Utilisation :
[code:1]PS> add 3 2[/code:1]
ou
[code:1]PS> add -a 3 -b 2[/code:1]
L'utilisation des paramètres donne plus de souplesse aux fonctions; entre autres on peut inverser leur ordre lors de l'appel de la fonction. Mais aussi les initialiser au cas ou l'on oublie de fournir une valeur.
Exemple :
[code:1]function add {
param ([int]$a=3, [int]$b=2)
$a + $b
}[/code:1]
Utilisation :
[code:1]PS> add
5[/code:1]
Bon apprentissage de PowerShell...
Arnaud<br><br>Message édité par: Arnaud, à: 15/01/09 22:31
Moi ce que j'aime avec PowerShell c'est qu'on en apprend tous les jours
[code:1]function add ([int]$a,[int]$b) {
$a + $b
}[/code:1]
Ce n'est donc pas une manière de faire que j'apprend à mes élèves (eh, oui je suis devenu formateur PowerShell de temps à autres
Ce que j'enseigne c'est l'utilisation des arguments et des paramètres; à savoir pour utiliser les arguments :
[code:1]function add {
$args[0] + $args[1]
}[/code:1]
Ce qu'il faut savoir c'est que les arguments de la ligne de commande sont stockés dans le tableau $args. On ajoute donc le premier élément du tableau avec le second.
Version avec les paramètres:
[code:1]function add {
param ([int]$a,[int]$b)
$a + $b
}[/code:1]
Utilisation :
[code:1]PS> add 3 2[/code:1]
ou
[code:1]PS> add -a 3 -b 2[/code:1]
L'utilisation des paramètres donne plus de souplesse aux fonctions; entre autres on peut inverser leur ordre lors de l'appel de la fonction. Mais aussi les initialiser au cas ou l'on oublie de fournir une valeur.
Exemple :
[code:1]function add {
param ([int]$a=3, [int]$b=2)
$a + $b
}[/code:1]
Utilisation :
[code:1]PS> add
5[/code:1]
Bon apprentissage de PowerShell...
Arnaud<br><br>Message édité par: Arnaud, à: 15/01/09 22:31
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 2 mois #3754
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Lancer une commande
Allez, une dernière pour la route !
Arnaud écrit:
[code:1]
$ScriptBlock={ $args|Foreach {Write \"args : $_\"}}
&$ScriptBlock 1 2 3
#1
#2
#3
function add ([int]$a,[int]$b) {
$a + $b
&$ScriptBlock $args[0] $args[1] $args[2] #etc
}
add 1 2 3 a b
# 3
# args : 3
# args : a
# args : b
[/code:1]
Ce qui permet des scripts/fonctions/ScriptBlock avec un nombre de paramètres variable. Mais ce n'est pas d'un usage quotidien
Arnaud écrit:
On peut aussi combiner les 2 approches :Ce qu'il faut savoir c'est que les arguments de la ligne de commande sont stockés dans le tableau $args.
[code:1]
$ScriptBlock={ $args|Foreach {Write \"args : $_\"}}
&$ScriptBlock 1 2 3
#1
#2
#3
function add ([int]$a,[int]$b) {
$a + $b
&$ScriptBlock $args[0] $args[1] $args[2] #etc
}
add 1 2 3 a b
# 3
# args : 3
# args : a
# args : b
[/code:1]
Ce qui permet des scripts/fonctions/ScriptBlock avec un nombre de paramètres variable. Mais ce n'est pas d'un usage quotidien
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 17 ans 2 mois #3755
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Lancer une commande
Pour compléter les explications de Laurent et d'Arnaud, le tableau $args récupère tous les arguments qui n'ont pas été \"consommés\" par des paramètres explicitement précisés dans la définition de la fonction. On n'a pas forcément besoin de passer par un scriptblock comme dans l'exemple fourni par Laurent.
[code:1]
function list ($title = \"sans titre\"«»)
{
\"Liste $title : $($args.length) objet(s)\"
if ($args.length) {\"Objet(s) listé(s):\";$args}
}
PS> list courses moutarde sel café
Liste courses : 3 objet(s)
Objet(s) listé(s):
moutarde
sel
café
PS> list
Liste sans titre : 0 objet(s)
[/code:1]
Dans la fonction list ci-dessus, seul le paramètre $title est explicitement précisé. Les autres paramètres (s'il y en a) vont implicitement dans le tableau $args.
Janel<br><br>Message édité par: janel, à: 16/01/09 12:25
[code:1]
function list ($title = \"sans titre\"«»)
{
\"Liste $title : $($args.length) objet(s)\"
if ($args.length) {\"Objet(s) listé(s):\";$args}
}
PS> list courses moutarde sel café
Liste courses : 3 objet(s)
Objet(s) listé(s):
moutarde
sel
café
PS> list
Liste sans titre : 0 objet(s)
[/code:1]
Dans la fonction list ci-dessus, seul le paramètre $title est explicitement précisé. Les autres paramètres (s'il y en a) vont implicitement dans le tableau $args.
Janel<br><br>Message édité par: janel, à: 16/01/09 12:25
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 2 mois #3757
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Lancer une commande
janel écrit:
Ce que je voulais mettre en évidence mais c'est raté, c'est que le tableau $args n'est pas construit seulement lorsqu'on utilise la ligne de commande mais lors de tous passage de paramètre à un bloc de code( ligne de commande/script/fonction/scriptblock).
On va finir par y arriver
C'est vrai.On n'a pas forcément besoin de passer par un scriptblock comme dans l'exemple fourni par Laurent.
Ce que je voulais mettre en évidence mais c'est raté, c'est que le tableau $args n'est pas construit seulement lorsqu'on utilise la ligne de commande mais lors de tous passage de paramètre à un bloc de code( ligne de commande/script/fonction/scriptblock).
On va finir par y arriver
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.097 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Comment définir une fonction ? (Résolu)