sexta-feira, 2 de outubro de 2009

Java vs Javascript



JAVA

Em 1991, na Sun Microsystems, foi iniciado o Green Project, o berço do Java, uma linguagem de programação orientada a objetos. Os mentores do projeto eram Patrick Naughton, Mike Sheridan, e James Gosling. O objetivo do projeto não era a criação de uma nova linguagem de programação, mas antecipar e planejar a “próxima onda” do mundo digital. Eles acreditavam que, em algum tempo, haveria uma convergência dos computadores com os equipamentos e eletrodomésticos comumente usados pelas pessoas no seu dia-a-dia.A linguagem primeiramente se chamou "Oak", porem em uma reuniao em uma cafeteria James Gosling resolveu chamar a linguagem de Java, onde em 1995 foi lançada oficialmente!

Desde seu lançamento, em maio de 1995, a plataforma Java foi adotada mais rapidamente do que qualquer outra linguagem de programação na história da computação. Em 2004 Java atingiu a marca de 3 milhões de desenvolvedores em todo mundo[1]. Java continuou crescendo e hoje é uma referência no mercado de desenvolvimento de software. Java tornou-se popular pelo seu uso na Internet e hoje possui seu ambiente de execução presente em web browsers, mainframes, SOs, celulares, palmtops, cartões inteligentes etc.

Programas Java não são traduzidos para a linguagem de máquina, como outras linguagens estaticamente compiladas e sim para uma representação intermediária, chamada de bytecodes.

Principais Caracteristicas:



  • Orientação a objeto - Baseado no modelo de Simula67

  • Portabilidade - Independência de plataforma - "write once, run anywhere"

  • Segurança - Pode executar programas via rede com restrições de execução-Security Manager

  • Sintaxe similar a Linguagem C/C++ e principalmente, a C#

  • Desalocação de memória automática por processo de coletor de lixo (garbage collector-GC)

  • Compilador JIT(Just in Time) que aumenta a performance de execução dos bytecodes da JVM




JAVASCRIPT

JavaScript é uma linguagem de programação criada pela Netscape em 1995, que a princípio se chamava LiveScript, a Netscape após o sucesso inicial desta linguagem, recebe uma colaboração considerável da Sun, após esta colaboração, podemos dizer que o JavaScript é uma linguagem compatível com a linguagem Java, por esta razão, a semelhança dos nomes "JavaScript".

A linguagem foi criada para atender, principalmente, as seguintes necessidades:




  • Validação de formulários no lado cliente (programa navegador)

  • Interação com a página



Assim, foi feita como uma linguagem de script. Javascript tem sintaxe semelhante à do Java, mas é totalmente diferente no conceito e no uso.

De acordo com seu sistema de tipos JavaScript é:




  • fraca - sua tipagem é mutável

  • dinâmica - uma variável pode assumir vários tipos diferentes durante a execução

  • implícita - as variáveis são declaradas sem tipo



1. É interpretada, ao invés de compilada;
2. Possui ótimas ferramentas padrão para listagens (como as linguagens de script, de modo geral);
3. Oferece bom suporte a expressões regulares (característica também comum a linguagens de script).

Sua união com o CSS é conhecida como DHTML. Usando o Javascript, é possível modificar dinamicamente os estilos dos elementos da página em HTML.

Nos dias de hoje o Javascript voltou a ganhar espaço devido ao AJAX (acrônimo em língua inglesa de Asynchronous Javascript And XML),que é o uso metodológico de tecnologias como Javascript e XML, providas por navegadores, para tornar páginas Web mais interativas com o usuário, utilizando-se de solicitações assíncronas de informações. AJAX não é somente um novo modelo, é também uma iniciativa na construção de aplicações Web mais dinâmicas e criativas. AJAX não é uma tecnologia — são realmente várias tecnologias conhecidas trabalhando juntas, cada uma fazendo sua parte, oferecendo novas funcionalidades. AJAX incorpora em seu modelo:




  • Apresentação baseada em padrões, usando XHTML e CSS

  • Exposição e interação dinâmica usando o DOM

  • Intercâmbio e manipulação de dados usando XML e XSLT

  • Recuperação assíncrona de dados usando o objeto XMLHttpRequest

  • JavaScript unindo todas elas em conjunto.





