Um guia rápido para os idiomas da JVM

Um guia rápido para os idiomas da JVM

1. Introdução

Além do Java, outras linguagens podem ser executadas na Java Virtual Machine como Scala, Kotlin, Groovy, Clojure.

Nas seções a seguir, daremos uma olhada em alto nível nas linguagens JVM mais populares.

Claro, vamos começar com o precursor das linguagens JVM - Java.

2. Java

2.1. Visão geral

Java é uma linguagem de programação de propósito geral que abrange o Paradigma Orientado a Objetos.

A core feature of the language is the cross-platform portability, o que significa que os programas escritos em uma plataforma são executáveis ​​em qualquer combinação de software e hardware com suporte de tempo de execução adequado. Isso é obtido pela compilação do código no bytecode primeiro, em vez de diretamente no código de máquina específico da plataforma.

As instruções de bytecode Java são análogas ao código de máquina, mas são interpretadas por uma Java Virtual Machine (JVM) específica para o sistema operacional host e a combinação de hardware.

Embora originalmente uma linguagem orientada a objetos, Java começou a adotar conceitos de outros paradigmas de programação, como programação funcional.

Vamos dar uma olhada rápida em alguns dos principais recursos do Java:

  • Orientado a Objeto

  • Fortemente tipado estaticamente

  • Plataforma independente

  • Coleta de lixo

  • Multithread

2.2. Exemplos

Vamos ver como um simples “Hello, World!” exemplo se parece com:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

Neste exemplo, criamos uma classe chamadaHelloWorld e definimos o método principal que imprime uma mensagem no console.

A seguir,we’ll use the javac command to generate the bytecode que pode ser executado em uma JVM:

javac HelloWorld.java

Finalmente,the java command executes the generated bytecode on JVM:

java HelloWorld

Para mais exemplos de Java, verifique nossolist of tutorials.

3. Scala

3.1. Visão geral

Scala significa “linguagem escalável”. Scala’s a statically typed language which combines two important programming paradigms, namely object-oriented and functional programming. 

O idioma se originou em 2004, mas se tornou mais popular nos últimos anos.

Scala é uma linguagem orientada a objetos pura comoit doesn’t support primitives. O Scala fornece a capacidade de definir classes, objetos, métodos, juntamente com recursos de programação funcional, como características, tipos de dados algébricos ou classes de tipos.

Algumas características importantes do Scala são:

  • Funcional, Orientado a Objetos

  • Fortemente tipado estaticamente

  • Tipos de dados algébricos

  • Correspondência de padrões

  • Suporte aprimorado à imutabilidade

  • Computação Preguiçosa

  • Multithread

3.2. Exemplos

Primeiro, vamos dar uma olhada no mesmo “Olá, mundo!” exemplo como antes, desta vez em Scala:

object HelloWorld {
    def main(args: Array[String]): Unit = println("Hello, world!")
}

Neste exemplo, criamos um objeto singleton denominadoHelloWorlde o métodomain.

A seguir, para compilar isso, podemos usarscalac:

scalac HelloWorld.scala

O comandoscala executa o bytecode gerado na JVM:

scala HelloWorld

4. Kotlin

4.1. Visão geral

Kotlin is a statically typed, general-purpose, open-source language developed by JetBrains team, que reúne os paradigmas orientado a objetos e funcionais.

O foco principal durante o desenvolvimento do Kotlin foi a interoperabilidade Java, segurança (tratamento de exceções), concisão e melhor suporte a ferramentas.

Desde o lançamento do Android Studio 3.0, o Kotlin é uma linguagem de programação totalmente suportada pelo Google na plataforma Android. Ele também está incluído no pacote IDE do Android Studio como uma alternativa ao compilador Java padrão.

Alguns recursos importantes do Kotlin:

  • Orientado a objeto + funcional

  • Fortemente tipado estaticamente

  • Conciso

  • Interoperável com Java

Nossointroduction to Kotlin também contém mais detalhes sobre os recursos.

4.2. Exemplos

Vamos ver o “Hello, World!” exemplo em Kotlin:

fun main(args: Array) { println("Hello, World!") }

Podemos escrever o código acima em um novo arquivo chamadohelloWorld.kt.

Então,we’ll use the kotlinc command to compile thise gera bytecode que pode ser executado em uma JVM:

kotlinc helloWorld.kt -include-runtime -d helloWorld.jar

A opção-d é usada para indicar o arquivo de saída para arquivosclass ou um nome de arquivo.jar. The -include-runtime option makes the resulting .jar file self-contained and runnable by including the Kotlin runtime library in it.

Em seguida, o comandojava executa o bytecode gerado na JVM:

java -jar helloWorld.jar

Vejamos também outro exemplo de impressão de uma lista de itens usando um loopfor:

fun main(args: Array) {
    val items = listOf(1, 2, 3, 4)
    for (i in items) println(i)
}

5. Groovy

5.1. Visão geral

