b'\n_START_ARTICLE_\nHaxe\n_START_SECTION_\nSoporte de la plataforma\n_START_PARAGRAPH_\nEl c\xc3\xb3digo Haxe puede ser compilado en bytecode para maquinas virtuales diferentes como las de Adobe Flash Player y Neko, y puede generar c\xc3\xb3digo fuente para ActionScript 3, JavaScript, e incluye soporte experimental para C++ y C#. Esta estrategia de compilar a m\xc3\xbaltiples c\xc3\xb3digos fuente de distintos lenguajes est\xc3\xa1 inspirada por el paradigma escribe una vez, ejecuta en todas partes. Esto tambi\xc3\xa9n permite al programador elegir el mejor compilador para su trabajo.\n_START_SECTION_\nLenguaje\n_START_PARAGRAPH_\nEl lenguaje Haxe es similar a ECMAScript, aunque casi ning\xc3\xban c\xc3\xb3digo ECMAScript se ejecutar\xc3\xa1 en Haxe sin modificaciones. A diferencia de ECMAScript, Haxe es un lenguaje compilado. Es un lenguaje de prop\xc3\xb3sito general con programaci\xc3\xb3n orientada a objetos, excepciones, e inferencia de tipos con par\xc3\xa1metros de clase. Clases gen\xc3\xa9ricas, reflectividad, iteradores, y programaci\xc3\xb3n funcional est\xc3\xa1n incorporados en la funcionalidad del lenguaje y librer\xc3\xadas. A diferencia de otros lenguajes de programaci\xc3\xb3n, Haxe contiene un sistema de tipos fuerte y din\xc3\xa1mico. El compilador comprobar\xc3\xa1 tipos impl\xc3\xadcitos y dar\xc3\xa1 errores de compilaci\xc3\xb3n, pero eso tambi\xc3\xa9n permite al programador omitir la comprobaci\xc3\xb3n de tipos y se basan en el manejo din\xc3\xa1mico de tipos de la plataforma de destino._NEWLINE_Desde que Haxe tiene sus or\xc3\xadgenes en AS3, todas las APIs de Flash pueden ser usadas, aunque Haxe requiere c\xc3\xb3digo mejor formado y est\xc3\xa1ndares de programaci\xc3\xb3n a diferencia de los compiladores Adobe (por ejemplo, respecto al \xc3\xa1mbito y tipo de dato)._NEWLINE_Los par\xc3\xa1metros de las funciones pueden ser definidos de forma muy precisa en Haxe:_NEWLINE_function multipleparams (threedimensionalarray : Array<Array<Array<Int>>>, stringval : String, boolval : Bool) {}// Valor entero opcional devuelve un enterofunction optionalargument ( ?i : Int ) : Int {_NEWLINE_    return 0;}// Llama a una funci\xc3\xb3n sin par\xc3\xa1metrosfunction functionasparameter ( f : Void -> Void ) {_NEWLINE_    f();}// Llama a una funci\xc3\xb3n que retorna un entero, con un par\xc3\xa1metro Intfunction anotherfunctionparm ( f : Int -> Int ) {_NEWLINE_    var result = f(1);}// funci\xc3\xb3n que coge cualquier clase de tipo y lo devuelvefunction icoulddoanything (d : Dynamic) : Dynamic {_NEWLINE_    return d;}_NEWLINE_Tipos enumerados son una caracter\xc3\xadstica clave del lenguaje; pueden tener par\xc3\xa1metros propios y ser recursivos. Son similares a los tipos de datos algebraicos en lenguajes como ML o Haskell. Las enumeraciones en Haxe no son simplemente indexados valores de "n\xc3\xbamero m\xc3\xa1gico" como en la mayor\xc3\xada de los lenguajes, pero es m\xc3\xa1s abstracto: no contienen ning\xc3\xban valor inherente, pero pueden ser instanciados en variables como en este ejemplo:_NEWLINE_    enum Color {_NEWLINE_        red;_NEWLINE_        green;_NEWLINE_        blue;_NEWLINE_        rgb: ( r : Int, g : Int, b : Int );_NEWLINE_    }_NEWLINE_ _NEWLINE_    class Colors {_NEWLINE_        static function toInt ( c : Color ) : Int {_NEWLINE_            return switch ( c ) {_NEWLINE_                case red: 0xFF0000;_NEWLINE_                case green: 0x00FF00;_NEWLINE_                case blue: 0x0000FF;_NEWLINE_                case rgb(r, g, b): (r << 16) | (g << 8) | b;_NEWLINE_            }_NEWLINE_        }_NEWLINE_        static function validCalls() {_NEWLINE_             var redint = toInt(Color.red);_NEWLINE_             var rgbint = toInt(Color.rgb(100,100,100));           _NEWLINE_        }_NEWLINE_    }_NEWLINE_Este ejemplo dibuja un cuadrado rojo usando el objeto Flash MovieClip, y usa la palabra clave "using"._NEWLINE_using Colors;class Test {_NEWLINE_  static function main() {_NEWLINE_    var mc: flash.display.MovieClip = flash.Lib.current;_NEWLINE_    mc.graphics.beginFill(red.toInt());_NEWLINE_    mc.graphics.moveTo(50,50);_NEWLINE_    mc.graphics.lineTo(100,50);_NEWLINE_    mc.graphics.lineTo(100,100);_NEWLINE_    mc.graphics.lineTo(50,100);_NEWLINE_    mc.graphics.endFill();_NEWLINE_  }}'