Differenza tra funzione o procedura.

di il
7 risposte

Differenza tra funzione o procedura.

Ragazzi qualcuno mi saprebbe spiegare in parole povere la differenza tra funzione e procedura? equando usare l'una o l'altra? quali errori si possono provocare usando una funzione al posto di una procedura e viceversa?

7 Risposte

  • Re: Differenza tra funzione o procedura.

    In Java non hai ne funzioni, ne procedure, ma solo metodi!

    A parte questa considerazione, la differenza e' molto piccola: una funzione viene chiamata e ritorna un valore (pensa alle funzioni trigonometriche), una procedura non ritorna nulla (pensa ad una procedura che stampa una riga di testo sullo schermo).

    Per tutto il resto, sono perfettamente uguali.
    Se vuoi, puoi pensare a una procedura come a una funzione che ritorna il valore speciale void, ma invece di scrivere
    
    ...
    return void;
    
    scrivi
    
    ...
    return;
    
    Quindi, in definitiva, puoi pensare sempre in termini di funzioni.
  • Re: Differenza tra funzione o procedura.

    In certi linguaggi la differenza non solo è concettuale ma anche proprio a livello dichiarativo, cioè ci sono modi e parole chiave differenti per definire funzioni e procedure (nel BASIC, SQL e sicuramente altri).
    In molti altri linguaggi non c'è differenza a livello sintattico. Nei linguaggi ad oggetti esistono solo "metodi".
  • Re: Differenza tra funzione o procedura.

    Mi spiego meglio, a solo scopo didattico ho sviluppato un piccolo programmino che simulare la ricerca di un file sul computer per parola chiave, il metodo che fà la ricerca è questo:
    public List<File> cercaFile(String parolaChiave) {
            List<File> risultato = new ArrayList<File>();
            for(File file : listaFile) {
                if(file.getNome().contains(parolaChiave) || file.getEstensione().contains(parolaChiave) || file.getPercorso().contains(parolaChiave)) {
                    risultato.add(file);
                }
            }
            return listaFileCercati = risultato;
        }
    Funziona correttamente, l'ho fatto vedere ad uno che di java sicuramente ne sa più di me è mi ha detto che si va bene ma era meglio se invece della funziona usavo la procedura, in pratica questo:
    
     public void cercaFile(String parolaChiave) {
            List<File> risultato = new ArrayList<File>();
            for(File file : listaFile) {
                if(file.getNome().contains(parolaChiave) || file.getEstensione().contains(parolaChiave) || file.getPercorso().contains(parolaChiave)) {
                    risultato.add(file);
                }
            }
            listaFileCercati = risultato;
        }
    
    Sostanzialmente i due metodi fanno la stessa cosa, quindi mi chiedo: "perché avrei dovuto usare una procedura al posto di una funzione?" io vorrei che mi restituisse una lista di file cercare per questo motivo ho usato la funzione. Poi mi chiedo anche:"sostanzialmente qual'è la differenza se uso uno o l'altro metodo?" perché è più corretto il secondo rispetto al primo? e cosa comporta aver sbagliato ad usare la funzione invece della procedura"?

    P.s. già che ci sono posso chiedervi come far in modo che la mia applicazione sia case insensitive?
  • Re: Differenza tra funzione o procedura.

    ASSIOMA: Java e CASE SENSITIVE e, consiglio spassionato, inizia a ragionare in questi termini pena disastri disastrosi.

    E' un classico quando la tua applicaione, che gira correttamente sotto WIndows, non ne vuole sapere di funzionare sotto Linux, dicendo che non trova questo o quello che, invece, c'e'!

    Secondo: @adbin ha fatto notare che la differenza e' concettuale e sintattica. Mi dispiace ma devo contestargli una parte di questa affermazione: ovviamente non la differenza sintattica, perche' ad esempio in Pascal le funzioni di dichiarano con FUNCTION mentre le procedure con PROCEDURE, e cosi' in altri linguaggi. Ma non c'e' questa fondamentale differenza tra funzione e procedura (a parte, ovviamente, la questione del valore di ritorno).

    Trezo: la persona a cui lo ha fatto vedere ne sapra' (forse) di Java, ma di certo ti ha dato un consiglio abbondantemente criticabile.

    Quindi, ragiona: se il tuo pezzo di codice deve ritornare qualcosa, allora si usa una funzione, se non deve fare nulla, allora si usa una procedura.

    Poi possiamo andare nei dettagli e farsi le cosidette elucubrazioni mentali[/b].

    Ad esempio: Java lavora ad oggetti.
    Un oggetto ha uno stato e dei metodi.
    Supponiamo che in fase di creazione dell'oggetto, nel costruttore, debba essere eseguito una funzione/procedura, che genera un risultato, che deve essere salvato in uno dei membri della classe.

    Usare una procedura o una funzione?

    Dipende!

    Se viene usato solo in questo contesto, ha senso usare una procedura, ma anche una funzione andrebbe bene.

    Se invece deve essere usato piu' volte, probabilmente ha senso usare una funzione.

    Mettiamola in un'altro modo: come fa, una procedura, a ritornare un valore?

    Ci sono due soluzioni possibili:

    1) usare un oggetto globale: soluzione nel 90% dei casi pessima (ovviamente esistono situazioni in cui e' perfettamente lecito)
    2) attraverso un parametro che contiene uno slot che la procedura dovra' popolare: soluzione accrocchiosa, inelegante (ci sono le funzioni per cose del genere), ma anche in questo caso ci sono situazioni in cui potrebbe essere accettabile.

    Ora ci si potrebbe scrivere un libro se si volesse andare nel dettaglio del perche' e del come!
  • Re: Differenza tra funzione o procedura.

    migliorabile ha scritto:


    ASSIOMA: Java e CASE SENSITIVE e, consiglio spassionato, inizia a ragionare in questi termini pena disastri disastrosi.
    questo lo so bene, però vorrei che la mia piccola applicazione trovasse il file sia che io scrivo "documento" che "Documento".

    Se viene usato solo in questo contesto, ha senso usare una procedura, ma anche una funzione andrebbe bene.

    Se invece deve essere usato piu' volte, probabilmente ha senso usare una funzione.
    Quindi nel mio caso specifico, visto che il metodo viene usato solo per la ricerca, una procedura sarebbe stata più corretta, o sbaglio?
  • Re: Differenza tra funzione o procedura.

    CRTVLB ha scritto:


    public List<File> cercaFile(String parolaChiave) {
            List<File> risultato = new ArrayList<File>();
            for(File file : listaFile) {
                if(file.getNome().contains(parolaChiave) || file.getEstensione().contains(parolaChiave) || file.getPercorso().contains(parolaChiave)) {
    
    Scusa ma File è una tua classe? Perché java.io.File non ha di certo getNome/getEstensione !

    CRTVLB ha scritto:


    vorrei che la mia piccola applicazione trovasse il file sia che io scrivo "documento" che "Documento".
    Se tu hai un String con un nome e/o estensione di file, java.lang.String ha tutti i metodi utili per convertire il case (toLowerCase, toUpperCase), fare confronti anche non case-sensitive (compareToIgnoreCase, equalsIgnoreCase) e altro.
  • Re: Differenza tra funzione o procedura.

    andbin ha scritto:


    Scusa ma File è una tua classe? Perché java.io.File non ha di certo getNome/getEstensione !
    Si ho una classe file con gli attributi nome, estensione e percorso.

    andbin ha scritto:


    Se tu hai un String con un nome e/o estensione di file, java.lang.String ha tutti i metodi utili per convertire il case (toLowerCase, toUpperCase), fare confronti anche non case-sensitive (compareToIgnoreCase, equalsIgnoreCase) e altro.
    Ti ringrazio.
Devi accedere o registrarti per scrivere nel forum
7 risposte