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

Cesco dev a cesco.it
Ven 1 Apr 2011 09:07:09 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.

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.
Sarà vero quello che dite voi, che Python insegna a responsabilizzarsi, sarà vero quello che scrive Marco Beri che Python è un linguaggio fortemente tipizzato, però... vi spiego il mio malumore con un esempio

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;
}

e se Caio ci prova soltanto a scrivere:

System.out.println(gigetto("Ajeje", "Brazorv"))

Java s'incavola chiedendogli cosa diavolo vuole fare:

"method gigetto in class X cannot be applied to given types
required: int, int
found: java.lang.String, java.lang.String"


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 ?


Maggiori informazioni sulla lista Python