Bash:
Tái cấu trúc mã

Làm cách nào:

Hãy xem xét một đoạn script Bash đơn giản cần được refactoring. Nó cồng kềnh, với mã lặp lại và khó theo dõi:

#!/bin/bash
echo "Nhập tên tệp:"
read filename
if [ -f "$filename" ]; then
    echo "Tệp tồn tại."
    count=$(grep -c "foo" "$filename")
    echo "Từ foo xuất hiện $count lần."
else
    echo "Tệp không tồn tại."
fi

Refactoring để tăng sự rõ ràng và khả năng tái sử dụng có thể bao gồm việc giới thiệu các chức năng và xử lý lỗi một cách duyên dáng hơn:

#!/bin/bash

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

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

function main() {
    local filename word count
    echo "Nhập tên tệp:"
    read -r filename
    echo "Nhập từ bạn muốn tìm:"
    read -r word

    if file_exists "$filename"; then
        count=$(count_occurrences "$word" "$filename")
        echo "Từ $word xuất hiện $count lần."
    else
        echo "Tệp không tồn tại." >&2
        exit 1
    fi
}

main "$@"

Phiên bản đã được refactoring sử dụng các hàm để cải thiện khả năng đọc và cho phép khả năng sử dụng lại tiềm năng.

Sâu hơn:

Refactoring không phải là một khái niệm bắt đầu với Bash hay thậm chí là ngôn ngữ lập trình cấp cao; nó cũ như chính việc lập trình. Thuật ngữ này được chính thức hóa trong cuốn sách “Refactoring: Improving the Design of Existing Code” của Martin Fowler vào năm 1999, tập trung chủ yếu vào ngôn ngữ hướng đối tượng.

Trong bối cảnh của kịch bản Bash, refactoring thường có nghĩa là phân chia các kịch bản dài thành các hàm, giảm bớt sự lặp lại với các vòng lặp hoặc điều kiện, và tránh các sai lầm phổ biến như không xử lý được khoảng trắng trong tên tệp. Cách thay thế cho Bash đối với các kịch bản đã trở nên quá phức tạp bao gồm Python hoặc Perl, chúng cung cấp cấu trúc dữ liệu tốt hơn và xử lý lỗi cho các nhiệm vụ phức tạp.

Refactoring cụ thể cho Bash nhiều hơn là tuân theo các phương pháp tốt nhất, như sử dụng dấu ngoặc cho biến, sử dụng [[ ]] cho các bài kiểm tra thay vì [ ], và ưu tiên printf hơn là echo cho đầu ra mạnh mẽ. Chi tiết triển khai thường xoay quanh việc tuân theo hướng dẫn phong cách và sử dụng công cụ như shellcheck cho phân tích tĩnh để bắt các lỗi phổ biến.

Xem thêm: