Oxígeno (lenguaje de programación)
Oxygene ("Oxígeno") (anteriormente conocido como Chrome ("Chrome") ) es un lenguaje de programación desarrollado por RemObjects Software para el estándar Common Language Infrastructure . El lenguaje Oxygene fue creado a partir del lenguaje Object Pascal .
Originalmente vinculado a Delphi.NET , luego de ser adquirido por Embarcadero , Oxygene no es totalmente compatible con versiones anteriores. Por ejemplo, no incluye bibliotecas de clases que sean compatibles con la biblioteca VCL , lo que es criticado por su implementación insuficientemente eficiente, que prácticamente eliminó la migración de aplicaciones heredadas creadas con Delphi o Kylix y el uso de la biblioteca de clases VCL
a la plataforma .NET . .
El software RemObjects ofrece integración completa con Visual Studio 2003/2005/2008 y, desde junio de 2010, integración con MonoDevelop y Visual Studio 2010. Actualmente no existe
un IDE separado para Oxygene.
Características
- Integración CLI .
- Basado en Object Pascal con muchas características nuevas añadidas.
- Compatibilidad con el mecanismo de "contratos de clase" para restringir datos de forma similar a la programación de contratos .
- Definición de variables directamente dentro de un bloque de código.
- Tipos anónimos .
- Métodos anónimos y delegados .
- Métodos asíncronos y trabajo con flujos.
- Cálculo lambda .
- Compatibilidad con .NET 2.0.
- Tipos genéricos y métodos . (solo para .NET 2.0)
- Tipos anulables . (solo para .NET 2.0)
- iteradores .
- Clases parciales (para .NET 1.1 y 2.0)
- Métodos de extensión
- Compatibilidad con LINQ .
- Inferencia de tipo .
- Propiedades virtuales y eventos.
- Soporte mejorado para eventos con múltiples controladores (eventos de multidifusión).
- Inicializadores de variables dentro del código.
- Compatibilidad mejorada con bucles for .
- Uso de dos puntos para seguridad tipográfica.
- Soporte en sistemas Windows para la construcción de aplicaciones cliente ( Windows Presentation Foundation ).
- Compatibilidad completa con marcos alternativos creados para Visual Studio (consulte Portable.NET y Mono IDE )
Ejemplos de código
hola mundo
espacio de nombres Hola Mundo ;
interfaz
type
HelloClass = class
public
class method Main ;
fin ;
implementación
método de clase HelloClass . principal ;
comenzarSistema
. _ consola _ WriteLine ( '¡Hola mundo!' ) ; fin ;
fin _
Contenedor Genérico
espacio de nombres GenericContainer ;
interfaz
type
TestApp = class
public
class method Main ;
fin ;
Persona = propiedad pública de clase
FirstName : String ; propiedad Apellido : Cadena ; fin ;
implementación
utiliza
el sistema . colecciones _ genérico ;
método de clase TestApp . principal ;
begin
var myList := new Lista < Persona >; //escriba la
inferencia myList . Añadir ( nueva Persona ( Nombre := 'Iván' , Apellido := 'Petrov' )) ;
miLista . Añadir ( nueva Persona ( Nombre := 'Masha' , Apellido := 'Petrova' )) ;
miLista . Añadir ( nueva Persona ( Nombre := 'Sergey' , Apellido := 'Petrov' )) ;
consola _ WriteLine ( miLista [ 1 ] .Nombre ) ; _ // No se requiere validación Consola . línea de lectura ; fin ;
fin _
Clase genérica
espacio de nombres GenericMethodTest ;
interfaz
type
GenericMethodTest = clase estática método de clase
pública
Main ; método de clase privada Swap < T > ( var izquierda , derecha : T ) ; método de clase DoSwap < T > ( izquierda , derecha : T ) ; fin ;
implementación
método de clase GenericMethodTest . DoSwap < T > ( izquierda , derecha : T ) ;
comenzar
var a := izquierda ;
var b := derecha ;
consola _ WriteLine ( 'Tipo: {0}' , tipo de ( T )) ;
consola _ WriteLine ( '-> a = {0}, b = {1}' , a , b ) ;
Intercambiar < T > ( var a , var b ) ;
consola _ WriteLine ( '-> a = {0}, b = {1}' , a , b ) ;
fin ;
método de clase GenericMethodTest . principal ;
comenzar
var a := 23 ; // tipo inferencia
var b := 15 ;
Intercambiar < Entero > ( a , b ) ; // sin reducción de objetos en esta clase.
var aa := 'abc' ; // tipo inferencia
var bb := 'def' ;
Intercambiar < Cadena > ( aa , bb ) ; // sin reducción de objetos en esta clase.
Intercambiar ( 1.1 , 1.2 ) ; // tipo de inferencia para parámetros genéricos
Consola . LeerLínea () ;
fin ;
método de clase GenericMethodTest . Intercambiar < T > ( var izquierda , derecha : T ) ;
comenzar
var temp := izquierda ;
izquierda := derecha ;
derecha := temporal ;
fin ;
fin _
El programa debe generar:
Tipo: Sistema.Int32
-> a = 23, b = 15
-> a = 15, b = 23
Tipo: Sistema.Cadena
-> a=abc, b=def
-> a=def, b=abc
Tipo: Sistema.Doble
-> a = 1,1, b = 1,2
-> a = 1,2, b = 1,1
---
Manejo mejorado de declaraciones de selección
caso aClassID . Hasta la parte superior de
'XYZ' : resultado : = TMyXYZClass ;
'ABC' : resultado := TMyOtherClass ;
de lo contrario, generar una nueva excepción ( 'ID de clase no válida' ) ;
fin ;
case aClass tipo de
TMyXYZClass : TMyXYZClass ( aClass ) . hacer algo ;
TMyOtherClass : TMyOtherClass ( aClass ) . HazAlgoMás ;
de lo contrario, generar una nueva excepción ( 'Referencia de clase no válida' ) ;
fin ;
Véase también
Fuentes adicionales
Notas