1. JavaFX Script
Classes, binding e outros elementos
Fábio Nogueira de Lucena
Instituto de Informática (UFG)
Graduação em Engenharia de Software
http://engenhariadesoftware.inf.br
6. Binding
ã é
Binding expressions são automaticamente
reavaliadas quando suas dependências mudam
7. Binding
ã é
Binding expressions são automaticamente
reavaliadas quando suas dependências mudam
8. Binding
Binding expressions são automaticamente
reavaliadas quando suas dependências mudam
9. Binding
Á í
Á í
Lembre-se: binding expressions são
reavaliadas quando suas dependências mudam
10. O que está acontecendo?
O runtime de JavaFX “sabe” que o valor de
a deve ser atualizado sempre que o valor
da expressão pi * raio * raio for alterado, ou seja,
sempre que pi ou o valor de raio for alterado. Quando
isto ocorre, o runtime reavalia a expressão e o
resultado é depositado na variável a!
11. Mais um exemplo...
var x = 1;
def dobro = bind 2 * x;
def msg = bind "O dobro de {x} é {dobro}";
println(msg);
x = 2;
println(msg);
Lembre-se: binding expressions são
reavaliadas quando suas dependências mudam
12. Binding (if)
Á í
Á í
O binding depende, neste exemplo, da condição, do
corpo do then e do else, ou seja, das variáveis r e pi
13. Binding (if)
á
Á í
Á í
O binding depende, neste exemplo, da condição, do
corpo do then e do else, ou seja, nas variáveis r e pi
14. Binding (for)
O binding depende apenas da variável fim
15. Binding (for)
var fim = 1;
var passo = 1;
var y = 3;
var seq = bind [1..fim step passo];
def s = bind for (x in seq where x<y) x;
println(s); // [ 1 ]
fim = 2;
println(s); // [ 1 2 ]
passo = 2;
println(s); // [ 1 ]
y = -1;
println(s); // [ ]
seq depende de fim e de passo
s depende de seq e y
16. Binding (block)
z depende de aux, que depende de x e y
OU SEJA, z depende de x e y
17. Binding (function)
Pode existir binding para uma função
A função pode ser non-bound ou bound
DEPENDÊNCIA
Binding para non-bound function: argumentos
Binding para bound function: bloco
18. Binding (non-bound function)
O binding de resultado depende de x e y
Quando x ou y mudar, fazAlgo é executada e o valor
obtido é depositado em resultado
19. Binding (bound function)
O binding de resultado depende de k*x+y
Quando x ou y ou k mudar, fazAlgo é executada e o
valor obtido depositado em resultado
20. Binding (object literal)
Variável com binding para object literal depende da união
das dependências de todas as expressões do lado direito
das variáveis de instância.
Não inclui dependências de variáveis de instâncias
para as quais há binding.
Quando ocorre mudança, cria-se uma
nova instância!
21. Binding (object literal)
O binding de a depende de varNome
Quando varNome mudar, uma nova instância é
criada e passa a ser referenciada por a
22. Binding (object literal)
O binding de a não depende de varNome
Quando varNome mudar, apenas o valor de
a.nome é alterado.
23. Binding bidirecional
Binding bidirecional acrescente
with inverse
ao final da expressão envolvendo o binding
24. Binding bidirecional
O binding de y depende de a e vice-versa
Quando a mudar y também muda
Quanto y mudar a também muda
25. Variável (function)
var operacao : function(:Byte, :Byte) : Byte;
var add = function(x:Byte, y:Byte) { x + y };
var sub = function(x:Byte, y:Byte) { x - y };
var pro = function(x:Byte, y:Byte) { x * y };
var div = function(x:Byte, y:Byte) { x / y };
var ops = [ add, sub, pro, div ];
for (op in ops) {
println(op(10,2));
}
Qual o resultado?
29. Considerações finais
Nem tudo de JavaFX foi abordado
Tratamento de exceções
Classes (herança múltipla, init, postinit, ...)
Organização do código em packages, classes,...
Modificadores de acesso: public-init, public-read, ...
Visão geral é suficiente para “aprofundar”