JavaFX Script

JavaFX Script é uma linguagem de script utilizada na plataforma JavaFX criada pela Sun Microsystems, que faz parte da plataforma Java. O domínio da plataforma engloba o desenvolvimento de RIAs (Rich Internet Application) para desktops e dispositivos móveis. A plataforma JavaFX compete diretamente com outras opções para RIAs como Adobe Flex e Microsoft Silverlight. JavaFX Script está sob a licença GNU General Public License , através do projeto OpenJFX patrocinado pela Sun.

A linguagem inicialmente era um projeto do desenvolvedor Chris Oliver da Sun Microsystems, era chamada F3 (Forms Follow Function) e tinha como propósito tornar o desenvolvimento de interfaces de usuário mais fácil para os programadores. Tinha características como suporte por IDEs (Integrated Development Environment), tipagem estática e compilada, portanto com suporte a erros em tempo de compilação, que foram mantidas na versão oficial.

Estrutura da linguagem

[editar | editar código-fonte]

JavaFX Script é uma linguagem de scripts compilados , orientada a objetos, com uma sintaxe declarativa onde é informado quais os objetivos e não como atingi-los. O sistema de tipos da linguagem é baseado no sistema de tipos de Java, porém utiliza a inferência de tipos, onde os tipos são identificados pelo compilador, característica que permite determinar erros de programação antes da execução do programa, diferente de outras linguagens como Javascript. Abaixo um exemplo de declaração de variáveis que demonstra a inferência de tipos:

