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.

Veja Também: