[Python] un bel dilemma

enrico franchi enrico.franchi a gmail.com
Lun 27 Lug 2015 10:49:44 CEST


2015-07-24 18:11 GMT+01:00 Nadir Sampaoli <nadirsampaoli a gmail.com>:

> Ecco, una cosa che cambierei in python è la semantica del corpo della
> funzione, come espressione invece che come statement (vedi
> rust/haskell/ruby/ecc).
>
Per fare questo devi stravolgere il linguaggio. In pratica devi fare
scomparire il concetto di statement. Che va bene.
Pero' poi devi accettare:

if a = 3:
    print a

cosa sara' a?

Oh, volendo puoi fare stravolgimenti della grammatica per fare funzionare
comunque come si vuole... ma in generale se vai in direzione del "tutto e'
un'espressione, ci vai fino in fondo."

Comunque la "semantica del corpo della funzione" (che non mi e' chiaro cosa
intendi) non sembra a prima vista il problema.

Diciamo che per poter dire che "return e' obbligatorio" (che risolverebbe
il problema di cui sopra) devi essere in grado di dimostrare staticamente
che ogni path di esecuzione incontra un return. Che probabilmente non e'
eccessivamente complicato da fare.

E ovviamente avresti un botto di funzioni che finiscono con return None.
Oggettivamente non e' che mi piace troppo... pero' va bene cosi'.

> Il null implicito fa molto php.
>
I linguaggi che menzioni .. a parte che per certi versi Rust non fa una
cosa troppo diversa da Python. Se non metti return, lui ritorna (). Dopo di
che il fatto che sia staticamente tipizzato mi fa anche pensare che se
provi ad usare () per assegnarlo a qualcosa che non dovrebbe avere quel
tipo intervenga.

Per il resto, gli altri linguaggi che menzioni di fatto hanno altre
convenzioni: per esempio che l'ultima espressione che compare e' quella che
viene ritornata. La cosa e' relativamente ovvia e poco sorprendente nei
linguaggi "veramente" funzionali. E una volta che hai static typing, anche
la gamma di errori che puo' causare cala moltissimo. In Ruby? Non cosi'
intuitivo, dal mio punto di vista. Fra le due, preferisco il None implicito
rispetto che "quello che e' ultimo implicito".




-- 
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150727/eb6d7479/attachment.html>


Maggiori informazioni sulla lista Python