Ciao Ciao while

Il ciclo while ormai sta diventando sempre meno utilizzato nelle applicazioni, qualsiasi sia il linguaggio con cui vengono scritte.

I programmatori tendono a preferire nella maggior parte dei casi il ciclo for o i cicli pre-costruiti (ed utilissimi) for-in e for-each, rispettivamente per gli oggetti e gli Array.

Questo perchè il ciclo for garantisce una maggiore flessibilità: è possibile inserire in una sola riga sia la variabile da incrementare che  i valori iniziale/finale.

Voi che ne dite, è meritata questa fama del ciclo for rispetto al ciclo while?

25 commenti:

  1. Alka, 8 Novembre 2007

    Meglio for al 100%!

     
  2. creativeLine, 8 Novembre 2007

    Effettivamente il for è molto più utilizzato, ma io uso anche il while, non l’ho ancora “accantonato”. Piuttosto dipende da quello che devo scrivere la scelta

     
  3. RD, 8 Novembre 2007

    @Alka: tu hai abbandonato definitivamente il while?

     
  4. Alka, 9 Novembre 2007

    Direi di si, non volontariamente, ma piuttosto non trovo più l’occorrenza per utilizzarlo…

     
  5. Snot, 9 Novembre 2007

    Abbandonare completamente un costrutto è una cosa da evitare secondo me, capita sempre l’occasione in cui è meglio ricordarsi qualcosa in più ;)

     
  6. RD, 9 Novembre 2007

    @Snot. concordo :)

     
  7. Cristiano, 13 Novembre 2007

    Il comando WHILE costituisce la base di quella che una volta era considerata la programmazione condizionale (utilizzata principalmente per fini didattici) che si contrapponeva a quella iterativa (usata pricipalmente per il calcolo numerico): Pascal contro Fortran.
    La maggiore diffusione di linguaggi “sporchi” (così si definivano ai miei tempi) come il C ha fatto proliferare nelle sue successive incarnazioni come C#, Java, Javascript i costrutti a cicli autoincrementanti o ad iterazione sugli insiemi.
    Il WHILE … WEND come anche il REPEAT … UNTIL restano comunque la base della scrittura del codice “pulito” e “leggibile”, meglio non dimenticarli mai …
    Un saluto ;-)

     
  8. RD, 14 Novembre 2007

    Ciao Cristiano, mi è piaciuta questa tua riflessione, anche perchè sinceramente non ero a conoscenza di questi retroscena che hai presentato.

    Concordo pienamente con il tuo parere e con quello di Snot: accantonare completamente un costrutto è una cosa da evitare, piuttosto bisogna prendere maggiore confidenza con quelli a noi più utili ;)
    All’interno di moo.rd ad esempio, che è una libreria molto compatta, faccio un largo uso dell’operatore condizionale “? :” che permette notevoli risparmi di codice quando è usato in sostituzione al ciclo if/else contentente due sole righe.

     
  9. Snot, 14 Novembre 2007

    @Cristiano: quello che hai scritto è esattamente quello che intevo, scritto in un italiano più forbito :)

     
  10. creativeLine, 14 Novembre 2007

    @Cristiano: posso chiederti che cms usi per il tuo blog (ho visto il simbolo sulla destra :) )?

     
  11. Cristiano, 14 Novembre 2007

    @Riccardo: una delle caratteristiche salienti di tutti i linguaggi C-like è proprio la compattezza del codice. A volte, innestando le funzioni una all’interno dell’altra (io lo chiamo effetto Matrioska) si riesce a fare in una sola riga quello che con altri linguaggi richiederebbe un’intera procedura ;-)
    @Snot: “forbito” non è un insulto, vero? Scherzo, ti ringrazio per l’uso dell’aggettivo :-)
    @creativeLine: uso BlogEngine.NET, con diverse personalizzazioni.

     
  12. Snot, 15 Novembre 2007

    Penso sia un aggettivo positivo :) Intendo dire che hai detto davvero bene delle giuste :)

     
  13. RD, 15 Novembre 2007

    @Cristiano: personalmente adoro quando il codice è compatto ;)

     
  14. creativeLine, 15 Novembre 2007

    Grazie, non ho mai sentito parlare di BlogEngine, ma penso che gli darò un’ occhiata :)

     
  15. annarita, 19 Novembre 2007

    Ma che bello trovare il preparatissimo Cristiano qui sul blog del bravissimo Riccardo! Ma quanto sono fortunata ad avere due amici così?

     
  16. RD, 20 Novembre 2007

    Annarita anche noi possiamo contraccambiare pienamente con te, che sei una bravissima blogger e un’ottima scrittrice ;)
    Mi ha fatto molto piacere la visita di Cristiano, e spero di trovare un’altra occasione per scambiare riflessioni/cenni informatici con lui. ;)

     
  17. RaZoRxan, 22 Novembre 2007

    personalmente credo che il while sia piu flessibile, anche perche’ utlizzando cicli for si è costretti a scorrerli tutti fino alla fine (a patto di non utilizzare i vari break etc che sono veri e propri orrori della programmazione).
    il controllo condizionale che ti permette un while è sempre superiore. Sono convinto che l’utilizzo sfrenato dei cicli ripetitivi for sia dovuto all’espansione di quella che chiamano computer science, all’interno della collettività che, per sua natura, tende a far proprie metodologie piu’ immediate (ma non sempre piu prestanti).

     
  18. RD, 22 Novembre 2007

    RaZoRxan cosa intendi, per, break e continue, che sono orrori della programmazione?

    Secondo me sono utili in una moltitudine di casi, soprattutto l’istruzione continue.

    Concordo invece con il fatto dell’espanisione della computer science, che diffonde dei “metodi” o “stili” di programmazione, e che vengono poi utilizzati da molti sviluppatori.

     
  19. RaZoRxan, 22 Novembre 2007

    Cito il teorema di (se non erro) Jacopini secondo cui tutti gli algoritmi sono codificabili mediante controlli condizionali e cicli ripetitivi while. Il for(classico) ha un senso motodologico chiaro, ovvero quello di semplificare lo “scorrere” di array (o qualsiasi altro dato strutturato primitivo e non), ma nel caso dei for in e for each (e soprattutto nell’uso dei break e continue, di cui tra l’altro non depreco l’utilizzo ma l’abuso) il senso è diverso: a mio modesto parere sono totalmente, univocamente e ARBITRARIAMENTE introdotti per semplificare e , lasciatemi passare il termine, “umanizzare” un linguaggio, in parte sminuendo il compito del programmatore. Il mio attaccamento a questa discussione proviene da una serie di esperienze personali, e credo non solo mie, nelle quali mi è stato facile imbattermi in programmatori improvvisati. Secondo me il punto della discussione è proprio questo: il problema che tu poni giustamente è per me dunque un indice chiaro di cio’ che si delinea nella computer science, professionale ed amatoriale.

     
  20. Cristiano, 23 Novembre 2007

    @RaZoRxan e @Riccardo: la presenza dell’istruzione for in quasi tutti i linguaggi dichiarativi ha una valenza strategica nonchè di retrocompatibilità. Era presente anche nel primo Pascal, anche se fortemente deprecato. Qualunque risultato si debba raggiungere mediante un ciclo for si può molto più elegantemente raggiungere anche con l’ausilio della programmazione condizionale: in Pascal ad esempio i vettori si possono obliare con liste accessibili tramite programazione ricorsiva.
    Spezzare il flusso di una procedura chiudendo forzatamente un ciclo è effettivamente sempre sconsigliato dai puristi della programmazione.

    @RaZoRxan: condivido la tua analisi. Ricorrere al ciclo è tipico dello sviluppatore non sufficientemente addestrato che, magari con migliori basi teoriche, potrebbe produrre risultati migliori. E’ uno degli effetti collaterali del dilagare su internet di script e procedure già pronte che favoriscono quella che alcuni chiamano “la programmazione del copia e incolla”.
    La grande rete è una fonte inesauribile di sapere: un mare magnum che, se non affrontato con le giuste cognizioni di causa, può anche farti “soccombere” in esso. Meglio affrontarlo avendo prima almeno imparato a “nuotare” :-)
    Un saluto ad entrambi.

     
  21. RD, 23 Novembre 2007

    @RaZoRxan: concordo con il "distillato" di teorie che esponi.

    @Cristiano: la tua opionione è corretta, ma secondo me dovresti "differenziare" maggiormente i linguaggi di programmazione. Javascript, ad esempio, è un linguaggio che eredita caratteristiche da molti altri linguaggi di programmazione, ma ha uno stile completamente differente.
    Sarebbe impensabile scrivere un’applicazione nella quale si vuole iterare su array ed oggetti senza fare uso di cicli, for, while o each che siano, soprattutto quando si lavora con collezioni di elementi di una pagina, e si ha spesso la necessità di filtrarli (per classe, attributo, e cosi via). Uno dei maggiori punti di forza di un framework Javascript è proprio questo: dare più forza ad un ciclo e renderlo, come dice RaZoRxan, più "umanizzato". Ad esempio con questo ciclo "each" (un evoluzione dei while e for), si può iterare su di una collezione di elementi filtrandoli ed avendo a disposizione praticamente tutti gli strumenti necessari, in una sola riga di codice. $$('.myClass li').each(function(li, index) {
    alert(li.id);
    })

    Senza contare la possibilità di effettuare il "bind" o altri metodi personalizzati per gli array.

    Molto probabilmente questo accade esiguamente nei linguaggi che esponi. Queste e altre tecniche vanno differenziate da altre sempre presenti nella rete e ovviamente molto meno eleganti :)

     
  22. Cristiano, 23 Novembre 2007

    @ Riccardo: hai assolutamente ragione! Il mio discorso è ovviamente teorico e si appoggia ovviamente a quelle che sono le basi della programmazione strutturata.
    17 anni fa non si aveva a disposizione la potenza degli odierni strumenti di sviluppo.
    Allo stato dell’arte, se ci fai caso, i linguaggi (e relativi dialetti) di programmazione si assomigliano un pò tutti ed un pò tutti utilizzano gli stessi costrutti anche se con sintassi lievemente differenti: la semantica però è sempre la stessa.
    L’esempio da te proposto appartiene ai costrutti di nuova generazione che nulla hanno a che vedere con il vecchio ciclo for deprecato da RaZoRxan :-) e che consentono, come giustamente sottolinei, l’implementazione di procedure compatte e semanticamente ineccepibili.
    Attenzione però: codice compatto non vuol dire esecuzione più veloce, soprattutto nei linguaggi interpretati come Javascript, ma sicuramente notevole risparmio di tempo nella scrittura del codice … ;-)
    Sono molto contento di aver partecipato a questa discussione: credo che ad oggi, da quando ho deciso di partecipare un pò più attivamente (ho lurkato per anni) alla cosiddetta vita “web social”, questo sia il post che mi ha maggiormente coinvolto.

     
  23. RD, 23 Novembre 2007

    @Cristiano: anch’io sono davvero felice di avere intrapreso questo scambio di opinioni professionali con persone come te e RaZoRxan e tutti gli altri che hanno partecipato a questa discussione esprimendo il proprio parere, e mi fa piacere che questo sia stato il post che ti ha conivolto maggiormente ;)
    Sto preparando infatti un nuovo articolo sempre riguardante i costrutti e della programmazione e le diverse metodologie di scrittura del codice, stay tuned :)

     
  24. RaZoRxan, 23 Novembre 2007

    quoto entrambi e sottoscrivo pienamente la vostra felicità per questo scambio di opinioni. :) alla prossima.

     
  25. RD - riccardodegni.it » Compatto o leggibile? (Pingback), 28 Novembre 2007
     

    [...] l’interessante dibattito scaturito dall’articolo "Ciao ciao while", ho deciso di dedicare un altro quesito riguardo alle variopinte tecniche di [...]

     

Scrivi un commento: