- 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
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
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.
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.
varerecordsão especialmente úteis.java myfile.java, e o recurso de importar automaticamentejava.baseé útil.Usam Java, JavaScript e TypeScript, mas para scripting usam .NET e LINQPad. Graças ao LINQ, fazer scripts ficou mais fácil.
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.
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.IOsã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.