[PIPython] problema mappa

Valentino Volonghi aka Dialtone dialtone
Mer 25 Maggio 2005 13:19:02 CEST


Andrea Giammarchi wrote:

> esempio uscita da for o while
> for( i = 0; i < 1000; i++) {
> if( condizione ) {
> i = 1000; // esce dal for
> }
> }

Questo non e` per nulla pulito. Ma per nulla. E` un'alterazione
inaspettata di
un valore per nessuna buona ragione a mio modo di vedere. Tra l'altro mi
piacerebbe
controllare se il valore di i e` specificato in ANSI C dopo la fine del
ciclo. Se lo fosse
questo e` un modo inaccettabile in modo assoluto.

> while( condizione ) {
> if( sotto_condizione ) {
> condizione = false; // esce dal while
> }
> }

Ottimo, si fa anche in python, non vedo problemi.

> class Break(Exception):
>    def __init__(self, value):
>        self.value = value
>    def __str__(self):
>        return repr(self.value)
>    def get(self):
>        return self.value
>   lista = {('value a'):'a', ('value b'):'b', ('value c'):'c'}
>
> try:
>    for chiave, valore in lista.iteritems():
>        print chiave, valore
>        if valore == 'b':
>            print '-- fine iterazione --'
>            raise Break(lista)
> except Exception, lista:
>    lista = lista.get()
>    for chiave, valore in lista.iteritems():
>        print chiave, valore

Invece di usare una linea con scritto solo break per terminare tutto,
scrivi sto popo` di linee.
Ci saranno piu` possibilita` di avere bachi in un 'break' o in quello
che hai scritto tu?
Bisogna essere pragmatici nella vita. Prima di dire NO a una soluzione
e` utile valutare le alternative,
come hai fatto tu, ma una volta visto che l'alternativa non offre nulla
di meglio (e in questo caso
e` chiaro come l'oro per piu` ragioni, ad esempio hai un except
Exception, ovvero prendi quasi tutto
praticamente.) si torna sulla propria strada.

Perche` mai il break sarebbe adatto agli switch e non al resto? Per
abitudine? ti abituerai anche a
vederlo negli iteratori, l'unico effetto che ha una break e` che, quando
messa in un ciclo (while o for),
obbliga a tornare a un livello di indentazione in meno alla fine del
corpo del for. Cosa che guardando
il codice e` assolutamente immediata e chiara.

Ci sono tanti tanti miti sul perche` evitare di usare X o Y. E ci sono
altrettanti esempi di come usandoli
nel modo giusto X e Y non fanno alcun danno, anzi. Migliorano la
leggibilita`.

-- 
Valentino Volonghi aka Dialtone
Now Running MacOSX 10.3.8
Blog: http://vvolonghi.blogspot.com
http://weever.berlios.de



More information about the Python mailing list