Bash:
Refaktorisering

Hur gör man:

Låt oss överväga ett enkelt Bash-skript som behöver någon refaktorisering. Det är klumpigt, med upprepad kod och svårt att följa:

#!/bin/bash
echo "Ange ett filnamn:"
read filename
if [ -f "$filename" ]; then
    echo "Filen finns."
    count=$(grep -c "foo" "$filename")
    echo "Ordet foo förekommer $count gånger."
else
    echo "Filen finns inte."
fi

Refaktorisering för tydlighet och återanvändbarhet kan involvera introduktion av funktioner och hantera fel mer nådigt:

#!/bin/bash

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

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

function main() {
    local filename word count
    echo "Ange ett filnamn:"
    read -r filename
    echo "Ange ordet att söka efter:"
    read -r word

    if file_exists "$filename"; then
        count=$(count_occurrences "$word" "$filename")
        echo "Ordet $word förekommer $count gånger."
    else
        echo "Filen finns inte." >&2
        exit 1
    fi
}

main "$@"

Den refaktoriserade versionen använder funktioner för att förbättra läsbarheten och möjliggör potentiell återanvändning.

Djupdykning:

Refaktorisering är inte ett koncept som ursprungligen kom med Bash eller ens högnivå programmeringsspråk; det är lika gammalt som programmering självt. Termen formaliserades i boken “Refaktorisering: Förbättring av konstruktionen av befintlig kod” av Martin Fowler år 1999, med fokus främst på objektorienterade språk.

I sammanhanget av Bash-scripting betyder refaktorisering ofta att bryta ner långa skript i funktioner, reducera upprepning med loopar eller villkor, och undvika vanliga fallgropar som att inte hantera blanksteg i filnamn. Alternativ till Bash för skript som har blivit för komplexa inkluderar Python eller Perl, som erbjuder bättre datastrukturer och felhantering för komplexa uppgifter.

Bash-specifik refaktorisering handlar mer om att hålla sig till bästa praxis, såsom att citera variabler, använda [[ ]] för tester över [ ], och föredra printf över echo för robust utmatning. Implementationdetaljerna kretsar ofta kring att följa stilguider och att använda verktyg som shellcheck för statisk analys för att fånga vanliga misstag.

Se även: