Warning: Trying to access array offset on value of type null in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113

Warning: Trying to access array offset on value of type null in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113
Procedure o funzioni? | HTML.it
Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Procedure o funzioni?

Capire la differenza tra due costrutti che si rivelano molto simili
Capire la differenza tra due costrutti che si rivelano molto simili
Link copiato negli appunti

Due articoli già pubblicati descrivono la struttura e l'utilizzo Impariamo ad usare le procedure, chiamate anche comunemente sub, e Impariamo ad usare le funzioni, chiamate invece function. Siccome il modello Object Oriented di ASP è decisamente limitato rispetto ad altri linguaggi potrebbe non essere così immediata la differenza tra questi due costrutti che si rivelano molto simili.

Per semplificare la differenza possiamo pensare alle funzioni come singole istruzioni formate da un numero limitato di comandi, che possono comparire in modo ripetuto nel nostro codice. Racchiudere questo numero di comandi in una funzione ci permette con una sola chiamata di eseguirli in un colpo solo e di non dover ripetere righe di codice uguali in diverse parti del programma.

Una sub è invece una vera e propria procedura, ovvero un insieme complesso di comandi ed esecuzioni che può anche contenere, al suo interno, delle funzioni precedentemente dichiarate.

Esempio teorico

Immaginiamo di aver creato un programma per la gestione di alcuni conti finanziari. Il nostro programma potrebbe avere delle procedure complesse di trasferimento, deposito e prelievo. All'interno di queste istruzioni potremmo poi individuare una serie di minioperazioni di utilità, come ad esempio una conversione di una somma in valute, un calcolo semplice su un interesse ed un calcolo sul costo percentuale di una operazione.

Ecco che potremmo quindi individuare:

Funzioni di utilità

  • converti_valuta()
    Accetta un valore in una valuta espressa e lo restituisce nella valuta richiesta
  • calcola_interesse()
    Calcola un interesse semplice percentuale in base al valore percentuale fornito
  • calcola_spesa_operazione()
  • calcola_risultato_operazione()

    calcola_spesa_operazione()

Come è facile comprendere, tutte queste operazioni sono semplici insiemi di comandi che, presi una serie di parametri, restituiscono il risultato dei calcoli ricorsione

Procedure

  • deposita()
  • preleva()
  • trasferimento()

Le procedure sono invece operazioni decisamente più complesse, che non si accontentano di eseguire qualche singola operazione ma un elenco di comandi. Al loro interno possono poi richiamare le funzioni con lo scopo di ottimizzare la scrittura del codice.

Esiste poi un'ulteriore importante differenza che è determinante per la scelta tra una procedura o una funzione. Le funzioni sono studiate per restituire un valore, generalmente il risultato del calcolo, le procedure invece per eseguire delle istruzioni.

Questo è facilmente riscontrabile anche nella logica adottata dalle componenti di codice riportate nell'esempio della struttura bancaria prima abbozzata.

Esempio pratico: dichiarare e costruire il costrutto

Procedure

  • eseguono dei comandi e non restituiscono valori
  • contengono un elenco di istruzioni racchiuse tra delle voci Sub e End Sub
  • accettano parametri, indicati tra () dopo al nome della sub
  • sono richiamate genericamente mediante il comando call nomesub()
  • Esempio senza parametri:

    Dim dtmDate
    dtmDate = Now()
    Response.Write("<br />Giorno : " & Day(dtmDate))
    Response.Write("<br />Mese : " & Month(dtmDate))
    Response.Write("<br />Anno : " & Year(dtmDate))
    Response.Write("<br />Ora : " & Hour(dtmDate))
    Response.Write("<br />Minuti : " & Minute(dtmDate))
    Response.Write("<br />Secondi : " & Second(dtmDate))

    End Sub

    Esempio con parametri:

    Response.Write("<br />Giorno : " & Day(dtmDate))
    Response.Write("<br />Mese : " & Month(dtmDate))
    Response.Write("<br />Anno : " & Year(dtmDate))
    Response.Write("<br />Ora : " & Hour(dtmDate))
    Response.Write("<br />Minuti : " & Minute(dtmDate))
    Response.Write("<br />Secondi : " & Second(dtmDate))

    End Sub

    Funzioni

    • eseguono dei comandi e restituiscono valori
    • contengono un elenco di istruzioni racchiuse tra delle voci Sub e End Sub
    • accettano parametri, indicati tra () dopo al nome della funzione
    • sono richiamate genericamente assegnando il risultato ad una variabile o un comando, tramite la sintassi variabile = nomefunzione()
    • Esempio senza parametri:

      Dim dtmDate, dtmDay
      dtmDate = Now()
      dtmDay = Day(dtmDate)

      ' Controlla il formato
      if Cint(dtmDay) < 10 then dtmDay = "0" & dtmDay

      ' Ritorna il valore
      formatta_giorno_corrente_dd = dtmDay

      End function

      Esempio con parametri:

      Dim dtmDay
      dtmDay = Day(dtmDate)

      ' Controlla il formato
      if Cint(dtmDay) < 10 then dtmDay = "0" & dtmDay

      ' Ritorna il valore
      formatta_giorno_dd = dtmDay

      End function

      Richiamare il costrutto

      È in questa fase che si ha la differenza fondamentale. Ricordiamoci infatti che una funzione è nata per restituire un valore, al contrario di una sub.

      Per richiamare una procedura è generalmente sufficiente usare il comando call:

      E le istruzioni all'interno saranno elaborate.

      Richiamare una funzione è invece differente. È necessario specificare cosa fare del valore restituito ed è quindi possibile assegnarlo ad una variabile o ad una ulteriore funzione, ad esempio una stampa:

      Cattive abitudini

      Spesso si incontrano funzioni gestite come procedure , ovvero funzioni dichiarate come tali nella definizione ma che non restituiscono valori e, a maggior ragione, sono richiamate con il comando call nel codice.

      Questa forma non rappresenta tuttavia un corretto utilizzo degli strumenti di ASP ed è una pratica sconsigliata per evitare di creare confusioni a eventuali lettori del codice.

Ti consigliamo anche