PowerShell kotiček – atributi

Atributi so oznake, ki jih dodajamo kodi, da z njimi usmerjamo delovanje interpreterja. Najpogosteje se uporabljajo pri izdelavi cmdletnih vmesnikov, kjer je kar precej dela s kontrolo vhodnih podatkov.

V večini programskih jezikov opazimo, da se pri pojavu nepričakovane napake izvajanje ustavi, pri skriptnih jezikih, kot je PowerShell, pa se izvajanje kode kar nadaljuje. Če želimo izvajanje eksplicitno ustaviti, moramo deklarirati:

$ErrorActionPreference ="Stop"

Druge možnosti so še “SilentlyContinue”, “Continue” in “Inquire”. Druge preferenčne in okoljske spremenljivke si bomo ogledali v kakšnem prispevku v prihodnosti.

Deklarativna koda interpreterju pove kaj naj naredi, a imperativna koda določa, kako naj to naredi. Oglejmo si naslednja primera:

[ValidateRange(0, 10)]
[int]$n = Read-Host

In:

[int]$n = Read-Host
if ($n -lt 0 -or $n -gt 10) 
{
	throw [IndexOutOfRangeException]::new()
}

Deklarativna izvedba v prvem primeru interpreterju pove, naj se prepriča, da bo vrednost prebrana v $n spremenljivko med 0 in 10. Kot kontrast temu, za drugi primer potrebujemo več kode uporabljajoč logične operacije in klicanje napak za dosego istega rezultata.

Validacijski atributi so deklarativni, ker definirajo, v kakšnem primeru je spremenljivka veljavna.

Za njih potrebujemo par oglatih oklepajev, ime, parametre (ki so lahko prazni, morajo pa biti prisotni) in vrednost, na katero bo atribut vplival. Na primer:

[AttributeName("param1", "param2")] $value

Atribute lahko uporabljamo pri kateremkoli prireditvenem stavku, tj. ko prirejamo vrednost spremenljivki.

Preprost primer bindinga pri deklaraciji spremenljivke:

[AttributeName("param1", "param2")]

$name = "value"

Primer:

[ValidateSet("abc", "def", "ghi")]

$region = Read-Host

Zgornji primer vrne napako, če ob zagonu kode ne vnesemo enega od naštetih nizov.

Ko se navadimo uporabljati atribute na enostavnih primerih, bo tudi prehod na uporabo validacijskih atributov  pri funkcijskih parametrih in razredih precej bolj enostaven.

Podobno lahko delamo s funkcijskimi parametri:

function Deploy-Cluster {
   Param(
      [Parameter(Mandatory)]
      [ValidatePattern("^[a-z]+-[a-z]+-[a-z]+-[0-9]+$")]
      [string] $ClusterId
    )
}

Dodaj odgovor

Vaš e-naslov ne bo objavljen. * označuje zahtevana polja