JavaFX Script
              Introdução


Fábio Nogueira de Lucena
Instituto de Informática (UFG)
Graduação em Engenharia de Software
http://engenhariadesoftware.inf.br
JavaFX é uma
família de produtos
“Habilidade para criar conteúdo interativo,
aplicações e serviços a serem executados do
computador de mesa aos dispositivos da sala
                  de estar”




“Experiências de internet ricas para todas as
             telas da sua vida”
Fonte de informações




javafx.com
Fonte de informações




java.sun.com/javafx
Componentes

• API
• JavaFX Script (linguagem de programação)
• JavaFX SDK
       Onde obtê-los: javafx.com
Alguns links

• http://javafx.com
• http://java.sun.com/javafx
• http://www.javapassion.com/javafx/
• Esta e outras apresentações (slides):
  http://www.slideshare.net/kyrios
Importante

• Tudo o que existe em Java pode ser
    reutilizado em JavaFX

•   Você poderá reutilizar suas
    classes Java!
Sentenças em JavaFX:
Antes de um Exemplo
Comentários

• Comentário (múltiplas linhas)
  /* Comentário que se estende
     por mais de uma linha.
  */
• Comentário (uma única linha)
  // Até o final da linha
Object literal
• Em Java
  Rectangle r = new Rectangle();
  r.width = 10;
  r.height = 5;

• Em JavaFX
  Rectangle {
    width : 10
    height: 5
  }
Packages e imports

• Package
  package br.ufg.inf.projetoX;
• Import
  import javafx.stage.Stage;
  import javafx.scene.*;
Primeiro exemplo
package jfx1;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.*;

/*   Main.fx
*/

Stage {
    title: "Título da Aplicação (janela)"
    width: 250
    height: 80
    scene: Scene {
        content: Text {
            font : Font { size : 16 }
            x: 10, y: 30
            content: "Meu primeiro teste"
        }
    }
}
Como obtê-lo?

• Repositório dos exemplos
  http://exemplos.googlecode.com/svn/trunk/javafx

• Comando para obter localmente?
  (cria diretório jfx1 a partir do repositório)
  svn export <url-acima>/jfx1 jfx1
Como compilar e
      executar?
• Vá jfx1 o diretório criado
  cd
      para


• Compilação
  javafxc -d    ~/tmp src/jfx1/Main.fx

• Execução-cp
  javafx        ~/tmp jfx1.Main
Se o resultado for...

• Especifique o encoding pertinente ao arquivo fonte
  (no momento da compilação)
  javafxc -d ~/tmp -encoding ISO-8859-1 src/jfx1/Main.fx


• Ao executar o~/tmp jfx1.Main
  javafx -cp
                resultado da compilação anterior


• O resultado...
Primeiro a linguagem,
   depois os recursos da API
Variáveis e tipos
      (explícitos)
var boolean: Boolean = true;
var byte: Byte = 2;
var short: Short = 3;
var int:Integer = 4;
var long: Long = 5;
var float: Float = 1.2;
var double: Double = 2.0;
Tipos (implícitos)
// var boolean : Boolean = true;
// é o mesmo que...
var boolean = true;


// var int : Integer = 4;
// é o mesmo que ...
var int = 4;
Todos os tipos
Boolean
Integer
Number
String
Duration     Number é sinônimo de Float
Character
Byte        Float é equivalente a Number
Short
Long         Float é sinônimo de Number
Float
Double      Number é equivalente a Float
Exemplo Boolean

   // Pacote: javafx.lang
   // Classe FX (vários métodos static)
   var logica : Boolean = false;
   FX.println(“Valor: {not logica}”);


   // OU
   println(“Valor: {not logica}”);
Notou que não houve concatenação explícita?
Constantes
                           var (variável)
                          def (constante)
// Variável
var logica : Boolean = false;


// CONSTANTE
def pi = 3.1415926536;
println(“Valor: {pi}”);
Área de um círculo
                              var (variável)
                             def (constante)

