OOP a TDD v Bashi
⏳ Doba čtení: ~4 min (591 slov)Ukázka jak by mohlo vypadat objektově orientované programování v Bashi. Vyscházím z předchozího článku o objektovém Bashi.
Přetížení operátorů
I když je tohle skvělá ukázka flexibility Bashe, v ostré produkci na serverech doporučuji zůstat u standardních postupů. Tento framework je určen především pro edukační účely a demonstraci toho, že hranice mezi skriptováním a programováním jsou tenké.
#!/bin/bash
# By Pytel
source ./class.sh
#DEBUG=true
DEBUG=false
declare -A number
# Definice objektu number
number=(
["value"]=0
["display"]='
echo "Value: $(get $this.value)"
'
["+"]='
local n1=$(get $this.value);
local n2=$(get $1.value);
echo "$(( n1 + n2 ))";
'
["-"]='
local n1=$(get $this.value);
local n2=$(get $1.value);
echo "$(( n1 - n2 ))";
'
)
declare -A n1
declare -A n2
new n1 = number
new n2 = number
array_n1=( 4 5 1 )
array_n2=( 2 1 1 )
sum=( 6 6 2 )
dif=( 2 4 0 )
function test_display () {
out=$(rof number.display)
echo -e "$out"
if [ "$out" != "Value: 0" ]; then
return 1
fi
return 0
}
function test_operator+ () {
local len=$(( ${#sum[@]} -1 ))
local out=""
for i in $(seq 0 $len); do
echo "index: $i"
echo "${array_n1[$i]}"
sat n1.value = ${array_n1[$i]}
sat n2.value = ${array_n2[$i]}
out="$(rfn n1 + n2)"
if [ "$out" != "${sum[$i]}" ]; then
echo "$(get n1.value) + $(get n2.value) = $out"
echo "sum: ${sum[$i]}"
return 1
fi
done
return 0
}
function test_operator- () {
local len=$(( ${#sum[@]} -1 ))
local out=""
for i in $(seq 0 $len); do
echo "index: $i"
echo "${array_n1[$i]}"
sat n1.value = ${array_n1[$i]}
sat n2.value = ${array_n2[$i]}
out="$(rfn n1 - n2)"
if [ "$out" != "${dif[$i]}" ]; then
echo "$(get n1.value) - $(get n2.value) = $out"
echo "sum: ${dif[$i]}"
return 1
fi
done
return 0
}
# END
A kouzla se dějou: out="$(rfn n1 + n2)" vypočítá součet hodnot n1 a n2 pomocí přetíženého operátoru + definovaného v objektu number.