Portanto notamos que apesar do nome, as 2 linguagens sao muitíssimo diferentes em quase todos os aspectos, tendo cada uma sua área de dominio e aplicação.


O ELO PERDIDO


O Java 6 fornece suporte integrado da especificação JSR-223. Esta especificação oferece uma maneira conveniente e padrão de execução de linguagens de scripting na JVM e fornece acesso a recursos e classes Java a partir de scripts. Java 6 vem com um built-in de integração com o Mozilla Rhino, motor de JavaScript usado pelo Mozilla.

As especificações JSR 223 são convenientes e fáceis de usar. Para trabalhar com scripts, você só precisa saber um par de classes fundamentais. A principal delas é a classe ScriptEngine, que lida com roteiro de interpretação e avaliação. Para instanciar um motor de script, você usa a classe ScriptEngineManager para recuperar um objeto ScriptEngine para a linguagem de script que você está interessado ,e cada linguagem de script tem um nome. A Mozilla Rhino ECMAScript linguagem de scripting (vulgarmente conhecida como JavaScript) é identificada por "js".



//...codigo anterior omitido
ScriptEngineManager manager= new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");



JavaScript incorporado pode ser usado para uma variedade de finalidades. Uma vez que é mais flexível e mais fácil de configurar do que Java Hard-Code, que muitas vezes pode ser usado para codificar as regras de negócios que poderá mudar com freqüência. Scripting expressões são avaliadas usando o método eval(). Quaisquer variáveis utilizadas no ambiente de script pode ser atribuída a partir do seu código Java usando o put () method.




ScriptEngineManager manager= new ScriptEngineManager();
ScriptEngine engine= manager.getEngineByName("js");
engine.put("age", 21);
engine.eval("if (age >= 18){ " +
" print('Old enough to vote!'); " +
"} else {" +
" print ('Back to school!');" +
"}");
//Result on console

> Old enough to vote!




A partir do exemplo ScriptEngineManager, nós pedimos uma instancia de um motor de JavaScript usando o método getEngineByName. Sobre o mecanismo de script, o método eval é chamado a executar uma determinada string como código JavaScript! Para resumir, a manipulação de exceções não é mostrada nos exemplos. Existem Exceções Checadas(checked) e de Tempo de Execução(Runtime) API javax.script. Desnecessário dizer, você tem que lidar com as exceções de forma adequada.


//Hello World Javascript on the JVM!
import javax.script.*;
public class EvalScript {
public static void main(String[] args) throws Exception {
// cria um gerente para o motor de scripts
ScriptEngineManager factory = new ScriptEngineManager();
// cria o motor JavaScript como mostrado nos exemplos anteriores
ScriptEngine engine = factory.getEngineByName("js");
// interpreta o codigo Javascript
engine.eval("print('Hello World, Javascript on the JVM')");
}
}




Com arquivos o codigo é um pouco diferente, e neste exemplo, podemos chamar o método eval() que aceita um java.io.Reader como entrada. O leitor lê o script a ser executado diretamente do fluxo . Desta forma é possível executar scripts a partir de arquivos, URLs e os recursos envolvendo os objetos relevantes fluxo de entrada como Readers.


import javax.script.*;
public class EvalFile {
public static void main(String[] args) throws Exception {
// creia gerente para o motor de script
ScriptEngineManager factory = new ScriptEngineManager();
// cria motor JavaScript engine
ScriptEngine engine = factory.getEngineByName("js");
//interpreta o script Javascript vindo do arquivo, com nome dado no primeiro parametro
engine.eval(new java.io.FileReader(args[0]));
}
}



Vamos dizer que exista um arquivo chamado "test.js" no diretorio onde executamos a aplicação com o seguinte codigo:



println("Hello World lido do arquivo de nome test.js")


Rode o codigo da seguinte maneira:


java EvalFile test.js



REFERENCIAS E LINKS