// Arquivo: x.fx
// Área pi * raio * raio
def pi = 3.1415926536;
def raio = 2; // Dois metros
println(“Área: {pi*raio*raio}m2”);

Este código é compilável e executável!
$ javafxc x.fx
$ javafx x
Volume de um cilindro
                  // Área pi * raio * raio
                  def pi = 3.1415926536;
                  def raio = 2; // Dois metros
                  var area = pi * raio * raio;
                  var altura = 1; // 1 metro
                  var volume = area * altura * 1000;
def (constante)
 var (variável)




                  println(“Volume: {volume} litros”);

                  Este código é compilável e executável!
                  $ javafxc x.fx
                  $ javafx x
String (“ ou ‘)
                        def name : String = “Nome”;
“string” ou ‘s tring’



                        var nAme = ‘Nome’;
                        var iguais = ‘{name == nAme}’;
                        // Imprime
                        // Iguais?: true
                        print(“Iguais?: {iguais}”);


                        Este código é compilável e executável!
                        $ javafxc x.fx
                        $ javafx x
String (múltiplas linhas)
                                                   “s t
                        var name = “Pedro ”             r   i ng
                            ‘Álvares’                           ”o
                                                                     u ‘s
“string” ou ‘s tring’




                                   “ Cabral”;                               tri
                                                                                  ng
                                                                                    ’
                        // Imprime
                        // Pedro Álvares Cabral
                        print(name);

                         Este código é compilável e executável!
                         $ javafxc x.fx
                         $ javafx x
Duration
  Detalhes em javafx.lang.Duration
var horas = 0h;
var minutos = 1m;
var segundos = 1s;
var milissegundos = 1ms;
var parcial = horas + milissegundos;
print(parcial + minutos + segundos);

Este código é compilável e executável!
Sequência é uma coleção
   de objetos ordenados
• É declarada com colchetes ([ e ])
• Uma sequência é linear, não existem
  sequências multidimensionais
• Sequências são iguais se possuírem o
  mesmo tamanho e os mesmos valores nas
  mesmas ordens
• Notação: tipo seguido de []
  (por exemplo, Integer[])
• sizeof recupera o tamanho da
  sequência
Sequências
Sequence é uma lista ordenada
de elementos de um mesmo tipo
     var lista = [-1, 0, 1];
     def ordenada = [ false, true, true ];
     var mesmoTipo = [ ‘A’, “ Janela” ];
     println(lista);
     println(ordenada);
     println(mesmoTipo);


     Nenhuma surpresa:
Sequências
Sequence é uma lista ordenada
 de elementos de um mesmo tipo
    var ints : Integer[] = [1, 2,3];
    def bs : Boolean[]=[false];
    def vazia=[];
    println(ints);println(bs);println(vazia);

     Nada espetacular...
Sequências
Sequence é uma lista ordenada
 de elementos de um mesmo tipo
    // Vírgula como separador
    var strs = [ “ok”, ‘correto’ ];
    println(strs);


    Aplicação de 3 linhas:
Nem sempre...

sequências são explicitamente
criadas por meio de seus
elementos separados por
vírgulas, nestes casos, ...
Faixas (sequências numéricas)
             Step padrão é
1 ou 1.0 dependendo do tipo do elemento
var ints = [1..5]; // step é 1
println(ints);
var ns = [ 1.0..1.3 step 0.1];
println(ns);

 Arquivo n.fx é compilado
 n (do nome do arquivo) é executada
Faixas (sequências numéricas)

             Step padrão é
1 ou 1.0 dependendo do tipo do elemento
println([1..<5]);           //   1 a 4
println([4..1 step -1]);    //   4 a 1
println([10..1]);           //   [ ]
println(sizeof [1..67]);    //   67
Sequências não podem conter sequências

  Uma sequência contém apenas objetos
    Uma sequência não é um objeto!
 var inicio = 1;
 var fim = 9;
 var p = 2;
 var impares = [inicio..fim step p];
 var pares = [(inicio+1)..(fim+1) step p];
 var todos = [ impares, pares ];
 println(todos);

 Elementos são concatenados:
