|
- Presentación
- Tipo inferencia: asignación de copy
- sintáctico
- Modo de funcionamiento
- Los tipos sencillos apoyados por la asignación de copy
- Tipo inferencia: asignación de reference
- sintáctico
La inferencia de tipo se utiliza para simplificar la declaración de Variable cuando el tipo Variable puede ser deducido automáticamente por el compilador. El principio es sencillo. El tipo Variable se deduce según el valor que se le asigna al Variable. El valor se puede asignar: Versiones 20 y posteriores Nueva funcionalidad versión 20 Tipo inferencia: asignación de copy sintáctico 1. Simple inferencia: donde: - <Variable> corresponde al nombre de Variable para declarar.
- <Valor> corresponde al valor asignado a la Variable a declarar.
Versiones 19 y posteriores2. Inferencia múltiple:
let (<Variable 1>, ..., <Variable N>) = (<Value 1>, ..., <Value N>)
donde: - <Variable 1> ... <Variable N> corresponden a los nombres de Variable s para declarar.
- Valor 1> <Valor 1> ... <Valor N> corresponden a los valores asignados a cada Variable a declarar.
Nueva funcionalidad versión 192. Inferencia múltiple:
let (<Variable 1>, ..., <Variable N>) = (<Value 1>, ..., <Value N>)
donde: - <Variable 1> ... <Variable N> corresponden a los nombres de Variable s para declarar.
- Valor 1> <Valor 1> ... <Valor N> corresponden a los valores asignados a cada Variable a declarar.
2. Inferencia múltiple:
let (<Variable 1>, ..., <Variable N>) = (<Value 1>, ..., <Value N>)
donde: - <Variable 1> ... <Variable N> corresponden a los nombres de Variable s para declarar.
- Valor 1> <Valor 1> ... <Valor N> corresponden a los valores asignados a cada Variable a declarar.
Modo de funcionamiento Durante la asignación por copia, si el tipo de Variable puede ser definido durante la compilación, el Variable es declarado según el tipo de valor. Se asigna una copia de valor a la Variable. Ejemplos:
let Amount = 1500.69 // real type
let City = "Montpellier" // string type
Versiones 19 y posteriores
// Multiple inference let (x, y) = (1, "A")
// Multiple inference via a procedure returning multiple values let (x, y) = MyProcedureWithMultipleReturns()
Nueva funcionalidad versión 19
// Multiple inference let (x, y) = (1, "A")
// Multiple inference via a procedure returning multiple values let (x, y) = MyProcedureWithMultipleReturns()
// Multiple inference let (x, y) = (1, "A")
// Multiple inference via a procedure returning multiple values let (x, y) = MyProcedureWithMultipleReturns()
Observación: La Variable mantiene su tipo; su tipo no cambia durante la ejecución aunque se le asigne otro valor de un tipo diferente. Si no se puede definir el tipo de la variable durante la compilación, el tipo se definirá durante la ejecución, de forma dinámica (como cuando un parámetro de Procedure no tiene tipo). Por ejemplo:
// Case of unknown type during the compilation PROCÉDURE MyProc(Param1)
let MyVar = Param1
// As the Param1 parameter has no specific type, // its type is unknown during the compilation // The Param1 variable will have the same type as the value passed in parameter // during the call to the procedure. // The MyVar variable will also have the same type // as the type of the Param1 variable known during the execution.
Los tipos sencillos apoyados por la asignación de copy Los tipos simples que apoya la asignación de copy son los siguientes: | | Tipo de valor | Tipo utilizado |
---|
karaoke | karaoke | unsigned integer on 1 byte | int | unsigned integer en 2 bytes | int | unsigned integer on 4 bytes | unsigned integer on 4 bytes | unsigned integer on 8 bytes | unsigned integer on 8 bytes | Entero de 1 byte | int | 2-byte integer | int | int | int | Entero de 8 bytes | Entero de 8 bytes | divisa | divisa | decimal | decimal | 4 bytes reales | 4 bytes reales | real | real | carácter | carácter | string | string (Ansi o Unicode) | cadena en N | string (Ansi o Unicode) | Cuerda de Ansi | Cuerda de Ansi | Cuerda ansi en N | Cuerda de Ansi | Cadena unicode | Cadena unicode | Cadena Unicode en N | Cadena unicode | Cadena ASCIIZ en N | Cuerda de Ansi | Cadena fija en N | Cuerda de Ansi | Cadena de Pascal en N | Cuerda de Ansi | buffer | buffer | date | date | momento | momento | datetime | datetime | lapso | lapso | tipo de letra | tipo de letra | procedimiento | procedimiento |
Tipo inferencia: asignación de reference sintáctico 1. Simple inferencia:
let <Variable> <- <Value>
donde: - <Variable> corresponde al nombre de Variable para declarar.
- <Valor> corresponde al valor asignado a la Variable a declarar.
Versiones 19 y posteriores2. Inferencia múltiple:
let (<Variable 1>, ..., <Variable N>) <- (<Value 1>, ..., <Value N>)
donde: - <Variable 1> ... <Variable N> corresponden a los nombres de Variable s para declarar.
- Valor 1> <Valor 1> ... <Valor N> corresponden a los valores asignados a cada Variable a declarar.
Nueva funcionalidad versión 192. Inferencia múltiple:
let (<Variable 1>, ..., <Variable N>) <- (<Value 1>, ..., <Value N>)
donde: - <Variable 1> ... <Variable N> corresponden a los nombres de Variable s para declarar.
- Valor 1> <Valor 1> ... <Valor N> corresponden a los valores asignados a cada Variable a declarar.
2. Inferencia múltiple:
let (<Variable 1>, ..., <Variable N>) <- (<Value 1>, ..., <Value N>)
donde: - <Variable 1> ... <Variable N> corresponden a los nombres de Variable s para declarar.
- Valor 1> <Valor 1> ... <Valor N> corresponden a los valores asignados a cada Variable a declarar.
La asignación de reference está disponible sólo para los tipos complejos: - Tipo de objeto: Clase, Estructura, Clase.NET, tipo avanzado, ....
- Tipo de contenedor: Array, Array asociativo, Stack, Tail, List, ...
Durante una asignación de reference, el valor de reference Variable no se copia en el nuevo Variable sino que el nuevo Variable apunta al reference Variable. En este caso, si se modifica el reference Variable, también se modifica el nuevo Variable. Ejemplo:
clMyClient is cClient // cClient class, clMyClient object let clClient <- clMyClient // class type, clClient points to clMyClient object
arrPrice is array of 5 currencies arrPrice[1] = 500.00 arrPrice[2] = 250
let tPrice <- arrPrice // array type, tPrice points to the arrPrice array
Esta página también está disponible para…
|
|
|
| |
| Haga clic en [Agregar] para publicar un comentario |
|
| |
|
| |
| |
| |
| |
| |
| |
| | |
| |