|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
[.NET] Perchè il goto è così usato?
A me hanno sempre detto di evitare il goto come la peste e infatti non l'ho mai usato in vita mia.
Però stavo notando che quando si guardano esempi in C/C++ dall'MSDN qualche goto si trova sempre. goto si trovano in quantità non trascurabili pure nei sorgenti C++ del .NET e negli assembly che lo compongono. E' una tecnica da riscoprire? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non ci credo
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Nei sorgenti C/C++ del .NET sscli20 il goto è usato 3289 volte in ben 428 file.
E ci sono almeno 130 file C# che fanno uso del goto. Difficile pensare che abbiano scritto il .NET 2 volte. Per quanto riguarda gli assembly l'ho trovato guardando con Reflector nei metodi: Send e SendAsync di SmtpClient BeginGetRequestStream, BeginGetResponse, CheckResubmit in HTTPWebRequest DoBeginAccept, DoDownLevelSendFileCallback di Socket GetByteCount in UTF8Encoding. Sembrerebbe una pratica ben consolidata, ho visto il goto usato per uscire da un for( ; ; ) e tante mostruosità simili. Chi diceva che i framework sono scritti da persone ipercompetenti? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Direi proprio di no
Probabilmente, dico probabilmente, avranno avuto delle buone ragioni per fare così (quali, non lo so). Ma avevo letto proprio la settimana scorsa un articolo su MSDN circa i delegates, le callback e i goto, vediamo se lo trovo. Cmq il goto in genere è preferibile evitarlo avendo a disposizione altre alternative, questo è ovvio. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Personalmente trovo sia una pratica assolutamente deprecabile, ma prima di giudicare vorrei capire le motivazioni che stanno alla base di queste decisioni.
__________________
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 |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
io vorrei solo dire di evitare di prendere per oro colato le puttanate che diceva Dijkstra
per carità, un grande matematico e il suo famoso algoritmo è di importanza cruciale, ma l'ingegneria del software evidentemente è un'altra cosa
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Saranno pure puttanate, ma è da più di vent'anni che non scrivo un GOTO e non ne sento affatto l'esigenza.
Per me l'era degli spaghetti-BASIC è finita da due decadi buone.
__________________
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 |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#10 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
tutto ciò non toglie che sarei estremamente curioso di conoscere le necessità che hanno spinto i programmatori in Microsoft a fare un uso così pesante dei goto in una piattaforma managed. |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Davvero usi i goto ?
Pussa via |
|
|
|
|
|
#12 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ah, tra l'altro tanto che siamo in argomento di misteri del .NET mi piacerebbe anche sentire i vostri pareri circa un'altro curiosissimo fatto, ovvero la mancanza delle eccezioni checked. ho aperto un topic tempo fa, ora ve lo ripesco.
edit - http://www.hwupgrade.it/forum/showthread.php?t=1677844 Ultima modifica di 71104 : 11-03-2008 alle 16:00. |
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
71104: hai mai provato ad usare le eccezioni in C++ ? Dicono che facciano risparmiare LOC, molte LOC
|
|
|
|
|
|
#15 | ||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Fino a pochi anni prima lavoravo anche in assembly, dove ovviamente i "goto" erano indispensabili, ma per il resto, con linguaggi ad alto livello, da vent'anni a questa parte non ho avuto l'esigenza di "esplicitare" un salto. 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 |
||
|
|
|
|
|
#16 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() be' a parte il SEH, quando posso le uso ma non c'entra niente con la storia dei goto. la mia tipica situazione da programmazione Win32 è la seguente: devo chiamare in ordine una dozzina di funzioni, ciascuna delle quali potrebbe fallire e nel caso richiederebbe il cleanup di tutto ciò che hanno fatto le precedenti. che faccio, un diverso exception handler per ciascun possibile codice di cleanup? non è questo il mio concetto di risparmiare LOC ![]() oppure scrivo un diverso codice di cleanup per ciascun possibile fallimento? no, non ci siamo neanche adesso. due valide soluzioni al problema sono: 1) invertire tutti gli if che controllano i fallimenti in modo tale da innestarli tutti quanti e rendere uniche le linee di cleanup; ma 12 livelli di indentazione francamente non mi garbano 2) una dozzina di labels in cui distribuire le varie linee di codice di cleanup; non posso farci niente, è l'unica |
|
|
|
|
|
|
#17 | ||
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Prova a richiamare un webservice o a fare una connessione ad un db senza usare il dispose, vedrai come metti in crisi le macchine. In C# esiste il comodissimo using, ma è comunque un cleanup fatto dal programmatore non dal GC. Quote:
In ogni caso si vede che, dove viene usato il goto, c'è molta poca OOP e metodi lunghi centinaia di righe. |
||
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ah ok...ho capito il problema...sentiamo fek cosa suggerirebbe di fare per una soluzione del genere...
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Spezzare le ditine al programmatore che ha scritto quel codice, ovviamente...
__________________
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 |
|
|
|
|
|
#20 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
giusto, però comunque ti risparmia dal goto.
Quote:
![]() Quote:
|
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:44.












un break gli faceva schifo ?









