Oxygene (programmeringsspråk)

syre
Språkklass programmeringsspråk och objektorienterat programmeringsspråk
Framträdde i 2005
Utvecklaren RemObjects programvara
Släpp 6.0 ( 28 maj 2013 )
Blivit påverkad Object Pascal , C#
Licens Kommersiell
Hemsida remobjects.com/oxygene

Oxygene ("Oxygen") (tidigare känt som Chrome ("Chrome") ) är ett programmeringsspråk utvecklat av RemObjects Software för standarden Common Language Infrastructure . Oxygene-språket skapades från Object Pascal-språket .

Ursprungligen knuten till Delphi.NET , efter att ha förvärvats av Embarcadero , är Oxygene inte helt bakåtkompatibel. Till exempel inkluderar det inte klassbibliotek som är kompatibla med VCL- biblioteket , som kritiseras för dess otillräckligt effektiva implementering, vilket praktiskt taget eliminerade porteringen av äldre applikationer skapade med Delphi eller Kylix och använda VCL-klassbiblioteket till .NET -plattformen .

RemObjects Software erbjuder full integration med Visual Studio 2003/2005/2008, och sedan juni 2010 - integration med MonoDevelop och Visual Studio 2010. Det finns för närvarande ingen separat IDE för Oxygene.

Funktioner

Kodexempel

hej världen

namnutrymme Hello World ; gränssnitt typ HelloClass = class public class method Main ; slut ; genomförande klassmetod HelloClass . _ huvud ; börjaSystem . _ Konsol . WriteLine ( 'Hej världen!' ) ; slut ; slut .


Generisk behållare

namnutrymme GenericContainer ; gränssnitt typ TestApp = class public class method Main ; slut ; Person = klass offentlig egendom Förnamn : String ; egenskap Efternamn : String ; slut ; genomförande använder System . samlingar . Generisk ; klassmetod TestApp . _ huvud ; begin var myList := new List < Person >; //typ inferens myList . Lägg till ( ny person ( Förnamn := 'Ivan' , Efternamn := 'Petrov' )) ; min Lista . Lägg till ( ny person ( Förnamn := 'Masha' , Efternamn := 'Petrova' )) ; min Lista . Lägg till ( ny person ( Förnamn := 'Sergey' , Efternamn := 'Petrov' )) ; Konsol . WriteLine ( myList [ 1 ] . FirstName ) ; // Ingen validering krävs Konsol . läslinje ; slut ; slut .


Generisk klass

namnutrymme GenericMethodTest ; gränssnitt typ GenericMethodTest = static class public class method Main ; privatklassmetod Swap < T > ( var vänster , höger : T ) ; _ _ klassmetoden DoSwap < T > ( vänster , höger : T ) ; _ slut ; genomförande klassmetod GenericMethodTest . _ DoSwap < T > ( vänster , höger : T ) ; börja var a := vänster ; var b := höger ; Konsol . WriteLine ( 'Typ: {0}' , typ av ( T )) ; Konsol . WriteLine ( '-> a = {0}, b = {1}' , a , b ) ; Byt < T > ( var a , var b ) ; Konsol . WriteLine ( '-> a = {0}, b = {1}' , a , b ) ; slut ; klassmetod GenericMethodTest . _ huvud ; börja var a := 23 ; // typ inferens var b := 15 ; DoSwap < Heltal > ( a , b ) ; // ingen downcasting för Object i denna klass. var aa := 'abc' ; // typ inferens var bb := 'def' ; DoSwap < String > ( aa , bb ) ; // ingen downcasting för Object i denna klass. DoSwap ( 1.1 , 1.2 ) ; // typ inferens för generiska parametrar Console . ReadLine () ; slut ; klassmetod GenericMethodTest . _ Byt < T > ( var vänster , höger : T ) ; start var temp := vänster ; vänster := höger ; höger := temp ; slut ; slut .

Programmet ska mata ut:

Typ: System.Int32 -> a = 23, b = 15 -> a = 15, b = 23 Typ: System.String -> a=abc, b=def -> a=def, b=abc Typ: System.Dubbel -> a = 1,1, b = 1,2 -> a = 1,2, b = 1,1 ---


Förbättrad hantering av utvalda uttalanden

case aClassID . Toppen av 'XYZ' : resultat := TMyXYZClass ; 'ABC' : resultat := TMyOtherClass ; annars skapa nytt undantag ( 'Ogiltigt klass-ID' ) ; slut ; case aClass typ av TMyXYZClass : TMyXYZClass ( aClass ) . Gör något ; TMyOtherClass : TMyOtherClass ( aClass ) . DoSomethingElse ; annars uppstår ett nytt undantag ( 'Ogiltig klassreferens' ) ; slut ;

Se även

Ytterligare källor

Anteckningar