Il giorno ven, 05/02/2010 alle 09.15 +0100, Raffaele Salmaso ha scritto: > Marco Dalla Stella wrote: > > (Per dovere di cronaca, a me piace 0==False). > A me sinceramente no. > Un booleano è un booleano. > Un numero è un numero. > Questa è l'unica cosa che preferisco di java (ahia...) > Concordo che sia molto comodo, estremamente comodo, anche se preferirei > *esplicitare* il fatto che voglio un booleano, invece di averlo > implicito, e ovviamente forzare le condizioni ad accettare *solo* ed > *esclusivamente* dei booleani. Ad es invece di > if ret_code: ... # con ret_code non booleano > preferirei (anche a costo di qualche carattere in più) > if bool(ret_code): ... >
La mia impressione è che mandi a quel paese il duck typing in generale, quando "basterebbe", per risolvere il problema originale, creare un tipo Bool che si comporti esattamente come un int (e in particolare True che si comporta esattamente come 1) ma non sia un int, e penso che la rationale per la situazione attuale sia solo e soltanto la semplicità d'implementazione - su cui non ho da discutere. Certo, qualche cosa un po' controintuitiva potrebbe restare, nel senso che avremmo (scusa Enrico per lo spoiler): >>> 1 == True False >>> 1 + 1 == 1 + True True Ma questa cosa _non è affatto controintuitiva_ per chi non parta già assumendo che i booleani siano numeri. Ora, siccome l'affermazione "i booleani non sono necessariamente numeri" è ancora più forte di "i booleani non sono necessariamente int" e può far rizzare i capelli in capo a molti (i booleani sono nati come un'algebra, non come due oggetti qualsiasi in un campo di patate), faccio notare che l'algebra booleana non prevede affatto che True + True faccia 2 (o se preferite, per rimanere più aderenti all'algebra booleana dovremmo forse avere bool(2) = False) - o se volete che "+" sia intepretato come il "vel" booleano e il "-" come "né", non prevede affatto che True + True - True faccia True. In conclusione: i booleani "comodi", con cui si può fare giochetti come quello dei triangoli, _non_ sono l'algebra booleana standard, per cui è difficile che la matematica ci doni qualche regola indiscutibile. Alla fine penso sia veramente una questione di comodità. A questo punto, la domanda è, a parità di duck typing, cosa abbia di comodo 0 == False, e l'unica risposta che sono in grado di formulare è "facilità di implementazione". Pietro _______________________________________________ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python
