jueves, 14 de agosto de 2008

Primera Entrega JavaFX. Generalidades del Lenguaje

Como comentaba anteriormente, tengo la intención de subir la referencia al lenguaje JavaFX que está disponible aquí traducida al castellano. Aunque este documento no define una especificación formal de lenguaje, se puede considerar una referencia completa de todas las funcionalidades actuales soportadas por el lenguaje. Lo voy a hacer en varias entregas que coinciden con los capítulos del documento.

Esta primera entrada proporciona una vista general del lenguaje JavaFX Script. Describe sus funcionalidades principales, dejando los detalles para capítulos siguientes. Este documento está orientado a diseñadores y desarrolladores de aplicaciones ricas de cliente en Internet RIA, que funcionan en páginas web, como el software Java Web Start o como aplicaciones tradicionales de escritorio. Su contenido asume que el lector está familiarizado con el lenguaje Java.

El lenguaje de programación JavaFX Script tiene las siguientes particularidades:
  • Usa sintaxis declarativa para especificar componentes GUI, habilitando al código del desarrollador acercarse al diseño real del GUI.
  • Usa enlazado de datos declarativos y evaluación incremental, permitiendo la creación y configuración sencilla de componentes individuales. Los datos de aplicación y los componentes GUI se sincronizan automáticamente.
  • Está tipado estáticamente, teniendo la mayor parte de estructuración de código, reuso y encapsulación que permiten la creación y mantenimiento de programas muy grandes en el lenguaje Java.
  • Funciona con la mayoría de IDES, incluyendo NetBeans.
  • Es capaz de soportar GUIs de cualquier tamaño y complejidad
  • Es más sencillo de utilizar que Swing.
Las siguientes secciones presentan un recorrido rápido del lenguaje de programación JavaFX Script. Estas secciones proporcionan una introducción general de su sintaxis de núcleo y capacidades, comparando y contrastando con Java cuando sea apropiado. Cada punto se cubre luego con más detalle en capítulos subsecuentes.


Scripts

En el lenguaje JavaFX, un script es una o más declaraciones de expresiones. Evaluando el script se evalúan las declaraciones o expresiones en orden:

var ten : Integer = 10;

java.lang.System.out.println("Twice {ten} is {2 * ten}.");

Esto muestra:

Twice 10 is 20.

A diferencia de una aplicación escrita en Java, un script no necesita contener ninguna definición de clase ni funciones.


Clases

Las definiciones de clases comparten muchas similitudes con Java, pero algunas diferencias son notables. El estado, por ejemplo, es información almacenada en atributos, no en campos. El comportamiento se expone a través de funciones y no métodos (más adelante se verá que ha desaparecido "operation" en la nueva versión del lenguaje, ahora se utiliza "function" tanto para métodos, no usando "return", como para funciones, con "return"). El siguiente ejemplo define una clase simple Rectangle que muestra la sintaxis básica de cada uno.

class Rectangle {

attribute width: Integer;

attribute height: Integer;

function grow(): Void {

grow(1);

}

function grow(amount: Integer): Void {

width += amount;

height += amount;

}

}

El lenguaje de programación soporta herencia múltiple, haciendo posible que una clase herede de más de una clase.


Objetos

Objetct literals proporciona una sintaxis simple para instanciación de clase. El siguiente código crea una única instancia de la clase Rectangle definida previamente, inicializando sus atributos width y height a 100. (Nótese que no se necesita new)

Rectangle {

width: 100

height: 100

}


Para guardar una referencia a este objeto, usa la palabra var:

var myRect = Rectangle {

width: 100

height: 100

}


Expresiones y Operadores


Como cualquier otro lenguaje de programación, el lenguaje JavaFX Script soporta expresiones y operadores.

El capítulo 5 discute las expresiones y operadores disponibles en el lenguaje JavaFX Script.


Secuencias

Una secuencia guarda una lista ordenada de objetos. Esto es análogo grosso modo a los arrays de Java. Ambos guardan múltiples valores y son accedidos por un índice comenzando por 0.

var week = ["Monday","Tuesday","Wednesday","Thursday",

"Friday","Saturday","Sunday"];

var mon = week[0];

var wed = week[2];

var fri = week[4];

También están soportadas las porciones (slice) de secuencias:

var week = ["Monday","Tuesday","Wednesday","Thursday",

"Friday","Saturday","Sunday"];

var weekdays = week[0..4]; // first slice

var weekend = week[5..6]; // second slice


Enlazado de Datos (bind)

El enlazado de datos proporciona una sintaxis simple para sincronizar el estado de objetos múltiples. Cuando dos objetos están enlazados uno con el otro, el valor del segundo objeto cambia automáticamente cuando el primero se actualiza. Un uso común de enlazado de datos es guardar componentes GUI sincronizados con sus datos por debajo.

import javafx.application.Frame;

import javafx.application.Stage;

import javafx.scene.text.Text;

var myString = "Hello World!";

Frame {

width: 50

height: 50

visible: true

stage: Stage {

content: Text {

content: bind myString

}

}

}

// Si otra parte del código cambia myString

//el texto del GUI cambiará automáticamente



Disparadores (Triggers)

Los disparadores (triggers) son bloques de código que se ejecutan cuando se satisfacen ciertas condiciones. Por ejemplo, puede que quieras estar alertado de si el valor de un atributo ha sido establecido a algo que no es apropiado. El siguiente ejemplo muestra la sintaxis básica de un trigger:

import java.lang.System;

ReplaceDemo {

mySensitiveData: "Will anyone notice?"

}

class ReplaceDemo {

attribute mySensitiveData: String

on replace {

System.out.println("I noticed a change!");

};

// application-specific safeguarding code would go here

}