Sequências não podem conter sequências

  Uma sequência contém apenas objetos
    Uma sequência não é um objeto!

 import javafx.util.Sequences;
 var impares = [1..9 step 2];
 var pares = [2..10 step 2];
 println(Sequences.sort([impares,pares]));


 Elementos são concatenados e ordenados:
Convertendo para String
   Sequence é uma lista ordenada
   de elementos de um mesmo tipo
var bytes : Byte[] = [2..1 step -1];
println(bytes);
println(“{bytes}”);
println(“{[5..0 step -1]}”);


Saídas produzidas
O que você já sabe?
Sequence é uma lista ordenada
de elementos de um mesmo tipo

                     javafxc compila arquivo .fx
                     javafx executa

A linha abaixo é compilável e executável!

  println(new java.util.Date());
Leia mentalmente...
• Obter o tamanho de uma sequence
• Recuperar um único elemento
• Recuperar uma faixa de elementos
  consecutivos
• Recuperar subconjunto de elementos
  não consecutivos que satisfazem
  critérios de busca
• Inverter a ordem
• Inserir/remover um elemento
Tamanho (sizeof)
     sizeof também pode ser empregado
      para tipos primitivos (retorna 1)
  var ints = [ 2..10000 ];
  println(sizeof ints);    // 9999

    sizeof usado também com referência
  (retorna 1 se não for null ou 0 para null)
var integer : Integer;
var ref : javafx.scene.shape.Rectangle;
println(sizeof integer); // 1
println(sizeof ref);     // 0
Acesso a elemento
nome de sequence ou expressão que resulta em
         sequence seguido de [indice]
  var ints = [ 2..10000 ];
  ints[3] = 2;

  println(ints[-14]); // Imprime 0
  println([1, 3][1]); // Imprime 3
  println(ints[4]);   // Imprime 6
  // Imprime true
  println(ints[2*10000] == ints[-1]);

 [indice]
Acesso a segmento
nome de sequence ou expressão que resulta em
            sequence seguido de:

  print([1..5][0..]);     //   todos
  print([1..5][0..<1]);   //   [ 1 ]
  print([1..5][0..0]);    //   [ 1 ]
  print([1..5][2..<]);    //   [ 3, 4 ]
  print([1..5][3..4]);    //   [ 4, 5 ]



 [índice]
Segmento por predicado
  Elementos não necessariamente consecutivos
   são selecionados, basta satisfazer condição
  var ns = [1..5];
  print(ns[x | x < 6]);    // todos
  print(ns[y | y == 4]);   // [ 4 ]
  print(ns[z | z*z == 4]); // [ 2 ]
  print(ns[varX | true]); // todos
  // Imprime [ 1, 3, 5 ] (índices pares)
  print(ns[k | indexof k mod 2 == 0]);
  print(ns[par | par mod 2 == 0]); // Pares

[valores da sequência]
Invertendo ordem
  Não modifica a sequência original, produz
  outra que contém os mesmos elementos,
          mas na ordem inversa


var ns = [1..5];
var sn = [5..1 step -1];
print(reverse ns);       // [ 5, 4, ...
print(reverse ns == sn); // true

 reverse ns
 Uma outra sequência é criada
Inserindo elemento
 Modifica a sequência original

    insert into
  insert before
   insert after
insert into
        Modifica a sequência original
  Insere um valor no final de uma sequência



var ns = [1..3];
insert 10 into ns;
print(ns); // [ 1, 2, 3, 10 ]


insert x into sequencia;
Valor x é inserido no final de sequencia
insert before
        Modifica a sequência original
         Insere valor em sequência
         antes do índice fornecido
var ns = [1..3]; // [ 1, 2, 3 ]
insert -1 before ns [2];
print(ns); // [ 1, 2, -1, 3 ]

insert -1 before ns[0];
print(ns); // [ -1, 1, 2, -1, 3 ]

insert x before sequencia [indice];
Valor x é inserido em sequencia antes
de indice
insert after
        Modifica a sequência original
         Insere valor em sequência
           após o índice fornecido
