Bash:
Refatoração
Como:
Vamos considerar um simples script Bash que precisa de alguma refatoração. É desajeitado, com código repetido e é difícil de seguir:
#!/bin/bash
echo "Digite um nome de arquivo:"
read filename
if [ -f "$filename" ]; then
echo "O arquivo existe."
count=$(grep -c "foo" "$filename")
echo "A palavra foo aparece $count vezes."
else
echo "O arquivo não existe."
fi
Refatorar para clareza e reutilização pode envolver a introdução de funções e o tratamento de erros de maneira mais elegante:
#!/bin/bash
function file_exists() {
[[ -f "$1" ]]
}
function count_occurrences() {
grep -c "$1" "$2"
}
function main() {
local filename word count
echo "Digite um nome de arquivo:"
read -r filename
echo "Digite a palavra a ser procurada:"
read -r word
if file_exists "$filename"; then
count=$(count_occurrences "$word" "$filename")
echo "A palavra $word aparece $count vezes."
else
echo "O arquivo não existe." >&2
exit 1
fi
}
main "$@"
A versão refatorada usa funções para melhorar a legibilidade e possibilita a reutilização potencial.
Aprofundamento:
Refatoração não é um conceito que surgiu com Bash ou mesmo com linguagens de programação de alto nível; é tão antigo quanto a programação em si. O termo foi formalizado no livro “Refactoring: Improving the Design of Existing Code” por Martin Fowler em 1999, focando principalmente em linguagens orientadas a objetos.
No contexto de scripts Bash, refatorar frequentemente significa decompor scripts longos em funções, reduzindo a repetição com loops ou condicionais, e evitar armadilhas comuns como falhar ao lidar com espaços em branco em nomes de arquivos. Alternativas ao Bash para scripts que se tornaram muito complexos incluem Python ou Perl, que oferecem melhores estruturas de dados e tratamento de erros para tarefas complexas.
Refatoração específica para Bash é mais sobre aderir às melhores práticas, como citar variáveis, usar [[ ]]
para testes em vez de [ ]
, e preferir printf
ao invés de echo
para saída robusta. Detalhes de implementação muitas vezes giram em torno de aderir aos guias de estilo e usar ferramentas como shellcheck
para análise estática para capturar erros comuns.