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
для статичного аналізу, щоб виявляти поширені помилки.