Pular para o conteúdo principal

JavaFx: Flexibilidade na manipulação de String

Quando começamos a estudar uma nova linguagem é comum brincarmos com a impressão de textos, o clássico Hello World. O objetivo desse post é explorar características do tipo String no JavaFx a partir da definição de literais, concatenação de strings, o uso de expressões para atribuição de valores até o mecanismo nativo de internacionalização. No fim do post o leitor pode ter uma ideia de como o JavaFx torna flexível o uso java.lang.String.

JavaFx a Linguagem
Linguagem que compõe a Plataforma JavaFx mantida pela Oracle para a construção de aplicativos RIA para Desktop, Mobile e TV. É uma linguagem de Script, compilada, que roda sob a JVM, mais nova e com uma cara bem diferente do Java com a proposta de tornar o desenvolvimento RIA mais interessante.


O conteúdo de uma string pode ser definido com aspas duplas - da mesma forma que o Java - ou usando aspas simples:
println('Aspas simples');
println("Aspas duplas");
Outra característica similar ao Java, é a possibilidade de utilizar caracteres de escape, a seguir um exemplo do \t fazendo a tabulação no conteúdo:
println("Usando caracteres de escape: \ttab");
Aspas simples podem ser usadas com aspas duplas ou vice-versa, sem a necessidade do \' veja:
println("Tudo 'junto' e misturado!");  //imprime: Tudo 'junto' e misturado!
Um exemplo de string definido a partir de caracteres unicode:
// imprime:  こんにちは、世界!
println("\u3053\u3093\u306b\u3061\u306f\u3001\u4e16\u754c\uff01");

Value Type
O tipo String é considerado Value Type, ou seja o conteúdo é imutável (qualquer manipulação gera um novo objeto) e o valor default de uma variável desse tipo é diferente de null.

No próximo trecho um exemplo de uma variável sem inicialização, com valor default:
var s: String;
println(s.equals(""));  // imprime: true

String-expression
Uma alternativa mais inteligente e leve para concatenar strings através de { }. Com essa funcionalidade o código p/ mapeamento de queries (JDBC/JPA) no Java seria bem mais elegante!

Veja exemplos:
def nome = "Claudia";
println('Bem-vindo(a) {nome}'); //imprime: Bem-vindo(a) Claudia 

// repare que na quebra de linha ñ foi necessario o uso de +
def sql = "select * from clientes c "
          "where c.nm like '{nome}'%";

A concatenação é definida em tempo de compilação. Outro detalhe sobre expression é a opção de vincular uma condição ao conteúdo da string, a semântica parecida com o operador ternário do Java.
println("Bem-vindo(a) { if (not nome.equals('')) nome else 'Desconhecido' }!");

Simplicidade em aplicar formatação é mais uma caracterísitica de string-expression, veja exemplo de com data e um número:
println("Hoje: {%tA java.util.Date{}}"); // tA formata o nome do dia

var valor = 285.3668;
println("Total a debitar: {%.2f valor}"); // imprime: Total a debitar: 285,37

i18n / String localization
O JavaFx adota um mecanismo nativo para interpretar strings através de chaves e valores mapeados em arquivo properties, de uma forma bem simples sempre que double hash ## for usado o fx processa o conteúdo como um chave.

