Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: [ot] Goto

  1. #1

    [ot] Goto

    Sono stato tanti anni a dire di non usare goto, e adesso posso dire, che avevo torto.
    Sono molto utili e possono anche A VOLTE, migliorare la leggibilità, l'efficenza, e la semplicità di un programma.
    Sono semplici diretti e funzionali, basta CHE NON OCCUPINO TUTTO IL CODICE, se no diventa veramente uno spaghetti code.
    I computer funzionano a goto, tutto il resto è solo masturbazione mentale, cito un tipo che ho trovato in rete.
    "If you want to go somewhere, goto is the best way to get there" Ken Thompson.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Anche io sono del parere che il goto possa essere utile.
    Solo, è un costrutto pericoloso per tante ragioni, quindi quando esiste un altro modo per farlo, secondo me è preferibile: il goto lo riservo solo per i casi in cui la forma strutturata è troppo complicata.

    Ma sai quante volte ho usato un goto nel mio codice? MAI (a parte, ovviamente, gli switch case, che sotto sono implementati con dei goto). Quindi, non nego che possano esistere casi in cui sia utile, ma in effetti devo dire che non me ne è mai servito uno.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [ot] Goto

    Originariamente inviato da menphisx
    I computer funzionano a goto...
    Veramente il mio funziona con la corrente.

    Scherzi a parte. Recentemente ho letto un dibattito su comp.language.c++ al riguardo. Dopo tonnellate di post, si è capito che chi lo usa, continuerà a usarlo, chi non lo usa continuerà a non usarlo. Al di la dei pro e contro, dico solo che in C++ occorre fare più attenzione che in C, visto che il goto (a causa del salto) non fa chiamare i distruttori degli oggetti che manda fuori scope.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  4. #4
    I cicli e le altre strutture di flow control della programmazione strutturata/procedurale/ad oggetti consentono di evitare il goto credo nella totalità dei casi. Non mi è mai capitato di aver bisogno di un goto in tutto il codice che ho mai scritto (principalmente C++, VB.NET, C#); può forse essere utile in alcuni rarissimi casi in alcuni linguaggi per la gestione degli errori, ma ci sono metodi migliori (e in quasi tutti i linguaggi di livello superiore si può evitare anche in questo frangente).
    Il discorso del "a livello macchina sono tutti goto" è una sciocchezza, tutto a livello macchina è istruzioni elementari, ma non per questo scriviamo in assembly.
    Inoltre i cicli servono, oltre ad effettuare una determinata azione, rendono immediatamente chiaro al lettore del codice (se sono usati adeguatamente) qual è il senso del codice stesso; credo anche che i compilatori riescano a prendere in maniera più semplice decisioni in termini di prestazioni partendo da codice strutturato piuttosto che da spaghetti-code pieno di goto.
    Originariamente inviato da shodan
    il goto (a causa del salto) non fa chiamare i distruttori degli oggetti che manda fuori scope.
    Urca, questo non lo sapevo, motivo in più per starne alla larga.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Eh ormai nella programmazione ad oggetti non ha molto senso usarlo, come nei linguaggi troppo di alto livello, siamo arrivati al punto in cui, abbiamo fatto di tutto per non averne bisogno, per cui abbiamo molte strutture necessarie alla programmazione, ma questo aumenta la complessità di codice.
    Alcuni problemi ho trovato essere risolvibili in modo più semplice efficace e diretto con i goto, e sarà poi stato solo UN GOTO, ma ha evitato troppe seghe mentali, per arrivare ad una soluzione "strutturata".
    Si tratta di funzioni per la ricezioni di dati da socket... basso livello ... però sono stati utili.
    Devo ammettere che a volte invece di tante seghe mentali su come arrivare ad una soluzione strutturata, un goto è la via più semplice.
    Ma penso che siano rari casi in effetti.
    Fondamentalmente, però è vero che in fondo tutti i blocchi strutturati, sono delle serie di cmp, e jump. Non vuol dire che dobbiamo usare i goto, ma almeno ricordarci, che tutto il codice che ci sta sopra, è solo astrazione, per costruire un linguaggio, ma alla fin fine si riduce a quello.
    Insomma il succo del discorso è: tutto il problema dei goto, fondamentalmente, è un non-problema, basta conoscerne i rischi, e gli argomenti, basta sapere. Ecco magari spiegare meglio ai principianti come funziona la programmazione strutturata, e i goto. Per questo dico che secondo me insegnare assembly all'inizio non è così tanto male... insieme magari a linguaggi più ad alto livello.
    Ormai si tende sempre più a questo:

    Strato di astrazione4
    Strato di astrazione3
    Strato di astrazione2
    Strato di astrazione1
    Basso livello
    Macchina

    Un sacco di codice, per poi fare poche cose.
    Cioè su codici già complessi, si costruiscono altri framework, non ha molto senso.

    IMHO.

  6. #6
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Se esiste ancora nel C# non è poi cs male. Poi detto dai programmatori di Microsoft nn deve proprio essere cattivo, il codice diventa del tutto illegibile tra tabulazioni e parentesi va ben oltre il bordo del monitor .
    Per gli Spartani e Sparta usa spartan Il mio github

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    D'altra parte è risaputo che anche nel kernel Linux si fa ampio uso di goto, eppure sono quasi vent'anni che esiste e sta ancora là. Torvalds difende il goto dicendo che tutto sommato "is fine", a volte può rendere il tutto più leggibile se ricorrendovi si riescono ad evitare magari 8 livelli di indentazione e roba simile ([ot]e da questo punto di vista non ho mai capito - sarà ignoranza mia - perché mai il C99 ha portato il numero massimo di blocchi nidificati da 15 a 127 e il numero massimo di istruzioni condizionali nidificate da 8 a 63... una forma di tolleranza per gli psicopatici?[/ot]).

    In fondo è sempre così, basta non abusare di niente. Stessa storia anche per le "famigerate" friends functions in C++ (come si legge nella FAQ relativa all'argomento tra quelle linkate da shodan in firma).
    Anche io non ho mai fatto uso di una goto in una riga di codice. Certo, non che abbia prodotto chissà cosa, ma di codice ne ho scritto un bel po' e non mi sono mai visto costretto a ricorrere a goto. In realtà forse perché anche io sono stato "brainwashed by CS people who thought that Niklaus Wirth actually knew what he was talking about." quindi ho sempre avuto il "terrore" di usarli, but meh. Come dicevo, sono sempre riuscito a sopravvivere senza.

    Insomma forse è positivo che un linguaggio consenta il ricorso ad alcune caratteristiche potenzialmente pericolose, viene lasciato tutto all'intelligenza del programmatore. Poi vabbè ne esistono altri concepiti per programmatori decerebrati la cui filosofia è "no no! Questo non si fa" e quindi eliminano i goto, le variabili globali (anche se alla fine è possibile ricorrervi lo stesso), le funzioni friend, l'aritmetica dei puntatori, l'ereditarietà multipla, la gestione dinamica della memoria, l'overloading di operatori e tutto ciò che potenzialmente potrebbe essere pericoloso o potrebbe rendere il codice troppo "complicato", un po' come dire "tenere fuori dalla portata dei bambini".
    every day above ground is a good one

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Originariamente inviato da linoma
    Poi detto dai programmatori di Microsoft nn deve proprio essere cattivo
    E' la stessa gente che ci ha regalato Windows Vista, e prima ancora Windows ME...
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  9. #9
    Originariamente inviato da Ippo343
    E' la stessa gente che ci ha regalato Windows Vista, e prima ancora Windows ME...
    Non mi pare un'argomentazione molto ben costruita...

    Comunque se non erro è stato incluso nel C# quasi esclusivamente per poter emulare il comportamento di fall-through del C++ nei costrutti switch.

    In ogni caso:
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Hai ragione ho sbagliato, avallato anche dai programmatori...
    Per gli Spartani e Sparta usa spartan Il mio github

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.