views:

1090

answers:

3

Is there any reason to use the "Param( ... )" construction inside a function definition? My understanding is that you should use this for specifying parameters to scripts (and scriptblocks). I see a lot of examples on the web with parameters listed this way instead of just listing the parameters after the function name.

Example:

function Foo([string]$Bar){
   #Body of function
}

Or,

function Foo{
     Param([string]$Bar)

}
+1  A: 

Possibly as a consistency measure? Always specifying parameters the same way improves readability.

Orihara
+12  A: 

In V1, it really is just preference. Using the param statement has traditionally been more formal, but functionally its the same thing.

You will probably see a lot more use of PARAM in PowerShell V2 because of the ability to add attributes to parameters, similar to attributes in C#.

param
(
[Parameter( Mandatory=$true,
            Position=0,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true)]
[Alias("name")]
[String]
$path
)

Here you can specify the parameter attribute and a bunch of arguments to that attribute. You can also specify aliases and a number of other validation requiremets.

Keith makes a couple great points as well. You can use the param statement to pass parameters to annonymous scriptblocks (lambda expressions) or to a PS1 script.

Andy Schneider
+5  A: 

param() is required to specify the parameters for a script file and for scriptblocks:

PS> $sb = {param($x,$y) $x + $y}
PS> &$sb 1 3
4

Having it also be available for traditional functions is just a consistency thing IMO. It is nicer for advanced functions which tend to have a lot of baggage, er metadata, per parameter.

Keith Hill