In una classe Powershell 101 di 4 ore dovrei saltare per / while / do e semplicemente insegnare ForEach-Object [closed]

2

Sto facendo un programma per insegnare a PowerShell i colleghi non programmatori. Il primo gruppo non pilota con cui farò il corso sarà un team che distribuisce e configura uno dei nostri prodotti software. Sono brillanti lavoratori IT motivati intelligenti, ma non programmatori.

Intendo coprire i concetti di base (variabili, matrici, funzioni e cicli) e quindi passare ad esempi che sono vicini al loro dominio problematico. Non sono sposato con una lezione di 4 ore, se necessario posso estenderlo a due lezioni di quattro ore.

Sto giocando con l'idea di saltare per e mentre loop e semplicemente insegnare ForEach-Object. Ho usato personalmente i loop tradizionali e while negli script PowerShell, ma possono sempre essere riscritti come loop ForEach-Object con un po 'di creatività. Una parte di me sente il buon vecchio per ($ i = 0 $ i < foo; $ i ++) è una fondamentale necessaria prima di passare a foreach, ma l'altra parte di me pensa che potrebbe essere me stesso aggrappato al mio Model M e la mia Bibbia K & R .

Per disegnare un'analogia con SQL, non insegnerei mai un CURSOR o altri loop in una lezione di 4 ore perché dovresti essere in grado di fare tutto in SQL come un'operazione SET. In teoria, è necessario attenersi alla pipeline in PowerShell. Uso i loop while e while in PowerShell più spesso di quanto non facciano i cursori e i loop while in SQL. Tuttavia, PowerShell è un linguaggio di scripting e le convenzioni vengono applicate in modo meno rigoroso e spingo anche i limiti di PowerShell con C # in linea e dipendenze eccessive sulla chiamata alle API native di .NET. Il mio pubblico non lo farà.

Per coloro che non sono esperti di PowerShell, sono abbastanza sicuro che non hai effettivamente bisogno di un ciclo for o while. Li uso, ma è perché ho esperienza con altre lingue. Ad esempio se si desidera solo i primi 10 membri di un array di 20 membri:

1..20 | Select-Object -First 10 | ForEach-Object { Write-Host $_ }
    
posta Justin Dearing 08.09.2011 - 12:38
fonte

6 risposte

5

Perché saltarli? Apprezzo che tu sia limitato nel tempo, ma includi la sintassi di ciascuno con un piccolo esempio nelle note del corso per lo meno. Non è necessario spendere più di 30 secondi per descriverli.

Se non riescono a codificare facilmente un "display dei primi 10", penso che tu abbia perso un trucco.

    
risposta data 08.09.2011 - 12:44
fonte
4

Il contatto con i costrutti del ciclo di base è molto importante - se non altro per dare agli studenti una possibilità di combattere quando vedono i costrutti for / while in the wild.

    
risposta data 08.09.2011 - 13:57
fonte
2

Penso che la parte fondamentale del tuo post sia piuttosto esplicativa che non dovresti ignorarli:

I've personally used traditional for and while loops in powershell scripts, but they can always be rewritten as ForEach-Object loops with a bit of creativity.

Sento che è bello sapere come fare i cicli di base per / while / do in modo da poter compiere il passo successivo per realizzare quella creatività. In realtà non ci vuole molto per insegnare loop alle persone, e sarebbe un buon esempio per il ciclo foreach.

Quindi, perché non farlo per / while / do / foreach, e cammina comunque ognuno di essi? Si può anche dire proprio durante l'allenamento che il ciclo foreach-object sarà quello che usano di più, e potresti dedicare più tempo a questo.

    
risposta data 08.09.2011 - 17:49
fonte
1

Penso che questo dipenda dal tipo di esperienza di programmazione che hanno in arrivo -

Se sono principianti e non hanno mai visto loop / strutture di controllo prima che sicuramente abbiano bisogno di vedere la struttura tradizionale for e while : la vedranno allo stato selvatico (in quasi ogni lingua che useranno mai), e non dovrebbe essere una sorpresa quando lo fanno.

ForEach-Object , molto simile al% co_de di Perl è una gustosa scorciatoia immersa nello zucchero sintattico. Dovrebbero saperlo perché risparmia molto digitazione ed è logico quando lo leggi.
Se sono già programmatori (o hanno almeno una certa esperienza limitata) afferreranno velocemente il concetto. In caso contrario, escogitare un ciclo for che è più facile da fare con ForEach-Object e far sì che lo facciano in entrambi i modi (per prima cosa loop, secondo oggetto ForEach) in modo che vedano un vantaggio reale e immediato.

    
risposta data 08.09.2011 - 18:16
fonte
1

Mi trovo a usare i cicli for e while molto in powershell. Quando ho un booleano, scrivo solo while($bool) . Penso che sia importante toccare con mano questi concetti, considerando che si trovano in molti altri linguaggi di programmazione.

Un esempio migliore che potresti non essere in grado di fare con un ciclo foreach (effeciently atleast) è prendere ogni altro oggetto da un array:

for($i=0; $i -le $arr.length-1; $i=$i+2) {$newArr += $arr[$i]}

Mi trovo a usare questo molto dopo un -split

    
risposta data 20.07.2012 - 15:08
fonte
0

Tradizionali per e while loop non credo aggiungano molto valore a un corso di 4 ore. Idealmente stanno seguendo il tuo corso in modo che possano scrivere script e fare cose. Un ciclo ForEach è più semplice e sufficiente per svolgere il lavoro il più delle volte. Se hanno bisogno del tradizionale costrutto di loop, possono sempre apprenderlo quando ne hanno bisogno. La stessa cosa con gli oggetti, non hanno bisogno di una profonda comprensione, quanto basta per sapere come usare i metodi.

    
risposta data 20.07.2012 - 16:13
fonte

Leggi altre domande sui tag