var ns = [1..3];
insert -1 after ns [2];
print(ns); // [ 1, 2, 3, -1 ]

insert -1 after ns[-1];
print(ns); // [ -1, 1, 2, 3, -1 ]

insert x after sequencia [indice];
Valor x é inserido em sequencia após
indice
Inserir sequência em sequência
       Modifica a sequência original
  insert into, insert before e insert after
var   pares1 = [1..5][x | x mod 2 == 0];
var   pares2 = pares1;
var   pares3 = pares1;
var   impares = [1..3][x | x mod 2 != 0];

// [ 2, 4, 1, 3 ]
insert impares into pares1;

// [ 1, 3, 2, 4 ]
insert impares before pares2 [0];

// [ 2, 1, 3, 4 ]
insert impares after pares3 [0];
Removendo elementos
       Modifica a sequência original
       delete valor from sequência
         delete sequência [índice]
var ints = [1..10];
delete 1 from ints;   //   [   2,3,4,5,6,7,8,9,10 ]
delete 3 from ints;   //   [   2,4,5,6,7,8,9,10 ]
delete ints [2];      //   [   2,4,6,7,8,9,10 ]
delete ints [3];      //   [   2,4,6,8,9,10 ]
delete ints [4..4];   //   [   2,4,6,8,10 ]
delete ints [5];      //   [   2,4,6,8,10 ]
println(ints);


delete x from sequencia
delete sequencia [índice]
Sequence comprehension
     Criando sequências com uso do for

var ints = for (x in [1..2]) x*x;
println(ints); // [ 1, 4 ]
var ns = for (x in [1..2] where x > 1) x;
println(ns); // [ 2 ]

def AA = [ 1, 2 ];
def BB = [ 3, 4 ];
var matriz = for (a in AA, b in BB) a*10 + b;
println(matriz); // [ 13, 14, 23, 24 ]
Última sentença do for
            (define o valor)
     Criando sequências com uso do for
var ints = for (x in [1..2]) {
    println(x);
    x*x;
};
println(ints);




                Resultado:
Funções úteis
           javafx.util.Sequences

binarySearch
indexByIdentity
indexOf
isEqualByContentIdentity
max
min
nextIndexByIdentity
nextIndexf
reverse
shuffle
sort
Ordenando
      javafx.util.Sequences.sort(seq)

import javafx.util.Sequences;

var strs = [ “teste”, “cadeira”, “casa” ];
var ord = Sequences.sort(strs);
println(ord);
                [ “cadeira”, “casa”, “teste” ]
