Funzioni di conversione (libreria runtime di Apache OpenOffice)

From Apache OpenOffice Wiki
< IT‎ | Documentation‎ | BASIC Guide
Revision as of 07:15, 7 July 2018 by Sancho (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

In molte situazioni, si verificano circostanze in cui una variabile di un tipo deve essere modificata in una variabile di un altro tipo.

Conversioni di tipo implicito ed esplicito

Il modo più semplice di convertire una variabile da un tipo ad un altro è quello di utilizzare un'assegnazione.

Dim A As String
Dim B As Integer
 
B = 101 
A = B

In questo esempio, la variabile A è una stringa, e la variabile B è un numero intero. Apache OpenOffice Basic garantisce che la variabile B sia convertita in una stringa durante l'assegnazione alla variabile A. Questa conversione è molto più elaborata di quello che sembra: il numero intero B rimane nella memoria operativa sotto forma di un numero di due byte di lunghezza. A, d'altro canto, è una stringa e il computer salva un valore di uno o due byte di lunghezza per ogni carattere (ogni numero). Pertanto, prima della copia del contenuto da B a A, B deve essere convertito nel formato interno di A.

A differenza della maggior parte dei linguaggi di programmazione, Basic esegue la conversione del tipo automaticamente. Ciò può tuttavia avere conseguenze importanti. A un esame ravvicinato, la sequenza di codice seguente

Dim A As String
Dim B As Integer
Dim C As Integer
 
B = 1 
C = 1
A = B + C

che a prima vista sembra corretta, può dare origine a errori. L'interprete Basic calcola prima il risultato del processo di addizione, quindi lo converte in una stringa che, come risultato, produce la stringa 2.

Se, d'altro canto, l'interprete Basic convertisse per prima cosa i valori iniziali B e C in una stringa e applicasse l'operatore più al risultato, questo produrrebbe la stringa 11.

Lo stesso accade quando si utilizzano le variabili di tipo variante:

Dim A 
Dim B 
Dim C 
 
B = 1 
C = "1"
A = B + C

Poiché le variabili di tipo variante possono contenere sia numeri che stringhe, non è chiaro se alla variabile A viene assegnato il numero 2 o la stringa 11.

Le occasioni di errore qui indicate per le conversioni di tipo implicito possono essere evitate solo programmando con attenzione, ad esempio evitando l'utilizzo del tipo di dati variante.

Per evitare altri errori risultanti dalle conversioni di tipo implicito, Apache OpenOffice Basic offre una serie di funzioni di conversione, utilizzabili per definire quando il tipo di dati di un'operazione dovrebbe essere convertito:

CStr(Var)
Converte qualsiasi tipo di dati in una stringa.
CInt(Var)
Converte qualsiasi tipo di dati in un valore intero.
CLng(Var)
Converte qualsiasi tipo di dati in un valore intero lungo.
CSng(Var)
Converte qualsiasi tipo di dati in un valore singolo.
CDbl(Var)
Converte qualsiasi tipo di dati in un valore doppio.
CBool(Var)
Converte qualsiasi tipo di dati in un valore booleano.
CDate(Var)
Converte qualsiasi tipo di dati in un valore di data.

Potete utilizzare queste funzioni di conversione per definire il modo in cui Apache OpenOffice Basic eseguirà le operazioni di conversione di tipo:

Dim A As String
Dim B As Integer
Dim C As Integer
 
B = 1 
C = 1
A = CStr(B + C)         ' B and C are added together first, then
                        ' converted to the string "2"
A = CStr(B) + CStr(C)   ' B and C are converted into a string,then
                        ' combined to produce the string "11"

Durante la prima addizione dell'esempio, Apache OpenOffice Basic aggiunge prima le variabili intere e quindi converte il risultato in una catena di caratteri. Ad A è assegnata la stringa 2. Nel secondo esempio, le variabili intere vengono prima convertite in due stringhe e quindi collegate reciprocamente tramite l'assegnazione. Ad A è pertanto assegnata la stringa 11.

Le funzioni di conversione numerica CSng e CDbl accettano inoltre i numeri decimali. Il simbolo definito nelle impostazioni specifiche del paese corrispondente deve essere utilizzato come simbolo del separatore decimale. Al contrario, i metodi CStr utilizzano le impostazioni specifiche del paese attualmente selezionate per la formattazioni di numeri, date e ora.

La funzione Val è diversa dai metodi Csng, Cdbl e Cstr. Essa converte una stringa in un numero, ma prevede sempre l'utilizzo di un punto come simbolo del punto decimale.

Dim A As String
Dim B As Double
 
A = "2.22"
B = Val(A)      ' Is converted correctly regardless of the
                ' country-specific settings

Controllo del contenuto delle variabili

In alcuni casi, non è possibile convertire la data:

Dim A As String
Dim B As Date
 
A = "test"
B = A            ' Creates error message

Nell'esempio illustrato, l'assegnazione della stringa test a una variabile data non ha senso, pertanto l'interprete Basic restituisce un errore. Lo stesso si verifica quando si cerca di assegnare una stringa a una variabile booleana:

Dim A As String
Dim B As Boolean
 
A = "test"
B = A            ' Creates error message

Anche in questo caso, l'interprete Basic restituisce un errore.

Questi messaggi di errore possono essere evitati controllando il programma prima di un'assegnazione, al fine di stabilire se il contenuto della variabile da assegnare corrisponde al tipo della variabile di destinazione. Apache OpenOffice Basic fornisce le seguenti funzioni di prova a tal fine:

IsNumeric(Value)
Controlla se un valore è un numero.
IsDate(Value)
Controlla se un valore è un numero.
IsArray(Value)
Controlla se un valore è una matrice.

Queste funzioni sono particolarmente utili quando si richiede l'immissione di valori da parte dell'utente. Ad esempio, è possibile controllare se un utente ha immesso un numero o una data validi.

If IsNumeric(UserInput) Then
  ValidInput = UserInput
Else
  ValidInput = 0
  MsgBox "Error message."
End If

Nell'esempio precedente, se la variabile UserInput contiene un valore numerico valido, quest'ultimo viene assegnato alla variabile ValidInput. Se UserInput non contiene un numero valido, a ValidInput viene assegnato il valore 0 e viene restituito un messaggio di errore.

Sebbene in Apache OpenOffice esistano funzioni di prova per il controllo dei numeri, delle date e delle matrici, non esiste una funzione corrispondente per il controllo dei valori booleani. La funzionalità può tuttavia essere simulata utilizzando la funzione IsBoolean:

Function IsBoolean(Value As Variant) As Boolean
  On Error Goto ErrorIsBoolean:
  Dim Dummy As Boolean
  Dummy = Value
  IsBoolean = True
  On Error Goto 0
  Exit Sub
 
  ErrorIsBoolean:
  IsBoolean = False
  On Error Goto 0
End Function

La funzione IsBoolean definisce una variabile interna Dummy di tipo booleano e cerca di assegnarla al valore trasferito. Se l'assegnazione è riuscita, la funzione restituisce True. Se invece non riesce, viene prodotto un errore runtime, che intercetta la funzione di prova per restituire un errore.

Documentation note.png Se una stringa in Apache OpenOffice Basic contiene un valore non numerico e se questo viene assegnato a un numero, Apache OpenOffice Basic non produce un messaggio di errore, ma interrompe la conversione della stringa in corrispondenza del primo carattere non valido. Questa procedura è differente da quanto accade in VBA. In VBA, se viene eseguita l'assegnazione descritta, viene prodotto un errore e il programma termina.
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools