Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
DEEBOT T90 PRO OMNI abbina un sistema di aspirazione basato su tecnologia BLAST ad un rullo di lavaggio dei pavimenti dalla larghezza elevata, capace di trattare al meglio le superfici di casa minimizzando i tempi di lavoro. Un robot completo che riesce anche ad essere sottile e garantire automazione ed efficienza nelle operazioni di pulizia di casa
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-11-2015, 21:28   #1
Akali
Junior Member
 
L'Avatar di Akali
 
Iscritto dal: Nov 2015
Città: Catania
Messaggi: 1
[C] GOTO

Sera tutti, mi potete spiegare le principali ragioni per cui si odia così tanto il GOTO? Io credo che se lo si utilizza in maniera intelligente qualcosa di buono ci ricavi. Anche molti docenti ne hanno quasi proibito l'uso (alcuni minacciando una bocciatura istantanea) mentre altri dicono che un corretto utilizzo possa solo giovare. Chi ha ragione quindi secondo voi?
__________________
In due occasioni mi è stato chiesto [da parte dei membri del Parlamento]: 'Scusi, signor Babbage, se si mettono nella macchina dati sbagliati, Usciranno comunque le risposte giuste?' Io non sono in grado di capire quale confusione mentale porti a formulare una simile domanda
Akali è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2015, 01:22   #2
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Il motivo per il quale si sconsiglia di utilizzare il goto è che esso rende il codice destrutturato e di conseguenza più difficile da interpretare. In pratica quando osservi un algoritmo correttamente formattato (indentato) riesci subito ad individuare dei blocchi di codice ed hai la certezza che a run time quando entri in un blocco questo viene eseguito fino alla fine, quindi l'esecuzione riprende dall'istruzione successiva o dall'inizio del blocco se si tratta di un ciclo; se invece nel blocco è presente un goto il flusso di esecuzione potrebbe saltare in un punto completamente diverso del programma, per questo occorre molto più impegno per comprendere la logica che c'è dietro. D'altra parte però il goto insieme ad altre istituzioni (break e return) consente di gestire in maniera più intuitiva le condizioni di eccezione, ovvero quelle condizioni in cui l'esecuzione dell'algoritmo non è più necessaria (perché i dati sono compromessi oppure si è giunti alla soluzione prima del previsto). In java ad esempio è stato creato un ibrido per rendere strutturata la gestione delle eccezioni attraverso il costrutto try catch e l'istruzione throw, che di fatto esegue un salto proprio come il goto.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2015, 11:15   #3
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
Non capisco Akali ... perché la risposta di Daniels118 viene riportata tale e quale a nome di un altro utente in altro forum

http://www.inforge.net/xi/threads/c-.../#post-4355472

Fai la domanda qui e la riporti su Inforge? Che comportamento è questo?

E poi un "ingegnere elettronico" (nell'altro forum sei "laureato in informatica") che fa queste domande !

Forse la tua vera età spiega questo comportamento infantile ...

Ultima modifica di lorenzo001 : 08-11-2015 alle 11:27.
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2015, 11:52   #4
das
Senior Member
 
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1385
Dipende da quello che vuoi fare. Se vuoi che il codice sia facilmente riutilizzabile in altri contesti il goto può essere un ostacolo.

Se scrivi del codice per te e vuoi ottenere il risultato nel minor tempo possibile senza scervellarsi troppo, allora lo puoi usare.

Personalmente penso la gente (tipo i tuoi prof) si fissi con delle regole e poi diventa matta per rispettarle. In realtà non esistono regole, dipende sempre da quello che vuoi fare.

Per quanto riguarda la comprensibilità del codice allora le funzioni ricorsive sono molto peggio del goto, eppure sono universalmente riconosciute come esempio di eleganza e bravura.

Ultima modifica di das : 10-11-2015 alle 11:54.
das è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2015, 21:28   #5
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
Forse l'unico caso in cui il goto è giustificabile è quando, come diceva Daniels118 è successo un errore "irrecuperabile" (in "veri" linguaggi di programmazioni sono appunto chiamate eccezioni!) e uno fa un goto end e nella label end fai il clean up. Nel mio team di lavoro sono vietate e quindi si fa return quando l'errore irrecuperabile accade si fa prima il clean up il problema di questo approccio e che, a volte, per la sfrescia di fare return il codice di clean up ci se lo dimentica.

Detto questo anche se il codice te lo scrivi per il tuo uso e consumo cerca di non usare il goto pensaci bene magari chiamando una funzione avresti un codice più bello e non ti troveresti a far "pasticci"?

Per esempio ecco come fare per non prendersela nello stoppino con clean up & return:

Codice:
int my_func(void)
{
       [...]
       char *test = malloc(); // ma può essere anche una (f)open o una qualunque risorsa che devi liberare
       int rc;
       rc = do_something_with_test();
       // Che abbia funzionato o no liberiamo 'test'
       free(test);
       if (rc != 0)
            combust(); // Siamo fritti!

       return rc;
}
Le ultime versione del C hanno le embedded function (simili alle lambda functions e alle closure di altri linguaggi):

Codice:
int my_func(void)
{
       [...]
       char *test = malloc(); // ma può essere anche una (f)open o una qualunque risorsa che devi liberare

       int do_something_with_test(void) {
             [...]
       }

       int rc;
       rc = do_something_with_test();
       // Che abbia funzionato o no 'test' non serve più
       free(test);
       if (rc != 0)
            combust(); // Siamo fritti!

       return rc;
}
Purtroppo per quante sia una "bella" soluzione quella di creare una embedded function non la consiglio non è - stranamente - compatibile con il C++ e questo a me ha morso le chiappe (ero così ingorillato e poi...)

P.S. Non pensare che goto sia più ottimizzato che chiamare una funzione! Questi ragionamenti deve farli il compilatore... se proprio vuoi dichiara do_something_with_test() come static inline così stai sereno

Ultima modifica di fano : 13-11-2015 alle 21:42.
fano è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Influencer sotto controllo Agcom: arriva...
Scontro in OpenAI sul ChatGPT per adulti...
Apple Watch Series 11 a 349€ e altri int...
Starlink rinnova i piani residenziali in...
POCO X8 Pro e Pro Max ufficiali: potenza...
Jensen Huang propone i token come nuovo ...
Realme 16 Pro e 16 Pro+ tra i più...
Dall'enciclopedia all'algoritmo: Encyclo...
Il CEO di Epic Games Tim Sweeney ha comp...
PSSR aggiornato su PS5 Pro: Sony svela i...
Scope elettriche low cost a prezzo strac...
G-ASD di Geely, primo ADAS cinese certif...
La serie TV di Assassin's Creed su Netfl...
Nothing Phone (4a) disponibile su Amazon...
NemoClaw è la soluzione di NVIDIA...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:16.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v