package exemplo1; def a = 100.50; var b = 10; var minhaStr = "Isso é uma String"; 
println( "a é do tipo {a.getClass()}" ); println( "b é do tipo {b.getClass()}" ); println( "minhaStr é do tipo {minhaStr.getClass()}" ); 
/* 
  • Saída:
  • a é do tipo class java.lang.Float
  • b é do tipo class java.lang.Integer
  • minhaStr é do tipo class java.lang.String
  • /

No exemplo acima a palavra reservada 'def' serve para definir valores constantes, e a palavra 'var' variáveis.

def a = 100.50; var b = 10; var minhaStr = "Isso é uma String"; var str2:String = "Outra String"; b = 10.2; minhaStr = 1060; println( "a é do tipo {a.getClass()}" ); println( "b é do tipo {b.getClass()}" ); println( "minhaStr é do tipo {minhaStr.getClass()}" ); 
/* 
  • Saída:
  • ex.fx:7: warning: possible loss of precision
  • found  : Number
  • required: Integer
  • b = 10.2;
  • ^
  • ex.fx:8: incompatible types
  • found  : Integer
  • required: String
  • minhaStr = 1060;
  • ^
  • 1 error
  • 1 warning
  • ERROR: javafxc execution failed, exit code: 1
  • /

Pode-se observar pelos exemplos acima que a linguagem tem tipagem implícita (inferência de tipos pelo compilador), explícita (pelo programador) e estática (uma vez determinado o tipo da váriavel ele não pode ser modificado). Por ser construída no topo da plataforma Java a linguagem também oferece integração com suas classes já produzidas sem a necessidade de reescrever código.

JavaFX tem aplicações no desenvolvimento de interfaces de usuário para desktops e dispositivos móveis. Existem outras plataformas como o Adobe Flex, que utiliza os recursos do Adobe Flash podendo ser utilizado em todos os browsers com suporte a essa tecnologia e o Microsoft Silverlight. Todos estes citados tem o interesse de melhorar o processo de criação de interfaces e prover uma rica experiência com softwares para os usuários.

Compiladores e IDEs

[editar | editar código-fonte]

Programas utilizando a linguagem podem ser desenvolvidos em ambientes bem conhecidos pelos desenvolvedores como as IDEs Eclipse e Netbeans. Para compilar será necessário o compilador javafxc, que é parte do pacote do SDK da plataforma JavaFX no site sobre da plataforma na própria Sun. Existem também diversos plugins para softwares muito utilizados como o Adobe Photoshop e Adobe Illustrator que exportam os gráficos criados para JavaFX e outras que permitem a exportação de gráficos SVG.

HelloWorld (HelloWorld.fx)
package helloworld; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.paint.*; import javafx.scene.text.*; 
Stage {     title: "HelloWorldFx"     width: 250     height: 250     scene: Scene {         	     		fill : 	LinearGradient {     		        	endX: 0.0     		        	stops: [ Stop { offset: 0.0 color: Color.LIGHTGRAY },Stop { offset: 1.0 color: Color.GRAY } ]     		        				};     		content: Text {         					font : Font {             						size : 24         							};         					x: 25, y: 120         					content: "Hello World!";         					     					}     	} } 

Após compilar e executar esse é o resultado:

Números Perfeitos (np.fx)
package nps; 
import java.lang.Math; import java.lang.System; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; 
function isPrimo( p:Integer ):Boolean{     if( p > 2 and (p mod 2) == 0 ){ /*println( "Divided by 2" );*/ return false;}     if( p > 3 and (p mod 3) == 0 ){ /*println( "Divided by 3" );*/ return false;}     if( p > 5 and (p mod 5) == 0 ){ /*println( "Divided by 5" );*/ return false;}     var rt = Math.floor( Math.sqrt( p ) );     var divisor = Math.floor( Math.sqrt( rt ) );     while( divisor ⇐ rt ){             if( divisor > 1 )                 if( (p mod divisor) == 0 ){                     return false;                 }             divisor++;     }     return true; } 
function proxPrimo( last:Integer ):Integer{     var nextP = last + 1;     var testResult = isPrimo( nextP );     if( not testResult )         nextP = proxPrimo( nextP );     return nextP; } /** 
  • @return 0 caso não seja possível calcular um primo de mersenne a partir do primo 'p', ou o primo de mersenne
  • /
function calcMersenne( p:Integer ):Integer{     var m:Integer = Math.pow( 2 , p ) - 1;     if( not isPrimo( m ) ){         m = 0;     }     return m; } 
function isPerfeito( p:Integer , prime:Integer ):Boolean{ 	var sum = 0; 	var n = 1; 	var max;     if( p ⇐ 6 ){         max = Math.pow( 2 , prime) - 1; 		while( n ⇐ max ){         	sum += n++;         }     }else{         max = Math.pow( 2 , (prime - 1)/2 );         var i = 0; 		while( i < max ){ 			sum += (n*n*n); 			n += 2; 			i++; 		}		     } 	if( p == sum ) return true;     return false; } /** 
  • @return 0 caso não seja possível calcular um número perfeito a partir do primo 'p', ou o número perfeito
  • /
function calcPerfeito( p:Integer ):Integer{     var e = Math.pow( 2 , p - 1 );     var mersenne = calcMersenne( p );     if( mersenne == 0 ) return 0;     var perfect:Integer = e * mersenne;     if( not isPerfeito( perfect , p ) )     	return 0;     return perfect; } 
function listaPerfeitos(){ 	var p = 1; 	var i = 0; 	var perfeito; 	var n = 5 ; 	println( "Max de números perfeitos?" ); 	n = Integer.parseInt( new BufferedReader( new InputStreamReader( System.in ) ).readLine() ); 			 	while( i < n ){ 	    p = proxPrimo( p ); 	    perfeito = calcPerfeito( p ); 	    if( not (perfeito == 0) ){ 	    	println( "Perfeito usando o primo {p}: {perfeito}" ); 	    	i++; 	    } 	} 
} 
listaPerfeitos(); 
/** 
  • Entrada: 5
  • Saída:
  • Perfeito usando o primo 2: 6
  • Perfeito usando o primo 3: 28
  • Perfeito usando o primo 5: 496
  • Perfeito usando o primo 7: 8128
  • Perfeito usando o primo 13: 33550336
  • /

Ligações externas

[editar | editar código-fonte]
Este artigo é um esboço. Você pode ajudar a Wikipédia expandindo-o. Editor: considere marcar com um esboço mais específico.