var ints = [10..1 step -1];
def intsOrdered = Sequences.sort(ints);
println(intsOrdered);

                  [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
Expressões
       Trecho de código em JavaFX Script
    que o compilador é capaz de compreender


println([1..10]);


{
     println([1..10]);
}

       Expressões equivalentes do tipo void
Expressões
       Trecho de código em JavaFX Script
    que o compilador é capaz de compreender


10;


{
     10;
}

      Expressões equivalentes do tipo Integer
Atribuições
    Trecho de código em JavaFX Script
 que o compilador é capaz de compreender
var x = 10;
var y = {
   10;
}
var z = {
   def a = 5;
   def b = 2;
   a * b;
}
           Atribuições envolvendo
   expressões equivalentes do tipo Integer
Atribuições
    Trecho de código em JavaFX Script
 que o compilador é capaz de compreender

var x = 10;


var y = {
   println(x);
   x + 10;       // ; é opcional aqui
}
println(y);

           Atribuições envolvendo
          expressões do tipo Integer
While
         Executar bloco de código
     enquanto condição for verdadeira



var x = 1;
while (x < 10) {
    print(“ {x}”);
    x++;
}
              Resultado:
            123456789
For
           Executar bloco de código
       enquanto condição for verdadeira
 var y = for (x in [1..10]) {
     print(“ {x}”);
     “a{x*x}”
 }
 println(“ “);
 println(y);

                     Resultado:
               1 2 3 4 5 6 7 8 9 10
[ a1, a4, a9, a16, a25, a36, a49, a64, a91, a100 ]
if
         Executar bloco de código
      conforme avaliação de condição



var x = 1;
println(“{if (x>0) then x+3 else x-10}”);



                Resultado:
                    4
if
         Executar bloco de código
    dependendo de avaliação de condição



var x = 1;
var y = if (x < 0) then “a” else “b”;
println(“Resultado: {y}”);


            O que é produzido?
               Resultado: b
O que ainda falta?

• object literal
• binding
• gráficos
• API              Não perca...

Javafx Introdução

  • 1.
    JavaFX Script Introdução Fábio Nogueira de Lucena Instituto de Informática (UFG) Graduação em Engenharia de Software http://engenhariadesoftware.inf.br
  • 2.
  • 3.
    “Habilidade para criarconteúdo interativo, aplicações e serviços a serem executados do computador de mesa aos dispositivos da sala de estar” “Experiências de internet ricas para todas as telas da sua vida”
  • 4.
  • 5.
  • 6.
    Componentes • API • JavaFXScript (linguagem de programação) • JavaFX SDK Onde obtê-los: javafx.com
  • 7.
    Alguns links • http://javafx.com •http://java.sun.com/javafx • http://www.javapassion.com/javafx/ • Esta e outras apresentações (slides): http://www.slideshare.net/kyrios
  • 8.
    Importante • Tudo oque existe em Java pode ser reutilizado em JavaFX • Você poderá reutilizar suas classes Java!
  • 9.
  • 10.
    Comentários • Comentário (múltiplaslinhas) /* Comentário que se estende por mais de uma linha. */ • Comentário (uma única linha) // Até o final da linha
  • 11.
    Object literal • EmJava Rectangle r = new Rectangle(); r.width = 10; r.height = 5; • Em JavaFX Rectangle { width : 10 height: 5 }
  • 12.
    Packages e imports •Package package br.ufg.inf.projetoX; • Import import javafx.stage.Stage; import javafx.scene.*;
  • 13.
    Primeiro exemplo package jfx1; importjavafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.text.*; /* Main.fx */ Stage { title: "Título da Aplicação (janela)" width: 250 height: 80 scene: Scene { content: Text { font : Font { size : 16 } x: 10, y: 30 content: "Meu primeiro teste" } } }
  • 14.
    Como obtê-lo? • Repositóriodos exemplos http://exemplos.googlecode.com/svn/trunk/javafx • Comando para obter localmente? (cria diretório jfx1 a partir do repositório) svn export <url-acima>/jfx1 jfx1
  • 15.
    Como compilar e executar? • Vá jfx1 o diretório criado cd para • Compilação javafxc -d ~/tmp src/jfx1/Main.fx • Execução-cp javafx ~/tmp jfx1.Main
  • 16.
    Se o resultadofor... • Especifique o encoding pertinente ao arquivo fonte (no momento da compilação) javafxc -d ~/tmp -encoding ISO-8859-1 src/jfx1/Main.fx • Ao executar o~/tmp jfx1.Main javafx -cp resultado da compilação anterior • O resultado...
  • 17.
    Primeiro a linguagem, depois os recursos da API
  • 18.
    Variáveis e tipos (explícitos) var boolean: Boolean = true; var byte: Byte = 2; var short: Short = 3; var int:Integer = 4; var long: Long = 5; var float: Float = 1.2; var double: Double = 2.0;
  • 19.
    Tipos (implícitos) // varboolean : Boolean = true; // é o mesmo que... var boolean = true; // var int : Integer = 4; // é o mesmo que ... var int = 4;
  • 20.
    Todos os tipos Boolean Integer Number String Duration Number é sinônimo de Float Character Byte Float é equivalente a Number Short Long Float é sinônimo de Number Float Double Number é equivalente a Float
  • 21.
    Exemplo Boolean // Pacote: javafx.lang // Classe FX (vários métodos static) var logica : Boolean = false; FX.println(“Valor: {not logica}”); // OU println(“Valor: {not logica}”); Notou que não houve concatenação explícita?
  • 22.
    Constantes var (variável) def (constante) // Variável var logica : Boolean = false; // CONSTANTE def pi = 3.1415926536; println(“Valor: {pi}”);
  • 23.
    Área de umcírculo var (variável) def (constante) // Arquivo: x.fx // Área pi * raio * raio def pi = 3.1415926536; def raio = 2; // Dois metros println(“Área: {pi*raio*raio}m2”); Este código é compilável e executável! $ javafxc x.fx $ javafx x
  • 24.
    Volume de umcilindro // Área pi * raio * raio def pi = 3.1415926536; def raio = 2; // Dois metros var area = pi * raio * raio; var altura = 1; // 1 metro var volume = area * altura * 1000; def (constante) var (variável) println(“Volume: {volume} litros”); Este código é compilável e executável! $ javafxc x.fx $ javafx x
  • 25.
    String (“ ou‘) def name : String = “Nome”; “string” ou ‘s tring’ var nAme = ‘Nome’; var iguais = ‘{name == nAme}’; // Imprime // Iguais?: true print(“Iguais?: {iguais}”); Este código é compilável e executável! $ javafxc x.fx $ javafx x
  • 26.
    String (múltiplas linhas) “s t var name = “Pedro ” r i ng ‘Álvares’ ”o u ‘s “string” ou ‘s tring’ “ Cabral”; tri ng ’ // Imprime // Pedro Álvares Cabral print(name); Este código é compilável e executável! $ javafxc x.fx $ javafx x
  • 27.
    Duration Detalhesem javafx.lang.Duration var horas = 0h; var minutos = 1m; var segundos = 1s; var milissegundos = 1ms; var parcial = horas + milissegundos; print(parcial + minutos + segundos); Este código é compilável e executável!
  • 28.
    Sequência é umacoleção de objetos ordenados • É declarada com colchetes ([ e ]) • Uma sequência é linear, não existem sequências multidimensionais • Sequências são iguais se possuírem o mesmo tamanho e os mesmos valores nas mesmas ordens • Notação: tipo seguido de [] (por exemplo, Integer[]) • sizeof recupera o tamanho da sequência
  • 29.
    Sequências Sequence é umalista ordenada de elementos de um mesmo tipo var lista = [-1, 0, 1]; def ordenada = [ false, true, true ]; var mesmoTipo = [ ‘A’, “ Janela” ]; println(lista); println(ordenada); println(mesmoTipo); Nenhuma surpresa:
  • 30.
    Sequências Sequence é umalista ordenada de elementos de um mesmo tipo var ints : Integer[] = [1, 2,3]; def bs : Boolean[]=[false]; def vazia=[]; println(ints);println(bs);println(vazia); Nada espetacular...
  • 31.
    Sequências Sequence é umalista ordenada de elementos de um mesmo tipo // Vírgula como separador var strs = [ “ok”, ‘correto’ ]; println(strs); Aplicação de 3 linhas:
  • 32.
    Nem sempre... sequências sãoexplicitamente criadas por meio de seus elementos separados por vírgulas, nestes casos, ...
  • 33.
    Faixas (sequências numéricas) Step padrão é 1 ou 1.0 dependendo do tipo do elemento var ints = [1..5]; // step é 1 println(ints); var ns = [ 1.0..1.3 step 0.1]; println(ns); Arquivo n.fx é compilado n (do nome do arquivo) é executada
  • 34.
    Faixas (sequências numéricas) Step padrão é 1 ou 1.0 dependendo do tipo do elemento println([1..<5]); // 1 a 4 println([4..1 step -1]); // 4 a 1 println([10..1]); // [ ] println(sizeof [1..67]); // 67
  • 35.
    Sequências não podemconter sequências Uma sequência contém apenas objetos Uma sequência não é um objeto! var inicio = 1; var fim = 9; var p = 2; var impares = [inicio..fim step p]; var pares = [(inicio+1)..(fim+1) step p]; var todos = [ impares, pares ]; println(todos); Elementos são concatenados:
  • 36.
    Sequências não podemconter sequências Uma sequência contém apenas objetos Uma sequência não é um objeto! import javafx.util.Sequences; var impares = [1..9 step 2]; var pares = [2..10 step 2]; println(Sequences.sort([impares,pares])); Elementos são concatenados e ordenados:
  • 37.
    Convertendo para String Sequence é uma lista ordenada de elementos de um mesmo tipo var bytes : Byte[] = [2..1 step -1]; println(bytes); println(“{bytes}”); println(“{[5..0 step -1]}”); Saídas produzidas
  • 38.
    O que vocêjá sabe? Sequence é uma lista ordenada de elementos de um mesmo tipo javafxc compila arquivo .fx javafx executa A linha abaixo é compilável e executável! println(new java.util.Date());
  • 39.
    Leia mentalmente... • Obtero tamanho de uma sequence • Recuperar um único elemento • Recuperar uma faixa de elementos consecutivos • Recuperar subconjunto de elementos não consecutivos que satisfazem critérios de busca • Inverter a ordem • Inserir/remover um elemento
  • 40.
    Tamanho (sizeof) sizeof também pode ser empregado para tipos primitivos (retorna 1) var ints = [ 2..10000 ]; println(sizeof ints); // 9999 sizeof usado também com referência (retorna 1 se não for null ou 0 para null) var integer : Integer; var ref : javafx.scene.shape.Rectangle; println(sizeof integer); // 1 println(sizeof ref); // 0
  • 41.
    Acesso a elemento nomede sequence ou expressão que resulta em sequence seguido de [indice] var ints = [ 2..10000 ]; ints[3] = 2; println(ints[-14]); // Imprime 0 println([1, 3][1]); // Imprime 3 println(ints[4]); // Imprime 6 // Imprime true println(ints[2*10000] == ints[-1]); [indice]
  • 42.
    Acesso a segmento nomede sequence ou expressão que resulta em sequence seguido de: print([1..5][0..]); // todos print([1..5][0..<1]); // [ 1 ] print([1..5][0..0]); // [ 1 ] print([1..5][2..<]); // [ 3, 4 ] print([1..5][3..4]); // [ 4, 5 ] [índice]
  • 43.
    Segmento por predicado Elementos não necessariamente consecutivos são selecionados, basta satisfazer condição var ns = [1..5]; print(ns[x | x < 6]); // todos print(ns[y | y == 4]); // [ 4 ] print(ns[z | z*z == 4]); // [ 2 ] print(ns[varX | true]); // todos // Imprime [ 1, 3, 5 ] (índices pares) print(ns[k | indexof k mod 2 == 0]); print(ns[par | par mod 2 == 0]); // Pares [valores da sequência]
  • 44.
    Invertendo ordem Não modifica a sequência original, produz outra que contém os mesmos elementos, mas na ordem inversa var ns = [1..5]; var sn = [5..1 step -1]; print(reverse ns); // [ 5, 4, ... print(reverse ns == sn); // true reverse ns Uma outra sequência é criada
  • 45.
    Inserindo elemento Modificaa sequência original insert into insert before insert after
  • 46.
    insert into Modifica a sequência original Insere um valor no final de uma sequência var ns = [1..3]; insert 10 into ns; print(ns); // [ 1, 2, 3, 10 ] insert x into sequencia; Valor x é inserido no final de sequencia
  • 47.
    insert before Modifica a sequência original Insere valor em sequência antes do índice fornecido var ns = [1..3]; // [ 1, 2, 3 ] insert -1 before ns [2]; print(ns); // [ 1, 2, -1, 3 ] insert -1 before ns[0]; print(ns); // [ -1, 1, 2, -1, 3 ] insert x before sequencia [indice]; Valor x é inserido em sequencia antes de indice
  • 48.
    insert after Modifica a sequência original Insere valor em sequência após o índice fornecido var ns = [1..3]; insert -1 after ns [2]; print(ns); // [ 1, 2, 3, -1 ] insert -1 after ns[-1]; print(ns); // [ -1, 1, 2, 3, -1 ] insert x after sequencia [indice]; Valor x é inserido em sequencia após indice
  • 49.
    Inserir sequência emsequência Modifica a sequência original insert into, insert before e insert after var pares1 = [1..5][x | x mod 2 == 0]; var pares2 = pares1; var pares3 = pares1; var impares = [1..3][x | x mod 2 != 0]; // [ 2, 4, 1, 3 ] insert impares into pares1; // [ 1, 3, 2, 4 ] insert impares before pares2 [0]; // [ 2, 1, 3, 4 ] insert impares after pares3 [0];
  • 50.
    Removendo elementos Modifica a sequência original delete valor from sequência delete sequência [índice] var ints = [1..10]; delete 1 from ints; // [ 2,3,4,5,6,7,8,9,10 ] delete 3 from ints; // [ 2,4,5,6,7,8,9,10 ] delete ints [2]; // [ 2,4,6,7,8,9,10 ] delete ints [3]; // [ 2,4,6,8,9,10 ] delete ints [4..4]; // [ 2,4,6,8,10 ] delete ints [5]; // [ 2,4,6,8,10 ] println(ints); delete x from sequencia delete sequencia [índice]
  • 51.
    Sequence comprehension Criando sequências com uso do for var ints = for (x in [1..2]) x*x; println(ints); // [ 1, 4 ] var ns = for (x in [1..2] where x > 1) x; println(ns); // [ 2 ] def AA = [ 1, 2 ]; def BB = [ 3, 4 ]; var matriz = for (a in AA, b in BB) a*10 + b; println(matriz); // [ 13, 14, 23, 24 ]
  • 52.
    Última sentença dofor (define o valor) Criando sequências com uso do for var ints = for (x in [1..2]) { println(x); x*x; }; println(ints); Resultado:
  • 53.
    Funções úteis javafx.util.Sequences binarySearch indexByIdentity indexOf isEqualByContentIdentity max min nextIndexByIdentity nextIndexf reverse shuffle sort
  • 54.
    Ordenando javafx.util.Sequences.sort(seq) import javafx.util.Sequences; var strs = [ “teste”, “cadeira”, “casa” ]; var ord = Sequences.sort(strs); println(ord); [ “cadeira”, “casa”, “teste” ] var ints = [10..1 step -1]; def intsOrdered = Sequences.sort(ints); println(intsOrdered); [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
  • 55.
    Expressões Trecho de código em JavaFX Script que o compilador é capaz de compreender println([1..10]); { println([1..10]); } Expressões equivalentes do tipo void
  • 56.
    Expressões Trecho de código em JavaFX Script que o compilador é capaz de compreender 10; { 10; } Expressões equivalentes do tipo Integer
  • 57.
    Atribuições Trecho de código em JavaFX Script que o compilador é capaz de compreender var x = 10; var y = { 10; } var z = { def a = 5; def b = 2; a * b; } Atribuições envolvendo expressões equivalentes do tipo Integer
  • 58.
    Atribuições Trecho de código em JavaFX Script que o compilador é capaz de compreender var x = 10; var y = { println(x); x + 10; // ; é opcional aqui } println(y); Atribuições envolvendo expressões do tipo Integer
  • 59.
    While Executar bloco de código enquanto condição for verdadeira var x = 1; while (x < 10) { print(“ {x}”); x++; } Resultado: 123456789
  • 60.
    For Executar bloco de código enquanto condição for verdadeira var y = for (x in [1..10]) { print(“ {x}”); “a{x*x}” } println(“ “); println(y); Resultado: 1 2 3 4 5 6 7 8 9 10 [ a1, a4, a9, a16, a25, a36, a49, a64, a91, a100 ]
  • 61.
    if Executar bloco de código conforme avaliação de condição var x = 1; println(“{if (x>0) then x+3 else x-10}”); Resultado: 4
  • 62.
    if Executar bloco de código dependendo de avaliação de condição var x = 1; var y = if (x < 0) then “a” else “b”; println(“Resultado: {y}”); O que é produzido? Resultado: b
  • 63.
    O que aindafalta? • object literal • binding • gráficos • API Não perca...