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