|
|
|
![]() |
|
Strumenti |
![]() |
#381 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Mi riferisco al fatto di poter mischiare programmazione procedurale, programmazione ad oggetti e programmazione a moduli nello stesso programma. Ultima modifica di cionci : 31-03-2008 alle 08:05. |
|
![]() |
![]() |
![]() |
#382 | ||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Quote:
![]() Quote:
Quote:
Quote:
Il primo sorgente invece funziona perfettamente perché le varie def portano soltanto alla creazione dei rispettivi oggetti, e il loro codice viene semplicemente compilato in bytecode. E' soltanto nella fase di esecuzione che, una volta trovato dentro "trerigevuote" che si deve eseguire una chiamata a "unarigavuota", la virtual machine va a recuperare quest'oggetto e prova a eseguirlo (se è "callable"). Quote:
In particolare nell'ultimo messaggio ti ho fatto anche vedere il perché sia così (ma te l'avevo già spiegato qui http://www.hwupgrade.it/forum/showpo...&postcount=195 ). Per il resto, io non ci trovo nulla di male a mischiare paradigmi di programmazione diversi per risolvere un problema (con buona pace del buon PGI-Bis ![]() D'altra parte tu sostieni che Java sia monoparadigma ( http://www.hwupgrade.it/forum/showpo...&postcount=200 ), il che è semplicemente falso: Codice:
public class Prova { public static void main(String[] args) { int i, j, k; i = 1 j = 2 k = i + j; } } Ma anche: Codice:
public class Prova { private static int i() { return 1; } private static int j() { return 2; } private static int k() { return i() + j(); } public static void main(String[] args) { k(); } } Non sono io che "traviso": sei tu che ti ostini a ignorare quello che dicono gli altri... Per inciso, guarda qui: Codice:
>>> dir(1) ['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__str__', '__sub__', '__truediv__', '__xor__'] Fammi vedere qualcosa di simile in Java per "int i = 1". P.S. La programmazione a moduli non esiste. Esiste quella procedurale.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys Ultima modifica di cdimauro : 31-03-2008 alle 08:53. |
||||||
![]() |
![]() |
![]() |
#383 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Ti avevo già risposto qui http://www.hwupgrade.it/forum/showpo...&postcount=373
![]() Te lo ripeto: E' molto semplice, ma se vuoi una guida completa usa questa http://www.python.it/doc/Howtothink/...l-it/index.htm ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#384 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Secondo me è un male mescolare paradigmi diversi nello stesso linguaggio (PS: ma mi sembra o hai parlato anche te di mischiare paradigmi ?). Se per te è una feature valida, come la chiami ?
Come la chiami allora la possibilità di mettere codice nudo e crudo dentro ad un file .py ? |
![]() |
![]() |
![]() |
#385 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
e poi vai di reflection sull'oggetto "i" per recuperare i nomi dei metodi. Però è vero, ci sono anche i normali int... Ma Java è diverso da Python, sono due linguaggi diversi e se fanno cose simili fanno anche cose molto diverse. Alla fine uno usa lo strumento che ritiene migliore (oggettivamente, in teoria; soggettivamente, nella pratica) per risolvere lo specifico problema. Ritengo molto importante la sensazione di "comodità, e familiarità" che un linguaggio ti da, anche se nell'usarlo sulla carta magari stai facendo una scelta leggermente meno produttiva di un altro linguaggio: l'ideale sarebbe poi provare ad imparare il linguaggio alternativo e farci esperienza per farsi un'idea propria. Giusto per non essere troppo OT: Mazda, il mio consiglio non è su che linguaggio usare, il 3D è già pieno di idee in merito; quello che ti consiglio è di sceglierne tu uno, e cominciare a darci dentro. Se ti interessa la programmazione sappi che ti aspetta un sacco di studio, ci sono molte cose da imparare, per cui non darti una scadenza temporale: comincia con un buon manuale del linguaggio scelto, scaricati il relativo compiler/ide e preparati alla scoperta di un nuovo mondo! ![]() |
|
![]() |
![]() |
![]() |
#386 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() A me premeva chiarire un concetto fondamentle: Python è MONOPARADIGMA (è puramente a oggetti). Poi, proprio grazie agli oggetti che mette a disposizione, è possibile "simulare", nella stesura del codice, paradigmi di programmazioni diversi. Fino a qui siamo d'accordo? Così ci mettiamo una pietra sopra. ![]() Quote:
![]() L'operazione di suddividere il codice in moduli/unit/package, ecc. è chiamata "modularizzazione", o anche "programmazione modulare", ma NON è un paradigma di programmazione, quanto più che altro una "best practice". I paradigmi di programmazione sono i seguenti: - procedurale; - funzionale; - logico; - a oggetti; - ad aspetti (questo è il più recente, ma non me ne sono mai interessato). ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
![]() |
![]() |
![]() |
#387 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#388 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Chi ha parlato di suddividere il codice in moduli ?????
Ora ci attacchiamo alla terminologia ? Hai capito bene a cosa mi riferisco. Parlo di mettere le istruzioni, senza una funzione, senza una classe, direttamente all'interno di un modulo. Come lo chiami ? Ok, allora tanto per chiarire dammi un termine per definire la possibilità mescolare la creazione di funzioni e di classi. |
![]() |
![]() |
![]() |
#389 | |||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Esteso da tempo anche a linguaggi che non hanno il concetto di "modulo", ma devono far ricorso ai file include per separare l'interfaccia dall'implementazione. Ma questo, ripeto, non è un paradigma di programmazione, quanto una "best practice" incoraggiata in ingegneria del software. Quote:
Sì, se non si fosse capito, ci sto girando attorno. ![]() ![]() Per contro, in Java come giustifichi / classifichi la possibilità di creare funzioni e classi nello stesso package? Tipo l'esempio che ti ho riportato sopra? ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||
![]() |
![]() |
![]() |
#390 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E' chiaro che anche in Java si può fare programmazione procedurale, come in C si può fare programmazione ad oggetti, ma è comunque scoraggiata dalle caratteristiche stesse del linguaggio. Al contrario in Python le caratteristiche del linguaggio incoraggiano a fare programmazione procedurale, ma incoraggiano anche a mettere codice non strutturato, perdonami ma non so come chiamarlo, visto che nemmeno tu mi hai suggerito come, all'interno del modulo. Quale miglior modo per confondere le idee a chi lo studia ? Siamo addirittura ai livelli di PHP per queste caratteristiche.
Visto che ti piace girare intorno al problema, noto anche sull'inserimento di codice non strutturato all'interno dei moduli, ne deduco che non ti interessi la discussione, quindi per me si chiude qui. Dopo tutto sono riuscito a spiegare cosa intendevo, nonostante i tuoi tentativi di sviare la discussione, quindi per me la questione è chiusa qui. |
![]() |
![]() |
![]() |
#391 | |
Senior Member
Iscritto dal: Jun 2007
Città: Palermo
Messaggi: 34432
|
Quote:
![]()
__________________
Case: Fractal Design Pop XL Air | PSU: Seasonic PRIME TX-1000 | CPU: Intel® Core™ i7 6950X Extreme Edition @ 4.0GHz w/ Alphacool Eisbaer Pro (Solo) + EK-Quantum Surface S280 MB: ASUS RAMPAGE V EXTREME/U3.1 | RAM: G.SKILL Trident Z DDR4 64GB @ 3200MHz (F4-3200C15Q-64GTZ) | VGA: ASUS ROG Strix GeForce® RTX 3080 Ti OC Edition 12GB Audio: Creative Sound Blaster® ZxR | SSD_1: Samsung SSD 980 PRO NVMe 1TB | SSD_2: Samsung SSD 870 QVO SATA 4TB | Monitor: ViewSonic ColorPro VP2776 |
|
![]() |
![]() |
![]() |
#392 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
In Python il codice che tu pensi sia "non strutturato" è sempre racchiuso in un "modulo": anche l'applicazione "principale" (ossia il file lanciato con python.exe) lo è: Codice:
>>> __name__ '__main__' In PHP non esiste il concetto né di modulo (come sopra) né tanto meno di codice di "inizializzazione": tutto viene eseguito così com'è, partendo dall'inizio fino alla fine. Quote:
Per il resto, è il programmatore che fa la differenza: ti ho fatto vedere che in Java si può benissimo lavorare con la programmazione procedurale o funzionale, senza utilizzare MAI il concetto di classe / oggetto. E' inutile che tendi di nascondere il tutto dietro la parola "incoraggiare": sono i FATTI che contano, quelli che ti ho portato con tanto di esempi che dimostrano qual è la situazione REALE con entrambi i linguaggi.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
![]() |
![]() |
![]() |
#393 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Scrtivere (-1).abs non rende il linguaggio particolarmente cool. Solito cute code senza motivo di esistere, quando il linguaggio poi non ti prende gli errori di sintassi a tempo di compilazione facendoti perdere tempo. Sono queste le cose importanti. In C#, per altro, il boxing permette di passare da scalare a oggetto ed invocarne eventuali metodi.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
![]() |
![]() |
![]() |
#394 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
2 + 3 Invoca il metodo + sull'oggetto 2 con parametro 3. La sintassi e' una questione di semplice comodita'. Il 2 e' trattato (giustamente) come scalare a tempo di esecuzione per questioni di performance.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA Ultima modifica di fek : 31-03-2008 alle 10:35. |
|
![]() |
![]() |
![]() |
#395 | ||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Mi premeveva sottolineare due cose: - le differenze fra Python (ma anche Ruby, SmallTalk, ecc.) e Java; - il fatto che anche in Java si può benissimo programmare in maniera procedurale, funzionale o anche mischiando entrambi i paradigmi, senza utilizzare minimamente il concetto di "classe" / "oggetto". Forse sono stato un po' troppo irruento nel farlo. ![]() Non condivido però il "linguaggio che si rispetti" col fatto che dia la possibilità o meno di utilizzare tipi scalari senza che questi siano oggetti, quindi per questioni puramente legate alle prestazioni: dipende dal tipo di applicazioni che si sviluppano. E, come tu insegni, se un codice non è particolarmente performante, profiler alla mano si individuano i punti deboli, e in primis si cerca una soluzione algoritmica. Se non c'è possibilità, si può pensare (nel caso di Python, visto che esiste) di utilizzare un compilatore JIT. Se ancora non è soddisfacente, si riscrive quella parte in un linguaggio di più basso livello. In 3 anni e mezzo non sono dovuto ricorrere a nessuna delle tre possibilità. ![]() Quote:
Per inciso, in Python si scrive abs(-1), oppure len('Pippo'), ma NON condivido questa notazione: personalmente, visto che si tratta di oggetti, preferisco nettamente -1.abs() e 'Pippo'.len. Opinione personale, lo ribadisco. Quote:
Quote:
![]() EDIT: ho visto che hai modificato il messaggio precedente aggiungendo una stoccata sugli errori di sintassi. :|
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys Ultima modifica di cdimauro : 31-03-2008 alle 10:48. |
||||
![]() |
![]() |
![]() |
#396 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
|
![]() |
![]() |
![]() |
#397 | ||
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Qui stai facendo una marea di confusione fra la sintassi di un linguaggio e la sua coerenza. E' sintatticamente comodo scrivere "2 + 2" invece di 2.add(2) ma sono logicamente oggetti in Java. Infatti puoi invocarci metodi sopra via boxing. Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA Ultima modifica di fek : 31-03-2008 alle 11:19. |
||
![]() |
![]() |
![]() |
#398 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
E' ovviamente banalissima. Se da ruby si possono chiamare funzioni esterne come penso, dovrebbe essere semplice.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
![]() |
![]() |
![]() |
#399 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
![]() Scrivere una estensione è stato più facile del previsto. Codice:
#include <ruby.h> static VALUE do_cpuid(VALUE self, VALUE ax) { int op = NUM2INT(ax); unsigned int regs[4]; __asm__ __volatile__ ( "mov %%ebx, %%esi\n\t" "cpuid\n\t" "xchg %%ebx, %%esi" : "=a" (regs[0]), "=S" (regs[1]), "=c" (regs[2]), "=d" (regs[3]) : "0" (op) ); return rb_ary_new3(4, INT2NUM(regs[0]), INT2NUM(regs[1]), INT2NUM(regs[2]), INT2NUM(regs[3])); } void Init_cpuid() { rb_define_global_function("do_cpuid", do_cpuid, 1); } |
|
![]() |
![]() |
![]() |
#400 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Io ho dichiarato apposta "unsigned int" nel passaggio, sia in C# che in C++. Magari e' solo una specie di "mismatch" che hai introdotto...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:05.