Java offers a lot nowadays, but 'over time become something of extremely hard-working tools for those who want to have much' lighter, 'fast development. Let's just say that there 's a great flexibility' it a form of rapid development in java. Often a web application we have to resort to some configuration file appropriately prepared to have something minimal running, and learn how to write java server pages if you do not want to talk about writing servlet.
I began to develop scripts and applications in python 3d, gradually reading a manual to figure out the correct syntax. After giving a look at language in general I thought (wrongly): "Well, python seems to deploy more ' o meno tutti i concetti della programmazione ad oggetti, come gli ultimi php, e mantiene tutta la semplicita di un linguaggio interpretato, e per un esperto JAVA non puo' essere difficile immergersi in questa nuova sintassi". Ah... mai pensieri furono piu' sbagliati.
La verita' e' che forse aver capito la programmazione ad oggetti e' sicuramente indispensabile per grossi progetti, ma di sicuro chi e' abituato alla verbosita'/solidita' sintattica e logica del java si deve ricredere con python. Il modo in cui sono realizzati i concetti di object oriented sono quasi completamente diversi.
Tanto per avvisare l'incauto programmatore java ci sono alcune cose di cui bisogna essere a conoscenza, pena il riscrivere un sacco di codice:
1 - La spaziatura delle indentazioni : (i 4 spazi sono una convenzione, e chi non la segue rischia di non adattare il proprio codice a script di altre persone).
2 - Non dovete dichiarare le variabili neanche a livello di classe, potete aggiungerne a iosa anche durante l'esecuzione, questo porta sicuramente ad un possibile mal utilizzo delle classi di per se'.
3 - Non esiste il concetto di statico, ma qualcosa di simile e' implicito nel linguaggio. Capire tuttavia cosa succede in caso di classi che ereditano altre classi diventa difficile, e quando ci riferiamo ad una variabile non sappiamo esattamente che cosa stiamo modificando.
Vi spiego un attimo cosa succede se usiamo dizionari e interi allo stesso modo:
class C():
i={}
def change(self,val): self.i["foo"]=val
class Cson1(C):
i={'foo':1,'bar':2}
class Cson2(C):
i={'foo':3,'bar':4}
print C.i
print Cson1.i
print Cson2.i
cson1A=Cson1()
cson1B=Cson1()
cson2A=Cson2()
cson1B.i["foo"]=50
print cson1B.i
print cson1A.i
cson1B.change(20)
print cson1B.i
print cson1A.i
print C.i
class Z():
i=0
def change(self,val):
self.i=val
class Zson1(Z):
class Zson2 i = 5 (Z): i = 10
Zi
print print print Zson1.i
Zson2.i
zson1A Zson1 = () =
zson1B Zson1 () =
zson2A Zson2 ()
zson1B. i = 50 print
zson1B.i
print zson1A.i
zson1B.change (20)
zson1B.i
print print print zson1A.i
Zi
Try to run this simple code and you'll be amazed of how the dictionary of an instance has modified / overwritten in reality 'the dictionary of other instances (class C and heirs), unlike what happens for the management of integers (Z class and heirs). In the manual, if you want clarification (I that of 2.5 of O'Reilly), and 'written precisely the way in which the variables can be defined, and what happens when we act on them, but it' s difficult to understand without examples of the dangers behind it.
4 - implicitamnetne Some variables are global, such as instances of a class I never had to declare them in a comprehensive final.
5 - The contents of a final, having parameters that can change their nature from time to time, is not analyzed in the compilation, if not for the correct syntax on the keywords and punctuation. Only
already 'these things are enough to create the following problems: possibly use the same editor, and the same settings, non fare linee molto lunghe ne' usare il text wrapping, stare molto attenti a come vengono definite le variabili all'interno della classe, seguire e avere sempre bene presente in mente come esse sono state inizializzate e quando.
Quindi, da un lato abbiamo java, con il quale tutto e' strutturato nei minimi dettagli, ed e' quasi impossibile sbagliare a livello di compilazione (e quindi e' quasi impossibile sbagliare ad utilizzare le classi create). Tuttavia se non abbiamo un editor (vedi Eclipse) che ci completa la maggior parte del linguaggio, perche' troppo verboso, e se non impostiamo tutto a puntino, diventa difficile per un neo programmatore capirci qualcosa, e arrivare a scrivere grossi progetti. La curva di apprendimento e' sicuramente piu' lenta, e raggiungere un risultato richiede quasi sempre molto codice.
Dall'altra abbiamo python , che si programma anche con un blocco note / gedit e velocemente, ma essendo il compilatore estremamente semplificato, solo a tempo di esecuzione si scoprono errori.
La cosa che saltera' all'occhio ai programmatori java e' che un editor di Python come pydev e' quasi inutile se si utilizzano classi a go-go e istanze run-time. Infatti vedrete che l'auto completamento in questi casi non funziona ovviamente e in piu' vi trovate a gestire eventuali errori solo dopo aver spulciato tutti i vari modi di far girare il vostro codice.
Il mio parere e' che Python e' uno strumento fantastico, velocissimo nella parte di sviluppo, pieno libraries for everything, including all the language needs classical and modern (xml, html, input devices, etc ...). Often, however, 'flexibility' over the language makes me think that for most projects 'structured and involve more' people is delegated to them how to organize and how to write code. Python lacks a written language that (unlike Java) and this leads to subjectivity 'impressive and can' lead the programmer to big trouble 'if it is to manage large projects after some time.
So I think the python and java programmer needs to be a bit 'different, but in both languages, given its strengths and weaknesses, sono da ritenersi validi e longevi su tanti ambiti informatici.
0 comments:
Post a Comment