5. Variabelen
Een variabele vertegenwoordigt een opslaglocatie voor een waarde en die waarde heeft een type. Traditionele procedurele programmeertalen worden statisch getypt; Dat wil zeggen dat het runtimetype van een variabele is dat waarmee deze is gedeclareerd tijdens het compileren. Objectgeoriënteerde talen voegen het idee van overname toe, waardoor het runtimetype van een variabele kan zijn waarmee deze is gedeclareerd tijdens het compileren of een type dat is afgeleid van dat type. De variabelen van PowerShell zijn een dynamisch getypte taal en hebben niet per se typen. Variabelen zijn in feite niet gedefinieerd; ze worden gewoon tot leven gekomen wanneer ze voor het eerst een waarde krijgen toegewezen. En hoewel een variabele kan worden beperkt (5.3) tot het bevatten van een waarde van een bepaald type, kan type-informatie in een toewijzing niet altijd statisch worden geverifieerd.
Op verschillende tijdstippen kan een variabele worden gekoppeld aan waarden van verschillende typen via toewijzing (7.11) of ++ het gebruik van de operators en ‑‑ (7.1.5, [].7.2.6]§7.2.6). Wanneer de waarde die is gekoppeld aan een variabele wordt gewijzigd, kan het type van die waarde worden gewijzigd. Bijvoorbeeld:
$i = "abc" # $i holds a value of type string
$i = 2147483647 # $i holds a value of type int
++$i # $i now holds a value of type double because
# 2147483648 is too big to fit in type int
Elk gebruik van een variabele die niet is gemaakt, resulteert in de waarde $null. Gebruik de cmdlet Test-Path om te zien of er een variabele is gedefinieerd.
5.1 Beschrijfbare locatie
Een beschrijfbare locatie is een expressie die een resource aanwijzen waarvoor een opdracht zowel lees- als schrijftoegang heeft. Een beschrijfbare locatie kan een variabele (;5), een matrixelement (;9), een gekoppelde waarde in een hashtabel zijn die toegankelijk is via een subscript (;10), een eigenschap (7.1.2) of opslag die wordt beheerd door een provider (3.1).
5.2 Variabelecategorieën
PowerShell definieert de volgende categorieën variabelen: statische variabelen, instantievariabelen, matrixelementen, hashtabelsleutel-waardeparen, parameters, gewone variabelen en variabelen op providerstations. In de volgende subsecties worden deze categorieën beschreven.
In het volgende voorbeeld
function F ($p1, $p2) {
$radius = 2.45
$circumference = 2 * ([Math]::PI) * $radius
$date = Get-Date -Date "2010-2-1 10:12:14 pm"
$month = $date.Month
$values = 10, 55, 93, 102
$value = $values[2]
$h1 = @{ FirstName = "James"; LastName = "Anderson" }
$h1.FirstName = "Smith"
$Alias:A = "Help"
$Env:MyPath = "e:\Temp"
${E:output.txt} = 123
$function:F = { "Hello there" }
$Variable:v = 10
}
[Math::PI]is een statische variabele$date.Monthis een exemplaarvariabele$values[2]is een matrixelement$h1.FirstNameis eenHashtablesleutel waarvan de bijbehorende waarde $h 1['FirstName']' is$p1en$p2zijn parameters$radius,$circumference,$date,$month,$values,$value, en$h1zijn gewone variabelen$Alias:A,$Env:MyPath,${E:output.txt}en zijn$function:Fvariabelen op de bijbehorende providerstations.$Variable:vis eigenlijk een gewone variabele die is geschreven met het volledig gekwalificeerde providerstation.
5.2.1 Statische variabelen
Een gegevenslid van een object dat bij het objecttype hoort in plaats van bij dat specifieke exemplaar van het type wordt een statische variabele genoemd. Zie voor enkele voorbeelden :4.2.3, !4.2.4.1 en !4.3.8 .
PowerShell biedt geen manier om nieuwe typen te maken die statische variabelen bevatten; Objecten van dergelijke typen kunnen echter worden geleverd door de hostomgeving.
Geheugen voor het maken en verwijderen van objecten met statische variabelen wordt beheerd door de hostomgeving en het garbage collection-systeem.
Zie :7.1.2 voor informatie over toegang tot een statische variabele.
Een statisch gegevenslid kan een veld of eigenschap zijn.
5.2.2 Instantievariabelen
Een gegevenslid van een object dat bij een bepaald exemplaar van het objecttype hoort in plaats van bij het type zelf, wordt een instantievariabele genoemd. Zie voor enkele voorbeelden :4.3.1, !4.3.2 en !4.3.3 .
Een PowerShell-hostomgeving kan een manier bieden om nieuwe typen te maken die exemplaarvariabelen bevatten of om nieuwe exemplaarvariabelen toe te voegen aan bestaande typen.
Geheugen voor het maken en verwijderen van objecten met statische variabelen wordt beheerd door de hostomgeving en het garbage collection-systeem.
Zie :7.1.2 voor informatie over het openen van een exemplaarvariabele.
Een gegevenslid van een instantie kan een veld of een eigenschap zijn.
5.2.3 Matrixelementen
Een matrix kan worden gemaakt via een unaire komma-operator (7.2.1), subexpressie (7.1.6), matrixexpressie (7.1.7), binaire komma-operator (7.3), bereikoperator (7.4) of cmdlet New-Object .
Geheugen voor het maken en verwijderen van matrices wordt beheerd door de hostomgeving en het garbage collection-systeem.
Matrices en matrixelementen worden besproken in :9.
5.2.4 Hashtable sleutel-waardeparen
Een hashtabel wordt gemaakt via een hash-letterlijke hash (2.3.5.6) of de cmdlet New-Object . Een nieuw sleutel-waardepaar kan worden toegevoegd via de [] operator (7.1.4.3).
Het geheugen voor het maken en verwijderen van hashtabels wordt beheerd door de hostomgeving en het garbageophaalsysteem.
Hashtabels worden besproken in .10.
5.2.5 Parameters
Er wordt een parameter gemaakt wanneer de bovenliggende opdracht wordt aangeroepen en deze wordt initialiseerd met de waarde van het argument dat is opgegeven in de aanroep of door de hostomgeving. Er bestaat geen parameter meer wanneer de bovenliggende opdracht wordt beëindigd.
Parameters worden besproken in :8.10.
5.2.6 Gewone variabelen
Een gewone variabele wordt gedefinieerd door een toewijzingsexpressie (7.11) of een foreach-instructie (8.4.4). Sommige gewone variabelen worden vooraf gedefinieerd door de hostomgeving, terwijl andere tijdelijke variabelen zijn, die naar behoefte tijdens runtime komen en gaan.
De levensduur van een gewone variabele is dat deel van de programma-uitvoering waarin opslag gegarandeerd voor deze variabele wordt gereserveerd. Deze levensduur begint bij de vermelding in het bereik waaraan deze is gekoppeld en eindigt niet eerder dan het einde van de uitvoering van dat bereik. Als het bovenliggende bereik recursief of iteratief wordt ingevoerd, wordt er elke keer een nieuw exemplaar van de lokale variabele gemaakt.
De opslag waar een gewone variabele naar verwijst, wordt onafhankelijk van de levensduur van die variabele vrijgevorderd.
Een gewone variabele kan expliciet worden benoemd met het voorvoegsel Variabele: naamruimte (5.2.7).
5.2.7 Variabelen op providerstations
Het concept van providers en stations is geïntroduceerd in [].3.1]§3.1, met elke provider in staat zijn om een eigen naamruimte station(s) bieden. Hierdoor kunnen resources op deze stations worden gebruikt alsof het gewone variabelen zijn (5.2.6). In feite wordt een gewone variabele opgeslagen op de schijfvariabele van de bestandssysteemprovider: (3.1.5) en kan worden gebruikt door de gewone naam of de volledig gekwalificeerde naamruimtenaam.
Sommige typen naamruimtevariabelen zijn impliciet beperkt (5.3).
5.3 Beperkte variabelen
Standaard kan een variabele een waarde van elk type aanwijzen. Een variabele kan echter worden beperkt tot het aanwijsen van waarden van een bepaald type door dat type op te geven als een letterlijke waarde van het type vóór de naam in een toewijzing of parameter. Bijvoorbeeld:
[int]$i = 10 # constrains $i to designating ints only
$i = "Hello" # error, no conversion to int
$i = "0x10" # ok, conversion to int
$i = $true # ok, conversion to int
function F ([int]$p1, [switch]$p2, [regex]$p3) { ... }
Elke variabele die behoort tot de naamruimte Env:, Alias:, of tot de bestandssysteemnaamruimte (2.3.2, ;3.1) is impliciet beperkt tot het type string. Elke variabele die tot de naamruimtefunctie behoort : (*2.3.2, !3.1) is impliciet beperkt tot het type scriptblock.
Feedback
Feedback verzenden en weergeven voor