7 pontos por GN⁺ 2024-12-20 | 2 comentários | Compartilhar no WhatsApp
  • Java é conhecida por ser adequada para projetos grandes e de longo prazo, mas também pode ser uma ferramenta excelente para tarefas pequenas
  • Verificação estática de tipos e ótimo suporte de ferramentas também trazem grandes vantagens em tarefas pequenas
  • Melhorias recentes na linguagem tornaram o Java ainda mais útil

Executar sem compilar

  • Graças ao JEP 330 e ao JEP 458, é possível executar arquivos-fonte Java diretamente:
    java RandomFiles.java 10 /home/cay/data  
    
  • A cada execução, a compilação é feita automaticamente, o que é útil para desenvolvimento e testes
  • É possível converter para um executável nativo com Graal, mas na maioria dos casos a diferença de desempenho é mínima

Sintaxe concisa: método main de instância e classes implícitas

  • JEP 477: simplifica a escrita de programas pequenos e scripts
  • Remove a sintaxe incômoda de antes (public static void main):
var someVariable = initialValue;  
String helper(int param) { ... }  
void main(String[] args) {  
    ...  
}  
  • Importação automática do módulo java.base aumenta a conveniência
  • Os métodos println, print e readln também são importados automaticamente

Records e Enums

  • Records: representação de dados estruturados no lugar de dicionários em Python
record Window(int id, int desktop, int x, int y, int width, int height, String title) {}  
  • Enums: expressão de enumerações mais intuitiva do que em Python
enum Direction { NORTH, EAST, SOUTH, WEST };  

Recursos úteis da linguagem e da API

  • Uso de var: permite usar variáveis em scripts sem declarar tipos
  • static import: possibilita cálculos matemáticos mais concisos
import static java.lang.Math.*;  
var diagonal = sqrt(pow(width, 2) + pow(height, 2));  
  • Blocos de texto: mantêm código e dados juntos e melhoram a legibilidade
  • Bibliotecas robustas de strings, expressões regulares, coleções e data/hora
  • Leitura de arquivos:
var content = Files.readString(Path.of(filename));  
  • Execução de processos externos:
String run(String... cmd) throws Exception {  
    var process = new ProcessBuilder(cmd).redirectErrorStream(true).start();  
    process.waitFor();  
    return new String(process.getInputStream().readAllBytes());  
}  

Gerenciamento de dependências e JBang

  • JBang: permite adicionar dependências Maven diretamente no arquivo-fonte
//DEPS org.eclipse.angus:jakarta.mail:2.0.3  
  • Depois, é possível executar assim
jbang MailMerge.java  
  • Converter o script em executável:
///usr/bin/env jbang "$0" "$@" ; exit $?  

Ambiente de notebooks

Vantagens dos notebooks

  • Programação exploratória: ideal para lidar com dados e executar código pontual ou de pequena escala
  • Estrutura com células de código e texto:
    • O resultado da execução das células de código pode ser exibido como texto, tabela, imagem, áudio ou vídeo
    • É possível repetir tentativas e erros até obter o resultado desejado e depois adicionar comentários
  • Superior ao JShell:
    • É mais fácil trabalhar por célula
    • Dá para visualizar tabelas e gráficos de dados
    • Salvar e compartilhar é simples

Jupyter e notebooks Java

  • Jupyter Notebook: ferramenta amplamente usada por cientistas de dados em Python
    • Pode ser executado localmente ou na nuvem (por exemplo, Google Colab)
  • A tecnologia do Jupyter é independente de linguagem:
    • É possível instalar kernels para várias linguagens (por exemplo, IJava, JJava, Ganymede, Rapaio)
    • Jupyter Java Anywhere: usa JBang para simplificar a instalação de kernels Java
  • Limitações:
    • Cada kernel trata dependências e exibição de resultados não textuais de forma diferente
    • O kernel IJava tem alguns problemas na resolução de dependências
    • Oracle ou grandes fornecedores precisariam oferecer um serviço tipo Colab dedicado a Java

Processamento e visualização de dados em Java

  • Python facilita o processamento de dados com bibliotecas como NumPy e Matplotlib
    • Em Java, ainda falta um ecossistema equivalente
  • tablesaw:
    • Pode ser usado como alternativa ao NumPy
    • Oferece suporte a visualização com o pacote JavaScript do Plot.ly

Projeto JTaccuino

  • JTaccuino:
    • Notebook Java em desenvolvimento por Sven Reimers
    • Oferece uma UI amigável baseada em JavaFX
    • Usa JShell como backend
    • Ainda está em estágio inicial, mas tem alto potencial de evolução

Kotlin Notebook

  • O plugin Kotlin Notebook para IntelliJ está disponível para desenvolvedores Kotlin

Conclusão

  • Com as ferramentas certas, Java é uma escolha muito eficaz para lidar com tarefas pequenas
  • JBang facilita a escrita de scripts que usam bibliotecas de terceiros
  • Java também tem potencial para programação exploratória, mas o suporte de ferramentas ainda precisa melhorar

2 comentários

 
aer0700 2024-12-24

Para usar em scripts simples, linguagens com tipagem dinâmica são muito mais práticas...
Claro, quando passa da fase de protótipo, eu usaria uma linguagem estática.

 
GN⁺ 2024-12-20
Comentários do Hacker News
  • Descobriram uma forma de executar um programa "Hello World" de maneira simples. Ficou muito mais simples do que o código complexo de antes.

    • Ao usar Java 21, sentiram que o código ficou menos complexo. var e record são especialmente úteis.
    • Estão resolvendo problemas do AoC com o formato java myfile.java, e o recurso de importar automaticamente java.base é útil.
  • Usam Java, JavaScript e TypeScript, mas para scripting usam .NET e LINQPad. Graças ao LINQ, fazer scripts ficou mais fácil.

    • Respeitam Python, mas acham difícil de ler. Não estão familiarizados com a sintaxe de PHP e Python.
  • Na época do desenvolvimento do JDK 1.1, não havia consenso sobre uma suíte de testes. Mark Reinhold recusou testes no formato do JCK e escreveu um harness de testes simples.

    • O recurso mais útil para programadores Java é o hot reload do depurador. Escrever código fica muito mais fácil.
  • As linguagens evoluem com o tempo. Java agora é rápido, e com a adição de genéricos e inferência de tipos simples, o código boilerplate foi reduzido.

  • PHP também é uma linguagem útil. Vem pré-instalado em muitos sistemas *nix e tem uma biblioteca padrão útil para lidar com arquivos, JSON e requisições de rede.

  • No Java 23, três métodos de java.io.IO são importados automaticamente. Esse é um novo tipo e pode ser usado com a opção --enable-preview.

  • Aprenderam a programar em "Java de arquivo único" no Hacker Rank, e isso é útil para resolver problemas de programação em whiteboard.

  • Se quiser entender o motivo do método main simplificado, vale a pena consultar o JEP 495. Está previsto para entrar no JDK 24.

  • Usam Java para todos os scripts e tarefas de programação e já o utilizam na empresa há mais de 5 anos. Estão satisfeitos com a evolução contínua da linguagem.