Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    E' corretto usare 2 return in una funzione?

    Frequento il terzo anno di un ITIS, qualche settimana fa abbiamo avuto il compito di informatica e ieri la mia prof ha portato il mio compito corretto. Brevemente, io e la mia prof abbiamo perso un'ora e mezza a discutere sulle nostre due opinioni divergenti, dal momento che avevo utilizzato più di un return in una funzione dell'esercizio del compito, lei lo aveva segnato come errore e sosteneva che utilizzare un return al centro del codice è un segno di cattiva programmazione, in quanto è come utilizzare un goto che porta alla fine della funzione incondizionatamente.
    Dunque strutture come queste:
    codice:
    boolean segno(int x){
       if(x>0)
          return 1;
      else
         return 0;
    }
    Sono da considerare completamente sbagliate. Io invece mi ostinavo a sostenere la mia opinione, cioè che tali strutture sono utilizzati da chiunque, anche da professionisti, e in qualsiasi libro d'informatica ci sono esempi di questo genere (e credetemi che li ho incontrati), anche in forme più contratte (ad esempio, nella funzione segno(x) che ho riportato sopra può essere omesso l'else), il tutto comunque funziona perfettamente. Tornando a casa ho anche analizzato alcune librerie e alcuni codici sorgenti di programmi open source, e come io sostenevo all'interno di una funzione sono presenti 2 o anche più return.
    Per avere la certezza matematica della mia affermazione, chiedo anche a voi che sicuramente ne sapete più di me, è corretto usare 2 o più return all'interno della stessa funzione?

  2. #2
    Utente di HTML.it L'avatar di lnessuno
    Registrato dal
    Feb 2002
    Messaggi
    2,732
    Io di solito inizializzo una variabile (che chiamo $return per comodità), di cui faccio il return vero e proprio a fine funzione...

    Ma non mi pare ci sia nulla di formalmente sbagliato nell'averne più di uno, tenendo presente che se metti un return a metà funzione e questo viene raggiunto... la funzione si interrompe, naturalmente

  3. #3
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    forum sbagliato

    in ogni caso non è sbagliato ma è preferibile la soluzione di lnessuno. Evita problemi se la funzione è grande rendendola più facile da debuggare.

  4. #4
    Certamente rende più pulito il codice usare una variabile in cui mettere il valore di ritorno e usare un solo return. Altrettanto certo è che usare più di un return non può essere considerato un errore ed esempi fatti in questo modo se ne trovano in grande quantità, fatti da grandi improvvisati ed altri più studiosi.
    La tua insegnante può certamente dirti di non usare due return per rendere il codice più pulito, non può togliere punti al tuo esercizio per questa cosa, altrimenti sa tanto di scolastichina stile Fornero, dove tutto deve essere pulito chi se ne importa dell'attuazione pratica, poi magari non è in grado di sviluppare un software compesso...

  5. #5
    Io sono per "return early". Ritengo renda il codice più leggibile.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  6. #6
    Moderatrice di HTML 5 e Kickstarter L'avatar di electric_g
    Registrato dal
    Jan 2002
    residenza
    Vancouver, BC
    Messaggi
    176
    Mi sa che a Programmazione 1 da me non volevano i return in mezzo alla funzione, ma è più per insegnare una metodologia "migliore" che altro. Quando conosci le regole poi sai anche quando conviene infrangerle
    Nope.

  7. #7
    @kuarl non sapevo dove altro metterla xD
    grazie mille per le risposte, allora mi terrò la bocca più chiusa

  8. #8
    Semplicemente nella definizione di programmazione strutturata si dice che il programma deve avere un solo inizio ed una sola fine, ovvero un return solo.

    Questo per definizione, poi i linguaggi odierni ti permettono di andare anche oltre a tale definizione. In informatica spesso la definizione è una cosa, la realtà è un altra (perchè magari si è andata a modificare nel tempo).

    Spesso l'idea di un solo return alla fine viene visto come una regla di buona programmazione per dare più leggibilità al codice, anche se si potrebbe dire che usare più punti di uscita potrebbe rendere più efficente il programma perchè non si vanno a controllare condizioni non più necessarie.

    Secondo me, almeno in ambito accademico, sono da evitare a meno di validi motivi, proprio perchè vengono ritenuti come "cattiva programmazione". Tra l'altro andando a pensare nella maggior parte dei casi il guadagno effettivo di prestazioni non è nemmeno percepibile (dovresti avere migliaia di istruzioni sotto quel return per poter motivare il guadagno prestazionale).

    Detto questo nella tua funzione credo sia abbastanza inutile, visto che o viene eseguito l'if o l'else, ergo potevi benissimo seguire le regole della programmazione strutturata. Poi a scuola bisogna essere anche un pò furbi, se la professoressa ti fa capire che per lei è importante farlo così, fallo così e amen.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  9. #9
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    Originariamente inviato da crissstian96
    @kuarl non sapevo dove altro metterla xD
    grazie mille per le risposte, allora mi terrò la bocca più chiusa
    nel forum programmazione

  10. #10

    Re: E' corretto usare 2 return in una funzione?

    Originariamente inviato da crissstian96
    Per avere la certezza matematica della mia affermazione, chiedo anche a voi che sicuramente ne sapete più di me, è corretto usare 2 o più return all'interno della stessa funzione?

    Molto dipende dal linguaggio di programmazione: se fortemente tipizzato, la tecnica di lnessuno può dare una migliore garanzia di robustezza. Se la variabile $return è dichiarata come booleana, e la funzione deve ritornare un valore booleano, avere un solo return $return; alla fine ti dà la garanzia che la funzione ritorna qualcosa, e ritorna ciò che ti aspetti, ovvero un booleano.

    Ma in linguaggi debolmente tipizzati, questa garanzia sarebbe limitata... e a volte non è nemmeno richiesta perché la stessa funzione può ritornare valori diversi (o non ritornare nulla). Quindi il tutto si minimizza alla leggibilità del codice, che è un punto importante ma non fondamentale...

    In ogni caso... un tocco di eleganza nel codice, specie in ambiti accademici, non guasta mai.

    Nel tuo esempio specifico (che mi rendo conto essere solo un esempio), la forma più elegante sarebbe questa:

    codice:
    boolean segno(int x){
       return x > 0;
    }
    Poi ci sono altri casi, non mi andrebbe di generalizzare. Se per esempio c'è una condizione facile per cui il valore di ritorno della funzione sarebbe determinato, IO la farei subito:

    codice:
    boolean funzione_a_caso(int x, int y , int z){
       if( z == 0) 
            return false;
       
       boolean ret = false;
       // lungo algoritmo di calcoli
       return ret;
    }

    troverei più leggibile questo rispetto a:
    codice:
    boolean funzione_a_caso(int x, int y , int z){
        boolean ret = false;
        if( z == 0)  {
            return ret;
        }else {
       
        // lungo algoritmo di calcoli
        }
        return ret;
    }
    Mi risparmio un else e un po' di graffe.

    Poi de gustibus.

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.