Funzioni di libreria: introduzione

Proteus si distingue dagli altri processori di testo per il fatto che contiene in sè molte più funzioni predefinite per il trattamento dei dati; questa scelta progettuale, pur aumentando i requisiti di sistema per il funzionamento di Proteus, permette tuttavia di realizzare programmi molto più brevi e, in definitiva, più veloci, dal momento che molte delle funzionalità sono implementate a basso livello. Ciò aumenta anche la velocità di scrittura dei programmi Proteus, incrementando la produttività.

Le funzioni di libreria sono suddivise nelle seguenti categorie:

Vi sono alcune funzioni non classificabili all'interno di queste categorie ed elencate di seguito:

EVAL(exp1[, exp2..])

valuta tutte le espressioni passate e ritorna il valore dell'ultima espressione; ad esempio:

EVAL("CIAO", ADD(3, 5), MUL(6, 18), "HELLO, " "WORLD")

restituisce: HELLO, WORLD

FUNC(fstr[, par1[, par2..]])

esegue la funzione corrispondente alla stringa fstr con i parametri indicati; fstr può essere una UDF oppure un'altra funzione di libreria, ad eccezione di PUB, AVLTRAVERSE, DICTRAVERSE, STRTRAVERSE, REXFSTRTRAN, REXIFSTRTRAN e di tutte le funzioni che prevedono il passaggio di una UDF; se il numero di parametri indicati non coincide con il numero di parametri richiesto dalla definizione della corrispondente funzione viene segnalato un errore durante l'esecuzione; lo stesso accade se la funzione indicata non risulta definita.

IIF(nTest, exp1, exp2)

ritorna exp1 se nTest != 0, exp2 altrimenti; il valore ritornato corrisponde al tipo di exp1 (o exp2, anche diversi); questa funzione è detta espressione condizionale in linea

ISET(id1[,id2..],exp)

assegna exp a id1, id2.., che devono essere tutti identificatori oppure invocazioni della funzione di libreria PUB su un identificatore; ritorna il valore di exp

PUB(id)

funzione utilizzabile solo all'interno di UDF; corrisponde all'utilizzo di id all'esterno della funzione; il suo unico parametro deve essere il nome di un identificatore (letterale, non tra virgolette); è l'unica funzione che può essere preceduta dal carattere '@' che indica il passaggio per riferimento, in quanto essa rappresenta in realtà un identificatore; in quanto tale, può essere impiegata anche in circostanze nelle quali è normalmente atteso un identificatore (es. ISET, argomento assegnato di FOR, ecc.). Può essere sostituita premettendo direttamente il carattere '_' all'identificatore; _id corrisponde infatti a PUB(id).

Alcune delle funzioni presentate (soprattutto nella categoria gestione strutture dati) sono dette 'con handles'; queste funzioni creano oppure operano con strutture permanenti create in memoria dinamicamente durante l'esecuzione; ciò implica la necessità di liberare opportunamente la memoria quando le informazioni sono state utilizzate e non sono più richieste, pena la progressiva saturazione delle risorse del sistema e la terminazione improvvisa dell'esecuzione (memoria esaurita).

Un handle è semplicemente un numero intero, che può essere memorizzato, passato alle funzioni o restituito da una UDF come qualsiasi altra variabile. Le funzioni con handle sono raggruppate logicamente in modo da avere una funzione costruttore (crea la struttura dati in memoria e restituisce il suo handle) ed una funzione distruttore (libera la memoria e rende invalido l'handle), più alcune altre funzioni per manipolare i dati finché esistono in memoria.

Un'altra considerazione importante riguarda gli argomenti con cui sono invocate le funzioni.

Come si è già avuto modo di menzionare, Proteus è un linguaggio completamente funzionale, cioè privo di operatori. Ciò ha permesso di eliminare completamente le parentesi generalmente impiegate per stabilire l'ordine di valutazione delle espressioni; se si specificano delle parentesi dove non necessario (cioè ovunque, tranne subito dopo i nomi delle funzioni e l'ultimo parametro di ciascuna invocazione), Proteus segnala un errore sintattico.
Esiste, tuttavia, un'eccezione alla completa funzionalità del linguaggio; infatti, Proteus è dotato di un operatore implicito, cioé l'operatore di concatenamento. Dal punto di vista logico e semantico, ciò non comporta alcun problema nella definizione del linguaggio, in quanto l'operazione di concatenamento stringhe è completamente associativa e, essendo l'unica funzionalità sottesa da un "operatore" (in senso lato) di cui è dotato il linguaggio, l'ordine di valutazione è sempre univocamente determinato. Si è deciso di dotare Proteus di questa caratteristica per permettere la scrittura di espressioni più compatte e limitare in questo modo il numero delle variabili che l'utente deve impiegare. Come già detto, il concatenamento è contraddistinto da un operatore implicito, cioè "invisibile"; esso si ottiene mediante giustapposizione di due espressioni, come in questo esempio:

SET FH = FOPEN(BaseDir DIRLAST(H, 1), 1)

Quanto sopra è semanticamente identico all'espressione:

SET FH = FOPEN(STRCAT(BaseDir, DIRLAST(H, 1)), 1)

Il concatenamento implicito può avvenire in qualunque parametro con cui è invocata una funzione di libreria o UDF, oltre che, come già visto, negli argomenti di alcuni metodi. Come è immediatamente visibile, il suo impiego semplifica il codice, rendendolo più leggibile; poiché Proteus è orientato soprattutto all'elaborazione di testo, questo stratagemma permette di risparmiare molto tempo e di ottenere programmi più comprensibili.

Inizio pagina Prossimo argomento Argomento precedente Indice per argomenti Indice analitico
Midnight Lake iPhone Case Black Women Shoes Black Flat Shoes Leather Flats Black Patent Ballerinas Black Ballet Shoes Casual Shoes Black Shoes Women Balle Record Player Cufflinks Best iPhone XR Clear Cases iPhone XS/XS Max Leather Cases Sale Best iPhone 8/8 Plus Silicone Cases iPhone 7/7 Plus Cases & Screen Protector New Cases For iPhone 6/6 Plus iPhone 8 Case Sale iPhone Xr Case Online iPhone 7 Case UK Online iPhone X Case UK Sale iPhone X Case Deals iPhone Xs Case New Case For iPhone Xr UK Online Case For iPhone 8 UK Outlet Fashion Silver Cufflinks For Men Best Mens Cufflinks Outlet Online The Gold Cufflinks Shop Online Cheap Shirt Cufflinks On Sale Nice Wedding Cufflinks UK Online Top Black Cufflinks UK Online Mens Cufflinks Online Silver Cufflinks For Men Men Cufflinks UK Sale Gold Cufflinks UK Online Gold Cufflinks UK Silver Cufflinks UK Shirt Cufflinks Discount Online Mens Cufflinks Deals & Sales Girls Shoes For Dance Fashion Ballet Dance Shoes Best Ballet Flats Shoes UK Online Cheap Ballet Pointe Shoes UK Online Best Ballet Shoes Outlet Best Dance Shoes Sale Cheap Ballet Flats Sale UK Best Pointe Shoes Online UK Ballet Dance Shoes UK Shoes For Dance UK Best Ballet Slippers Shop Best Yoga Shoes Hotsell