A seguir um exemplo de como acessar a chave 'Mensagem Inicial' dentro de um script JavaFx, assumindo que o arquivo Teste.fx, essa chave deveria ser mapeada no arquivo Teste_pt_BR.fxproperties no mesmo diretório (pacote) do script fx. O sufixo pt_BR indica o locale da máquina, isso pode ser configurado via código, assumindo a escolha do usuário por exemplo.
//codigo JavaFx - Teste.fx
println(##"Mensagem Inicial");  // imprime: Bem-vindo(a)
A seguir o conteúdo no arquivo properties, repare que ambas chave e valor  são definidas entre "":
"Mensagem Inicial"="Bem-vindo(a)"
Caso o chave não exista, o JavaFx imprime o valor 'Mensagem Inicial'. Uma opção seria definir a chave c/ [] informando o valor default, usado caso a chave não seja encontrada.
Veja o exemplo:
println(##[Outra Mensagem]"Mensagem com valor default");


Acesse o site principal da platataforma e veja mais sobre o JavaFx: http://javafx.com

Na Globalcode temos um mini-curso e Hands-on de JavaFx.


[]s
Eder Magalhães
www.yaw.com.br
twitter.com/youandwe
twitter.com/edermag

Comentários

Marcelo Cuin disse…
Olá, gostaria de divulgar nosso blog sobre JavaFX. www.javafx.com.br
Abraços...

Postagens mais visitadas deste blog

10 reasons why we love JSF

1. One-slide technology: it's so simple that I can explain basic JSF with one slide. 2. Easy to extend: components, listeners, render kit, Events, Controller, etc. 3. Real-world adoption: JBoss, Exadel, Oracle, IBM, ... 4. Architecture model: you can choose between more than 100 different architecture. 5. Open-mind community: using JSF you are going to meet very interesting people. 6. We are using JSF the last 5 years and we found very good market for JSF in Brazil 7. Progress: look to JSf 1.1 to JSF 1.2, JSF 1.2 to JSF 2.0. People are working really hard! 8. Many professionals now available 9. It's a standard. It's JCP. Before complain, report and help! 10. Ed Burns, spec leader, is an old Globalcode community friend! EXTRA: My wife is specialist in JSF. She's my F1 for JSF :) Nice job JSF community! -Vinicius Senger

O que é Lógica de programação?

Este é o segundo de uma série de posts voltados aos leitores do blog que estão dando início à carreira de desenvolvimento de software. O assunto de hoje é a lógica de programação. Para ler antes: Entendendo como funciona a programação de computadores: linguagens de programação, lógica, banco de dados A lógica de programação é um pré-requisito para quem quer se tornar um desenvolvedor de software, independente da linguagem de programação que se pretende utilizar. Mas o que é de fato a Lógica de Programação e como saber se eu tenho esse pré-requisito? A lógica de programação nada mais é do que a organização coerente das instruções do programa para que seu objetivo seja alcançado. Para criar essa organização, instruções simples do programa, como mudar o valor de uma variável ou desenhar uma imagem na tela do computador, são interconectadas a estruturas lógicas que guiam o fluxo da execução do programa. Isso é muito próximo ao que usamos em nosso cotidiano para realizar atividad...

Facelets uma forma mais ágil para construção de telas – Parte I

A construção de telas ou camada de apresentação em um sistema MVC seja web ou desktop é uma tarefa complexa e de extrema importância. Nesse post vou comentar e mostrar algum exemplo do Facelets como solução para os desafios existentes nessa etapa especificamente para web. Com a web cada vez mais presente em nosso dia-a-dia, um fato é que com isso nossos usuários tornam-se mais exigentes em relação a usabilidade, agilidade, performance ou de uma forma bem resumida “o usuário espera uma navegação simples e agradável aonde uma determinado tarefa possa ser concluída em poucos passos e em um curto espaço de tempo”. Atender as expectativas em relação ao que o usuário espera com o que realmente ele precisa, definir uma estrutura flexível a mudanças sem engessar o desenvolvimento, acessibilidade, portabilidade em múltiplos navegadores, tudo isso e muito mais, num prazo que quase sempre é apertado. Um outro ponto fundamental é manter o time motivado e produtivo em um ambiente que favoreça a...

JavaMail: Enviando mensagem HTML com anexos

Introdução Depois do post "JavaMail: Enviando e-mail com Java" , que apresentava como enviar um e-mail com Java, resolvi complementar a assunto apresentando como enviar uma mensagem formatada, em HTML , e também como realizar o envio de anexos. Bibliotecas Além da biblioteca JavaMail, veja mais no post anterior , é necessário incluir o JavaBeans Activation Framework (JAF), apenas se a versão utilizada for anterior ao JSE 6.0 , que já tem o JAF incluso. O JAF está disponível em http://www.oracle.com/technetwork/java/javase/downloads/index-135046.html , e neste download encontramos, alguns exemplos na pasta demo , documentação, incluindo javadocs, na pasta docs e a biblioteca activation.jar , que deve ser acrescentada no classpath da aplicação para versões anteriores ao JSE 6.0. Exemplo Primeiramente devemos realizar a configuração da javax.mail.Session e da javax.mail.internet.MimeMessage , estes passos podem ser vistos no post anterior . Agora vamos montar um...

Sistema interativo de TV Digital com Ginga-J

No início de 2009, os estudantes de Sistema de Informação do Centro Universitário de Votuporanga ( UNIFEV ), Caio César Pereira de Souza e Rodrigo Gonçalves Constantino me apresentaram uma proposta para que eu fosse co-orientador junto ao professor orientador Djalma Domingos da Silva , em seu Trabalho de conclusão de curso (TCC) com tema TV Digital. A base que motivou o assunto, foi a palestra apresentada por Maurício Leal na I Conferência Java Noroeste sobre o tema TV Digital, realizada em 2006 em Votuporanga-SP. Ficamos muito entusiasmados com a possibilidade de interatividade na TV Digital, e a grande quantidade de possibilidades de desenvolvimento de aplicativos nesta área. Acompanhamos de perto as notícias na imprensa e todo o esforço e iniciativas realizadas pelo Fórum do Sistema Brasileiro de TV Digital Terrestre (SBTVD) , que organizou e produziu especificações ABNT, normatizando o sistema de TV Digital Terrestre. O foco do TCC foi realizar o desenvolvimento de uma pequena ...

Alguma certificação Java nos seus planos em 2010 ?

A discussão sobre certificações é super polêmica, alguns acham muito importante, outros acham totalmente insignificante. Eu particularmente acho que é uma meta de aprendizado, que nos força a aprender bem detalhadamente uma tecnologia. É claro que é "burlável" quero dizer, todo mundo conhece alguém que é certificado e "não sabe nada". Mas, evidentemente quando você se prepara, estuda, vai aprender muitas coisas novas e solidificar ainda mais seu conhecimento. Eu sempre fui muito "orientada" por deadlines... estas metas nos obrigam a encaixar algumas horas de estudo nesta vida tão corrida. E o inicio do ano é muito bom para estas iniciativas, porque estamos um pouco mais descansados, com aquele espírito de inicio de ano. Imagine chegar em março e já ter cumprido uma das metas de final de ano, e estar com a certificação "tirada" ? Não acho que precisa ser um caçador de certificações, e tentar tirar todas as certificações possíveis, mas acho ...