Groovyis an object-oriented, optionally typed, dynamic domain specific language (DSL), com suporte para tipagem estática e capacidades de compilação estática. Destina-se a melhorar a produtividade do desenvolvedor, com sintaxe fácil de aprender.

Groovy integrates easily with any Java programe adiciona imediatamente recursos poderosos, como recursos de script, tempo de execução e metaprogramação em tempo de compilação e recursos de programação funcional.

Vamos destacar alguns recursos importantes:

  • Orientado a objetos com recursos funcionais como funções de ordem superior, curry, fechamentos

  • Digitação - Dinâmica, Estática, Forte, Pato

  • Idioma específico do domínio

  • Interoperabilidade com Java

  • Produtividade por concisão

  • Sobrecarga do operador

5.2. Exemplos

Primeiro, vamos ver nosso “Hello, World!” exemplo em Groovy:

println("Hello world")

Escrevemos o código acima em um novo arquivo chamadoHelloWorld.groovy. Agorawe can run this code in two ways: by compiling then executing or by just running uncompiled code.

Podemos compilar um arquivo.groovy usando o comandogroovyc da seguinte maneira:

groovyc HelloWorld.groovy

Em seguida, usaremos o comandojava para executar o código groovy:

java -cp \embeddable\groovy-all-.jar;. HelloWorld

Por exemplo, o comando acima pode ter a seguinte aparência:

java -cp C:\utils\groovy-1.8.1\embeddable\groovy-all-1.8.1.jar;. HelloWorld

Vejamos também como podemos usar o comandogroovy para executar o arquivo.groovy sem compilar:

groovy HelloWorld.groovy

Finalmente, aqui está outro exemplo de impressão de uma lista de itens com o índice:

list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list.eachWithIndex { it, i -> println "$i: $it"}

Dê uma olhada em mais exemplos do Groovy em nossointroduction article.

6. Clojure

6.1. Visão geral

Clojureis a general-purpose functional programming language. O idioma é executado na JVM, bem como noCommon Language Runtime da Microsoft. O Clojure ainda é uma linguagem compilada, permanece dinâmico, pois seus recursos são suportados em tempo de execução.

Os designers do Clojure queriam criarLisp modernos que pudessem ser executados em JVM. É por isso que também é conhecido como um dialeto da linguagem de programação Lisp. Similar to Lisps, Clojure treats code as data and has a macro system as well.

Alguns recursos importantes do Clojure:

  • Funcional

  • Digitação - Dinâmica, Forte, recentemente começou a suportargradual typing

  • Projetado para simultaneidade

  • Polimorfismo de tempo de execução

6.2. Exemplos

Ao contrário de outras linguagens JVM, não é tão fácil criar um simples “Hello, World!” programa em Clojure.

Usaremos a ferramentaLeiningen para executar nosso exemplo.

Primeiro, vamos criar um projeto simples com modelo padrão usando o seguinte comando:

lein new hello-world

O projeto será criado com a seguinte estrutura de arquivos:

./project.clj
./src
./src/hello-world
./src/hello-world/core.clj

Agora precisamos atualizar o arquivo./project.ctj com o seguinte conteúdo para definir o arquivo de origem principal:

(defproject hello-world "0.1.0-SNAPSHOT"
  :main hello-world.core
  :dependencies [[org.clojure/clojure "1.5.1"]])

Agora estamos prontos para atualizar nosso código para imprimir “Hello, World!” no arquivo./src/hello-world/core.clj:

(ns hello-world.core)

(defn -main [& args]
    (println "Hello, World!"))

Por fim, usaremos o comandolein para executar o código acima, após mover para o diretório raiz do projeto:

cd hello-world
lein run

7. Outros idiomas da JVM

7.1. Jython

Jythonis the Java platform implementation of Python que é executado na JVM.

Esse idioma foi projetado inicialmente para permitir a gravação de aplicativos de alto desempenho sem sacrificar a interatividade. Jython is object-oriented, multi-threaded and uses Java’s garbage collector for efficiently cleaning up the memory.

O Jython inclui a maioria dos módulos que fazem parte da linguagem Python. Também pode importar e usar qualquer classe das bibliotecas Java.

Vamos ver um rápido “Olá, mundo!” exemplo:

print "Hello, world!"

7.2. JRuby

JRuby é uma implementação da linguagem de programaçãoRuby para execução na máquina virtual Java.

A linguagem JRuby é de alto desempenho e multiencadeada, com uma vasta variedade de bibliotecas disponíveis em Java e Ruby. Além disso, combina recursos de ambas as linguagens, como programação orientada a objetos e digitação de patos.

Vamos imprimir “Hello, World!” em JRuby:

require "java"

stringHello= "Hello World"
puts "#{stringHello.to_s}"

8. Conclusão

Neste artigo, estudamos muitas linguagens JVM populares junto com exemplos de código básico. Essas linguagens implementam vários paradigmas de programação, como orientação a objetos, digitação estática, estática e digitação dinâmica.

Até agora, mostra que, mesmo com a JVM desde 1995, ela ainda permanece como uma plataforma altamente relevante e atraente para as linguagens de programação modernas.