[Python] 2 neo pythonisti che affrontano un orda barbara di javisti - con quasi-rissa finale

Carlos Catucci carlos.catucci a gmail.com
Ven 1 Apr 2011 09:51:17 CEST


> Posso dire nel mio piccolo la mia su Python vs Java ? Non ho grandi esperienze in nessuno dei due linguaggi, però vengo dal mondo ovattato di Visual Studio e come programmatore sono stato viziato e cresciuto nella bambagia.

Ah questi mollaccioni :)

VS e', lo ammetto, un bell'IDE. Se togliamo pero' la parte di design
grafico delle form direi che WingIDE (ad esempio) nulla abbia da
invidiare, anzi.

> Dopo aver provato per poche settimane entrambi i linguaggi a pelle mi sta più simpatico Python di Java, però a volte ha degli atteggiamenti che mi stanno un po sulle balle.

It' the Guido's way :)

> Ci sono due programmatori Python, Tizio e Caio.
> Un giorno Tizio, che è un programmatore sciatto che non inserisce nemmeno una riga di docstrings, scrive:
>
> def gigetto(a, b):
>        return a + b
>
> Il giorno dopo arriva Caio, legge il codice e si domanda cosa fa gigetto. Somma due numeri? Concatena due stringhe? Si perchè quando Caio prova a passare diversi parametri ottiene risultati diversi
>
> print(somma(4, 3)) # Restituisce il numero 7
> print(somma("Ajeje", "Brazorv")) # Restituisce "AjejeBrazorv"
>
> Vero che Tizio avrebbe potuto scrivere due righe di codice in più per verificare i tipi dei parametri passati a gigetto, però è altrettanto vero che in java un problema non si sarebbe posto, perchè tizio avrebbe probabilmente scritto:
>
> public int gigetto(int a, int b) {
>        return a + b;
> }

In python il secondo programmatore, democraticamente, picchia il
primo. Il primo inizia a mettere la docstring. Problema risolto in
maniera semplice ed efficiente :)


> e se Caio ci prova soltanto a scrivere:
> System.out.println(gigetto("Ajeje", "Brazorv"))
> Java s'incavola chiedendogli cosa diavolo vuole fare:

Lessi un tempo (tanto tempo fa, visto che era un libro sul C++ Builder
di Borland) un esempio calzante.

Paragone tra Pascal e C. Nel primo sei costretto a fare le cose in
maniera pulita ed ordinata pena la non compilazione del codice. Non
puoi fare porcate o prendere scorciatoie pericolose. Il secondo ti
lascia libero di fare le peggio cose, e se hai un bug poi sono tutti
c....i tuoi. Ma potendo scegliere scegli un linguaggio (C) dinamico e
agiloe oppure uno (pascal) bolso e rigido?

Come sempre la risposta e': dipende da chi sei, da come ti piace
lavorare, da cosa devi fare, etc.

Io preferisco l'agilita' di Python. Fare refacttoring in ython e' per
me 100 volte piu' semplice che in Java. Cosi' come farl;o in Java (o
C#) e 100 volte piu' facile che farlo in C++. Poo de gustibus.

> Io difatti per risolvere il problema alla radice in python scrivo:
>
> def gigetto(a, b):
>        assert isinstance(a, int)
>        assert isinstance(b, int)
>        return a + b

> e questo mi aiuta ad ottenere un comportamento simile a quello di Java.
> Sono io che sbaglio qualcosa o è normale e ci devo fare l'abitudine ?

Formallmente corretto, personalmente forse cercherei una strada
diversa. A naso gia' eseguire il controllo (soo uno ) sul valore da
tornare ad esempio, se proprio devo. C'e' da dire che probabilmente il
nome della function o method sarebbe parlante (tipo sommaInteri( a, b
): ) e non gigetto.

Carlos
-- 
Se resiste al "-9" sinceramente non so come ammazzarlo.
(Andrea Baron)


Maggiori informazioni sulla lista Python