Modo corretto per inizializzare le variabili in PowerShell

7

Esiste una pratica preferita sull'inizializzazione di variabili che vengono prima definite all'interno di un ramo di codice, o è questa preferenza puramente soggettiva / personale?

vale a dire. ci sono molti modi in cui questo può essere fatto; il più ovvio dei quali sono i seguenti:

#option 1
[string]$path = ''
if ($ENV:PROCESSOR_ARCHITECTURE -like '*64') {
    $path = ${env:ProgramFiles(x86)}
} else {
    $path = $env:ProgramFiles
}
Get-ChildItem $path 


#option 2
[string]$path = $env:ProgramFiles
if ($ENV:PROCESSOR_ARCHITECTURE -like '*64') {
    $path = ${env:ProgramFiles(x86)}
}
Get-ChildItem $path 


#option 3
if ($ENV:PROCESSOR_ARCHITECTURE -like '*64') {
    [string]$path = ${env:ProgramFiles(x86)}
} else {
    [string]$path = $env:ProgramFiles
}
Get-ChildItem $path 

Nella maggior parte dei linguaggi di programmazione andresti con option 1 ; cioè avere la variabile dichiarata e predefinita in alto, quindi assegnarla in un ramo successivo. Puoi selezionare option 2 invece se il costo del recupero del valore è insignificante (ad esempio in quanto sopra riportiamo semplicemente una variabile di ambiente, quindi è un'operazione a basso costo, ma se stessimo recuperando un valore da una risorsa esterna / utilizzando una query o un'operazione costosa potremmo preferire option 1 a option 2 ). Allo stesso modo, alcune persone potrebbero preferire l'opzione 1 all'opzione 2 perché illustra meglio le condizioni in base alle quali ogni valore deve essere utilizzato. Option 3 è consentito solo in lingue che non richiedono la dichiarazione di variabili; così è permesso in PowerShell / è la soluzione più economica (cioè il numero minimo di incarichi).

NB: mi rendo conto che il qualificatore [string] è superfluo / che PowerShell lo determinerà automaticamente; questo è solo qualcosa che includo per aiutare a illustrare l'idea della dichiarazione delle variabili (cioè il primo incarico).

Sento un'avversione verso l'opzione 3, probabilmente a causa del mio background in altre lingue; quindi non so se gli altri avrebbero la stessa avversione, o se la maggior parte delle persone pensa solo "questa è la cosa giusta da fare in questa lingua".

Ci sono delle linee guida su questo genere di cose (cioè quando non ci sono considerazioni di rendimento o fattori aggiuntivi per informare meglio la decisione)?

    
posta JohnLBevan 16.08.2016 - 14:25
fonte

2 risposte

10

Questo è molto supponente e ogni programmatore professionista non dovrebbe avere problemi a leggere e comprendere ciascuna delle varianti. Tuttavia, ecco una versione che evita la ripetizione superflua della variabile $path , quindi è più ASCIUTTA di qualsiasi delle 3 alternative:

[string]$path = if ($ENV:PROCESSOR_ARCHITECTURE -like '*64') {
        ${env:ProgramFiles(x86)
    } else {
        $env:ProgramFiles
    }

Per renderlo un po 'più leggibile, probabilmente introdurrei una variabile esplicativa per l'espressione $ENV:PROCESSOR_ARCHITECTURE -like '*64' (ma questo è qualcosa che farei per ognuna delle quattro varianti, e quindi ortogonale alla tua domanda). cioè.

[bool]$isX64Processor = $ENV:PROCESSOR_ARCHITECTURE -like '*64'
[string]$path = if ($isX64Processor) {
        ${env:ProgramFiles(x86)
    } else {
        $env:ProgramFiles
    }
    
risposta data 29.04.2017 - 11:36
fonte
1

Non penso che esista un modo universalmente preferibile. Userei l'opzione 1 se la determinazione del valore finale fosse un processo complesso. Se un valore fosse il più probabile e un altro un caso eccezionale, andrei con l'opzione 2.

    
risposta data 29.04.2017 - 09:23
fonte

Leggi altre domande sui tag