Artigo em OnJava sobre RHINO no Java 6
Guia Oficial da Sun sobre JSR-223
Wikipedia Javascript
Wikipedia AJAX
Excelente artigo da Sun sobre como usar Javascript na JVM com otimos exemplos e conteudo

Espero ter ajudado com este post!
Obrigado pelo seu tempo!
Participem do OSUM!

Aprendendo Clojure, Part-I Paradigma Funcional!



Programação funcional é um desses termos infelizes na programação de abuso e envolta em confusão, mas que realmente não deve ser assim tão misterioso. Melhor entendida como uma alternativa ao paradigma de programação imperativa, programação funcional é caracterizada por:


  • Funções sem efeitos colaterais

O termo "funcional" vem da matemática, onde uma função só retorna um valor , baseado em zero ou mais valores de entrada e não produz efeitos colaterais, nem muda o seu comportamento com base em quaisquer outros valores que não os passados para ela. Uma função "pura" retorna a mesma coisa toda vez que é chamada com o mesmo conjunto de valores.

Esta não é a forma de trabalho funciona em imperativo (sem programação) funcional. No código imperativo, muitas vezes funções:

1. produzem efeitos colaterais (como escrever para um arquivo ou algum dispositivo de I / O)
2. transformam suas entradas e variáveis globais
3. modificação seu comportamento baseado em estado fora da função

Funções puras têm duas grandes vantagens:

1. Funções que evitam mutação de dados locais e evitam a leitura ou a mutação de dados globais são mais fáceis de entender e mais favorável às provas de regularidade ou simplesmente, testes!.
2. Funções que evitam a leitura e a escrita de estado compartilhado podem ser executados simultaneamente sem as preocupações habituais de simultaneidade(concorrencia).

Agora, a objeção óbvia a escrever todas as nossas funções para executar sem efeitos colaterais é que precisamos de efeitos colaterais para os nossos programas para finalmente fazer alguma coisa útil. Como diz o ditado, um programa sem efeitos colaterais não faz nada mais do que deixar o seu CPU quente. O ideal na programação funcional, então, é simplesmente isolar as mudanças de estado, e não eliminá-los totalmente. Em uma linguagens puramente funcionais, como Haskell, pureza funcional é forçado pelo compilador de tal forma que todos os possíveis efeitos colaterais devem ser expressamente circunscritos no código. Uma língua impuramente funcional, como Clojure, não faz essa exigencia: Clojure ajuda a estruturar o seu código de forma funcional, mas delega a você para a responsabilidade de manter os efeitos colaterais de seu código puramente funcional.

  • Os dados imutáveis

Se as funções evitamr a mutação do estado, e se estiverem a fim de evitar confiar em estado de mutação, faz sentido então de simplesmente fazer o máximo de dados possível imutável: se os dados não podem mudar, não há perigo de que talvez tenha mudado. Em Clojure, os tipos de coleção padrão são imutáveis e, de fato, mesmo as variáveis locais são imutáveis: uma vez definido, o valor vinculado a um local não muda.

Você provavelmente está pensando que isso não soa pratico nem utilizavel, mas é surpreendente a quantidade de trabalho pode ser feito sem dados mutáveis. É verdade que os programas do mundo real não pode ter dados totalmente imutáveis, mas muito mais dados podem ser imutáveis do que é comumente aceito pelos programadores acostumados apenas a programação imperativa.

  • Funções de primeira classe

Na programação funcional, as funções são de "primeira classe", ou seja, as funções são, elas próprias valores que podem ser passados como argumentos ou armazenados em variáveis. Muitas linguagens dinâmicas - Javascript, Ruby, Python, etc - têm funções de primeira classe, mas essas linguagens não são geralmente consideradas funcionais.

  • A função de fluxo de controle baseado

Em uma linguagem imperativa, o fluxo de controle é feito através de construções especiais, por exemplo, if-else, ou for/while. Em linguagens funcionais, mecanismos de controle de fluxo são ou funções ou, pelo menos,têm função semelhante na medida em que retornam valores. Por exemplo, se em Clojure você executar um dos dois ramos e retornar o valor para a função que chamou esta função. Essas construções permitem expressões que de outra forma exigirião mutação de variáveis.

Marcadores: