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や他の高水準プログラミング言語で始まった概念ではなく、プログラミングそのものが始まったときから存在します。この用語は1999年にマーティン・ファウラーによる「Refactoring: Improving the Design of Existing Code」の本で公式に定義され、主にオブジェクト指向言語に焦点を当てています。
Bashスクリプトの文脈では、リファクタリングはしばしば長いスクリプトを関数に分割し、ループや条件文での繰り返しを減らし、ファイル名の空白を扱うなどの一般的な落とし穴を避けることを意味します。複雑すぎるスクリプトにはPythonやPerlなど、より良いデータ構造や複雑なタスクのためのエラー処理を提供するBashの代替手段があります。
Bash固有のリファクタリングは、変数の引用、テストに[[ ]]
を[ ]
より好む、堅牢な出力のためにecho
よりprintf
を好むなど、ベストプラクティスに従うことについてです。実装の詳細はしばしば、スタイルガイドに従い、一般的な間違いを捕捉するためにshellcheck
などの静的分析ツールを使用することを中心に展開します。