Oxygene (programovací jazyk)
Oxygene ("Oxygen") (dříve známý jako Chrome ("Chrome") ) je programovací jazyk vyvinutý společností RemObjects Software pro standard Common Language Infrastructure . Jazyk Oxygene byl vytvořen z jazyka Object Pascal .
Oxygene, původně spojený s Delphi.NET , po akvizici společností Embarcadero není plně zpětně kompatibilní. Nezahrnuje například knihovny tříd, které jsou kompatibilní s knihovnou VCL , které je vytýkána nedostatečně efektivní implementace, která prakticky eliminovala portování starších aplikací vytvořených pomocí Delphi nebo Kylix a využívajících knihovnu tříd VCL
na platformu .NET. .
RemObjects Software nabízí plnou integraci s Visual Studio 2003/2005/2008 a od června 2010 - integraci s MonoDevelop a Visual Studio 2010. V současnosti neexistuje žádné
samostatné IDE pro Oxygene.
Funkce
- Integrace CLI .
- Založeno na Object Pascalu s mnoha přidanými novými funkcemi.
- Podpora mechanismu „třídních smluv“ pro omezení dat podobně jako programování smluv .
- Definování proměnných přímo uvnitř bloku kódu.
- Anonymní typy .
- Anonymní metody a delegáti .
- Asynchronní metody a práce s proudy.
- Lambda kalkul .
- podpora .NET 2.0.
- Obecné typy a metody . (pouze pro .NET 2.0)
- Typy s možností null . (pouze pro .NET 2.0)
- Iterátory .
- Částečné třídy (pro .NET 1.1 a 2.0)
- Metody rozšíření
- podpora LINQ .
- Typový závěr .
- Virtuální vlastnosti a události.
- Vylepšená podpora pro události s více obslužnými rutinami (multicast události).
- Variabilní inicializátory uvnitř kódu.
- Vylepšená podpora pro smyčky .
- Použití dvojtečky pro bezpečnost typu.
- Podpora v systémech Windows pro vytváření klientských aplikací ( Windows Presentation Foundation ).
- Plná podpora alternativních frameworků vytvořených pro Visual Studio (viz Portable.NET a Mono IDE )
Příklady kódu
ahoj světe
jmenný prostor Ahoj světe ;
rozhraní
type
HelloClass = class
metoda veřejné
třídy Main ; konec ;
implementace
metoda třídy HelloClass . hlavní ;
beginSystem._
_ _ Konzole . WriteLine ( 'Ahoj světe!' ) ;
konec ;
konec .
Generic Container
jmenný prostor GenericContainer ;
rozhraní
type
TestApp = class
public
class metoda Main ;
konec ;
Osoba = class
public
property Jmeno : String ;
vlastnost Příjmení : String ;
konec ;
implementace
používá
System . sbírky . generický ;
metoda třídy TestApp . hlavní ;
begin
var myList := new List < Osoba >; //typ
odvození myList . Přidat ( nová Osoba ( Jméno := 'Ivan' , Příjmení := 'Petrov' )) ;
myList . Přidat ( nová Osoba ( Jméno := 'Masha' , Příjmení := 'Petrova' )) ;
myList . Přidat ( nová osoba ( Jméno := 'Sergey' , Příjmení := 'Petrov' )) ;
Konzole . WriteLine ( myList [ 1 ] . Jméno ) ; // Není vyžadováno žádné ověření
Console . readline ;
konec ;
konec .
Obecná třída
jmenný prostor GenericMethodTest ;
rozhraní
type
GenericMethodTest = statická třída
metoda veřejné
třídy Main ; metoda soukromé třídy Swap < T > ( var vlevo , vpravo : T ) ; metoda třídy DoSwap < T > ( vlevo , vpravo : T ) ; konec ;
implementace
metoda třídy GenericMethodTest . DoSwap < T > ( vlevo , vpravo : T ) ;
begin
var a := left ;
var b := vpravo ;
Konzole . WriteLine ( 'Typ: {0}' , typ ( T )) ;
Konzole . WriteLine ( '-> a = {0}, b = {1}' , a , b ) ;
Swap < T > ( var a , var b ) ;
Konzole . WriteLine ( '-> a = {0}, b = {1}' , a , b ) ;
konec ;
metoda třídy GenericMethodTest . hlavní ;
begin
var a := 23 ; // typ inference
var b := 15 ;
DoSwap < Integer > ( a , b ) ; // žádné downcasting pro Object v této třídě.
var aa := 'abc' ; // typ inference
var bb := 'def' ;
DoSwap < String > ( aa , bb ) ; // žádné downcasting pro Object v této třídě.
DoSwap ( 1.1 , 1.2 ) ; // zadejte odvození pro obecné parametry
Console . ReadLine () ;
konec ;
metoda třídy GenericMethodTest . Swap < T > ( var vlevo , vpravo : T ) ;
begin
var temp := left ;
vlevo := vpravo ;
vpravo := teplota ;
konec ;
konec .
Program by měl vypsat:
Typ: System.Int32
-> a = 23, b = 15
-> a = 15, b = 23
Typ: System.String
-> a=abc, b=def
-> a=def, b=abc
Typ: System.Double
-> a = 1,1, b = 1,2
-> a = 1,2, b = 1,1
---
Vylepšené zpracování příkazů select
case aClassID . Horní část
'XYZ' : výsledek := TMyXYZClass ;
'ABC' : vysledek := TMyOtherClass ;
else raise new Exception ( 'Neplatné ID třídy' ) ;
konec ;
případ aClass typ TMyXYZClass : TMyXYZClass ( aClass ) . _
udělat něco ; TMyOtherClass : TMyOtherClass ( aClass ) . DoSomethingElse ; else raise new Exception ( 'Neplatný odkaz na třídu' ) ; konec ;
Viz také
Další zdroje
Poznámky