Indice
Discussione:Funzione (informatica)
"JSR: jump to subroutine, ovvero salta ad una subroutine (salvando l'indirizzo di ritorno sullo stack con PUSH)"
sarebbe utile fare la pagine sul PUSH, o se esiste, fare il collegamento
Titolo (e contenuto)
[modifica wikitesto]La gran parte dei termini che si trovano in programmazione hanno più significati, tipicamente perché diversi linguaggi di programmazione o paradigmi hanno riciclato termini già in uso cambiandone il significato. "Funzione" è certamente uno di questi. A seconda dei contesti, si può intendere funzione come un qualsiasi sinonimo di subroutine, sottoprogramma, procedura (ignorando il fatto che tutti questi termini hanno diverse implicazioni per motivi storici, proveniendo da culture diverse) ... oppure in un senso più stretto (p.es. una procedura che produce un valore di ritorno). Se proprio si vuole fare di tutta l'erba un fascio, scegliere proprio "funzione" come titolo, rispetto p.es. a "sottoprogramma", è infelice: sia perché più ambiguo, sia perché si tratta per l'appunto di un "sinonimo" che in realtà in molti contesti significa qualcosa di più specifico. Fra tutti quelli citati quello che mi sembra più neutro e generale è proprio "sottoprogramma". Moongateclimber (msg) 13:53, 18 dic 2014 (CET)
- E "metodo" proprio non è un sinonimo... è un concetto simile, correlato, ma non sinonimo. Moongateclimber (msg) 13:54, 18 dic 2014 (CET)
- Direi che bisogna appoggiarsi alle fonti, che purtroppo questa voce non ha. Ma consultando qualche libro noto dei linguaggi più diffusi, come quello di C di Kernighan e Ritchie (capitolo 2 "Funzioni e struttura dei programmi"), il Thinking in Java, o Imparare Python (capitolo 15 "Funzioni: concetti base") il termine più noto è funzioni o metodi (per le classi), anche i capitoli si chiamano così, non ho mai trovato "sottoprogrammi". Sentiamo cosa dice anche [@ Soujak] --Rotpunkt (msg) 14:23, 18 dic 2014 (CET)
- Il problema è proprio che i libri che tu citi sono libri su specifici linguaggi, e adottano la terminologia del linguaggio. Nei linguaggi OO il nome "metodo" è standard (e non credo che si possa trovare un libro su Java che parla di "funzioni"), nei linguaggi procedurali esistono "procedure", "funzioni", ... Il C ha solo funzioni, ed è normale che K&R usino questo termine. Il C++ ha funzioni e metodi (e sono due cose diverse). La fonte da cercare per trovare un termine generico è una fonte che parli dei linguaggi di programmazione in generale. Ce n'è qualcuna. Un libro famoso era quello scritto da Ghezzi/Jazayeri, che usavamo in università. Posso provare a vedere se lo ritrovo e controllare che termine usa per il concetto generale di cui funzioni C, procedure/funzioni Pascal, metodi OO e altro sono casi particolari. Moongateclimber (msg) 09:59, 13 gen 2015 (CET)
- Trovato. (Ghezzi, Jazayeri, Programming Language Concepts) Direi che la seguente frase (p. 80) è assolutamente appropriata a questa discussione:
- Il problema è proprio che i libri che tu citi sono libri su specifici linguaggi, e adottano la terminologia del linguaggio. Nei linguaggi OO il nome "metodo" è standard (e non credo che si possa trovare un libro su Java che parla di "funzioni"), nei linguaggi procedurali esistono "procedure", "funzioni", ... Il C ha solo funzioni, ed è normale che K&R usino questo termine. Il C++ ha funzioni e metodi (e sono due cose diverse). La fonte da cercare per trovare un termine generico è una fonte che parli dei linguaggi di programmazione in generale. Ce n'è qualcuna. Un libro famoso era quello scritto da Ghezzi/Jazayeri, che usavamo in università. Posso provare a vedere se lo ritrovo e controllare che termine usa per il concetto generale di cui funzioni C, procedure/funzioni Pascal, metodi OO e altro sono casi particolari. Moongateclimber (msg) 09:59, 13 gen 2015 (CET)
- Direi che bisogna appoggiarsi alle fonti, che purtroppo questa voce non ha. Ma consultando qualche libro noto dei linguaggi più diffusi, come quello di C di Kernighan e Ritchie (capitolo 2 "Funzioni e struttura dei programmi"), il Thinking in Java, o Imparare Python (capitolo 15 "Funzioni: concetti base") il termine più noto è funzioni o metodi (per le classi), anche i capitoli si chiamano così, non ho mai trovato "sottoprogrammi". Sentiamo cosa dice anche [@ Soujak] --Rotpunkt (msg) 14:23, 18 dic 2014 (CET)
«"Programming languages allow a program to be composed of a number of units, called routines. The neutral term “routine” is used in this chapter in order to provide a general treatment that enlightens the important principles that are common to most programming languages, without committing to any specific feature offered by individual languages"»
- Ovviamente si potrebbe obiettare che "routine" è termine inglese. Non so se esiste una versione italiana del libro di Ghezzi/Jazayeri, WordReference mi dà come traduzione standard di routine "procedura", che ci potrebbe stare. Ma per me si può anche tenere routine. E' sempre meglio di funzione. La parola "funzione" ha alcune implicazioni, dovute al suo significato originale matematico, una delle quali è che una funzione produce un valore, cosa che non è vera per tutti i tipi di sottoprogrammi (per esempio non è vero per le procedure Pascal). Che ne dite?
Moongateclimber (msg) 10:04, 13 gen 2015 (CET)
- Un'altra fonte a sostegno di procedure: la Treccani, in una voce scritta da Todesco ([1]):
«Procedure
È pratica comune organizzare i programmi in più porzioni ognuna delle quali risolva un ben definito sottoproblema. I relativi costrutti prendono diversi nomi nei vari linguaggi e in dipendenza dalle loro caratteristiche: procedure, subroutine, sottoprogrammi, funzioni, metodi, messaggi. In ogni caso si tratta di blocchi di codice delimitati con precisione, in genere identificati con un nome e che si comportano come un piccolo programma in miniatura: elaborano dati e forniscono un risultato seguendo un determinato algoritmo»
- Moongateclimber (msg) 10:40, 13 gen 2015 (CET)
- E per completezza: Ghezzi, in un suo documento in italiano (sempre su Treccani, ma in "enciclopedia italiana") usa invece sottoprogramma [2]
«Tra le strutture di controllo in grande, il caso più diffuso è quello delle chiamate a sottoprogramma. Un sottoprogramma costituisce una operazione astratta, che viene definita separatamente dal programma e che da questo può essere esplicitamente chiamata»
- Se non ci sono fonti sui linguaggi in generale, e altrettanto autorevoli, che usino "funzione", sarei per ridenominare la pagina a "procedura" o "sottoprogramma", creando redirect (o link da disambiguazioni dove necessario) per tutte le varianti alternative. Sarebbe anche opportuno riformulare l'incipit chiarendo che "funzione", "sottoprogramma", "procedura", ... non sono puri e semplici sinonimi, bensì diverse denominazioni usate con diverse sfumature di significato in diversi contesti, un po' come fanno Ghezzi e Jazayeri nel loro libro. Moongateclimber (msg) 10:47, 13 gen 2015 (CET)
- Mi sembra che la scelta possa ricadere su uno dei due termini da te consigliati, "procedura" o "sottoprogramma". A parte in trattazioni del tipo "fondamenti di informatica" (che è quello a cui dovremmo in effetti attenerci in questo caso), come dicevo prima, a me sembra che il termine sottoprogramma sia in generale molto più raro. Procedura avrebbe anche l'attinenza con "programmazione procedurale", di contro il fatto che in certi linguaggi c'è la differenza tra procedura e funzione. Oltre a pensare che sia meglio togliersi i dubbi con ancora qualche ricerca, risollecito Soujak. --Rotpunkt (msg) 13:01, 13 gen 2015 (CET)
- Personalmente penso che quasi tutti gli argomenti siano a favore di "sottoprogramma". Viene usato da un luminare (Ghezzi, che è uno dei pochi, forse l'unico, italiano, ad aver pubblicato libri per il mercato internazionale sulla teoria dei linguaggi di programmazione), è come dici tu appropriato a un livello "fondamenti dell'informatica" (che è il giusto livello per questa voce), non appartiene al vocabolario tecnico di nessun linguaggio in particolare (cosa che vedo come un vantaggio!). L'unico dispiacere: è giusta l'osservazione che "procedura" richiama "procedurale", sarebbe un punto a favore anche importante, ma per me non abbastanza da controbilanciare gli altri.
- Passando a una "meta-ricerca": googlando rispettivamente i due termini (uniti a "informatica"), la prima ricerca ("sottoprogramma informatica") mi ritorna tutti siti collegati col concetto generale di cui parla questa voce (moltissimi dei quali universitari), la seconda ricerca ("procedura informatica") mi ritorna quasi sempre pagine che contrappongono o affiancano i due termini "procedura" e "funzione" (Procedure e funzioni). Non me lo sarei aspettato, ma i risultati per "procedura" attinenti all'argomento sono anche molto meno rispetto a quelli per "sottoprogramma" (probabilmente perché inserendo la parola "informatica" nella ricerca ho dirottato la ricerca verso testi di teoria generale a sfavore dei vari tutorial Python, Pascal, ecc., in cui "procedura" sarebbe apparso ma con significato specifico). A me restano pochissimi dubbi, ma prima di modificare lascio a chi è interessato il tempo di dire la sua. Moongateclimber (msg) 15:53, 13 gen 2015 (CET)
- Mi sembra che la scelta possa ricadere su uno dei due termini da te consigliati, "procedura" o "sottoprogramma". A parte in trattazioni del tipo "fondamenti di informatica" (che è quello a cui dovremmo in effetti attenerci in questo caso), come dicevo prima, a me sembra che il termine sottoprogramma sia in generale molto più raro. Procedura avrebbe anche l'attinenza con "programmazione procedurale", di contro il fatto che in certi linguaggi c'è la differenza tra procedura e funzione. Oltre a pensare che sia meglio togliersi i dubbi con ancora qualche ricerca, risollecito Soujak. --Rotpunkt (msg) 13:01, 13 gen 2015 (CET)
- Se non ci sono fonti sui linguaggi in generale, e altrettanto autorevoli, che usino "funzione", sarei per ridenominare la pagina a "procedura" o "sottoprogramma", creando redirect (o link da disambiguazioni dove necessario) per tutte le varianti alternative. Sarebbe anche opportuno riformulare l'incipit chiarendo che "funzione", "sottoprogramma", "procedura", ... non sono puri e semplici sinonimi, bensì diverse denominazioni usate con diverse sfumature di significato in diversi contesti, un po' come fanno Ghezzi e Jazayeri nel loro libro. Moongateclimber (msg) 10:47, 13 gen 2015 (CET)
[← Rientro] Anzitutto vi prego di scusare il ritardo col quale scrivo nonostante le gentili richieste di Rotpunkt. Mi trovo d'accordo con Moongateclimber (che ringrazio per gli interventi) con ognuna delle opinioni qui sinora espresse nell'analisi della questione terminologica. Aggiungo due citazioni tratte da un'altra autorevole fonte italiana tradotta in inglese per il mercato internazionale (e che consiglio agli interessati come Moongateclimber): M. Gabbrielli, S. Martini. Linguaggi di programmazione, principi e paradigmi 2ª ed. McGraw-Hill.
- «Con procedura si dovrebbe indicare un sottoprogramma che non restituisce direttamente un valore; una funzione è un sottoprogramma che restituisce un valore.» (Cap.7, nota 5; pag. 172.)
- «Questi tre termini ["sottoprogramma", "procedura" e "funzione"] assumono significati diversi nei diversi linguaggi. Ad esempio, sottoprogramma è in genere il termine più generale, mentre nei linguaggi della famiglia ALGOL e loro discendenti una procedura è un sottoprogramma che modifica lo stato, mentre una funzione è un sottoprogramma che restituisce un valore.» (Cap.9, nota 1; pag. 243.)
Visto che le diverse fonti non hanno dubbi (e sarebbe bello inserirle in bibliografia assieme ad una nota terminologica) nel chiamare l'oggetto della voce "sottoprogramma", tale dev'essere il suo titolo.
--SoujaK (msg) 17:36, 14 feb 2015 (CET)
Linguaggi fortemente tipati e linguaggi esplicitamente tipati
[modifica wikitesto]Tra i linguaggi dotati di un sistema di tipi forte, che effettua insomma il controllo di tipo staticamente, cioè in fase di compilazione, non tutti prevedono che i tipi debbano essere esplicitati nei programmi. Infatti, un consistente ed importante gruppo di linguaggi che tra i più noti conta Standard ML, F#, OCaml, Scala e Haskell, infatti, effettua Inferenza di tipo senza obbligare il programmatore ad alcuna dichiarazione a proposito dei tipi, con l'ovvia eccezione delle definizioni di nuovi tipi. La voce attuale, in diversi punti, assume erroneamente il contrario e dovrebbe essere corretta. --SoujaK (msg) 13:03, 20 feb 2015 (CET)