Bash:
Рефакторинг

Як:

Розглянемо простий Bash скрипт, який потребує рефакторингу. Він незручний, із повторюваним кодом і за ним важко слідкувати:

#!/bin/bash
echo "Введіть ім'я файлу:"
read filename
if [ -f "$filename" ]; then
    echo "Файл існує."
    count=$(grep -c "foo" "$filename")
    echo "Слово foo з'являється $count разів."
else
    echo "Файл не існує."
fi

Рефакторинг для підвищення ясності та можливості повторного використання може включати введення функцій і більш граціозне оброблення помилок:

#!/bin/bash

function file_exists() {
    [[ -f "$1" ]]
}

function count_occurrences() {
    grep -c "$1" "$2"
}

function main() {
    local filename word count
    echo "Введіть ім'я файлу:"
    read -r filename
    echo "Введіть слово для пошуку:"
    read -r word

    if file_exists "$filename"; then
        count=$(count_occurrences "$word" "$filename")
        echo "Слово $word зустрічається $count разів."
    else
        echo "Файл не існує." >&2
        exit 1
    fi
}

main "$@"

Рефакторингова версія використовує функції для поліпшення читабельності та можливості потенційного повторного використання.

Поглиблено:

Рефакторинг — це не концепція, яка з’явилася із Bash чи навіть високорівневих мов програмування; вона така ж стара, як і саме програмування. Термін був формалізований у книзі “Refactoring: Improving the Design of Existing Code” Мартіна Фаулера у 1999 році, зосереджуючись головним чином на об’єктно-орієнтованих мовах.

У контексті скриптів Bash рефакторинг часто означає розбиття довгих скриптів на функції, зменшення повторення за допомогою циклів або умовних конструкцій, а також уникнення поширених пасток, таких як неспроможність обробити пробіли у назвах файлів. Альтернативами Bash для скриптів, що стали надто складними, є Python або Perl, які пропонують кращі структури даних і обробку помилок для складних завдань.

Рефакторинг, специфічний для Bash, більше про дотримання кращих практик, таких як використання лапок для змінних, використання [[ ]] для тестів замість [ ], і віддача переваги printf замість echo для надійного виводу. Деталі впровадження часто зводяться до дотримання посібників стилю та використання інструментів на кшталт shellcheck для статичного аналізу, щоб виявляти поширені помилки.

Див. також: