Python VS Java

by Michele

Python logo

Leggendo questo articolo Python & Java: a Side-by-Side Comparison mi riveniva in mente il perché amo così tanto Python. In questo articolo l’autore esordisce con l’affermazione: “A programmer can be significantly more productive in Python than in Java” e poi cerca di capire come mai questa frase sembra essere vera. La realtà è che Python è un linguaggio stringato che mette a disposizione una serie di costrutti e strumenti che permettono di manipolare qualsiasi cosa in maniera semplice.

Se confrontato con Java, Python riesce ad avere prestazioni di tutto riguardo anche se la tipizzazione dinamica lo rende necessariamente più lento. Il fatto che il codice Python non deve essere pre compilato lo rende più veloce da testare ma non meno lento da eseguire. Infatti il codice sorgente viene compilato in una sorta di bytecode in file con estenzione .pyc.

Alcune librerie in Python sono più veloci perché cablate nell’interprete. In Java praticamente tutte le librerie sono scritte in codice Java e la loro esecuzione avviene all’interno della virtual machine. Questo comportamento rende più lente parecchie librerie, che al contrario in Python risultano molto ma molto veloci. Un esempio eclatante sono le espressioni regolari che in Python sono di gran lunga più veloci.

Per quanto riguarda l’OOP non c’è storia! Python supporta praticamente tutti i fondamenti dell’OOP moderno con un approccio molto più pulito rispetto a Java:

  • Ereditarietà (anche multipla)
  • Incapsulamento
  • Polimorfismo

Python permette inoltre di effettuare l’overloading degli operatori. In Java, ad esempio, tanti si chiedono perché le stringe si confrontano utilizzando il metodo equals() invece di usare il classico operatore di confronto ==. In Java non è possibile effettuare l’overloading degli operatori per cui è impossibile ridefinire, per le stringhe, il comportamento dell’operatore ==. Credo che questo sia un grosso limite di Java. Comprendo l’abbandono dell’ereditarietà multipla ma non sopporto questo tipo di limitazioni in un linguaggio moderno.