Di tempat kerja, saya sering menulis skrip bash. Atasan saya menyarankan agar seluruh skrip dipecah menjadi fungsi, mirip dengan contoh berikut:
#!/bin/bash
# Configure variables
declare_variables() {
noun=geese
count=three
}
# Announce something
i_am_foo() {
echo "I am foo"
sleep 0.5
echo "hear me roar!"
}
# Tell a joke
walk_into_bar() {
echo "So these ${count} ${noun} walk into a bar..."
}
# Emulate a pendulum clock for a bit
do_baz() {
for i in {1..6}; do
expr $i % 2 >/dev/null && echo "tick" || echo "tock"
sleep 1
done
}
# Establish run order
main() {
declare_variables
i_am_foo
walk_into_bar
do_baz
}
main
Apakah ada alasan untuk melakukan hal ini selain "keterbacaan", yang saya pikir dapat juga dilakukan dengan beberapa komentar dan spasi baris?
Apakah ini membuat script berjalan lebih efisien (saya benar-benar mengharapkan yang sebaliknya, jika ada), atau apakah itu membuatnya lebih mudah untuk memodifikasi kode di luar potensi keterbacaan yang disebutkan sebelumnya? Atau itu benar-benar hanya preferensi gaya?
Harap perhatikan bahwa meskipun skrip tidak menunjukkannya dengan baik, "menjalankan urutan" fungsi dalam skrip aktual kami cenderung sangat linier - walk_into_bar
tergantung pada hal-hal yang i_am_foo
telah dilakukan, dan do_baz
tindakan pada hal-hal yang diatur oleh walk_into_bar
- jadi dapat secara sewenang-wenang menukar run order bukanlah sesuatu yang biasanya kita lakukan. Misalnya, Anda tidak akan tiba-tiba ingin declare_variables
mengejarnya walk_into_bar
, itu akan menghancurkan banyak hal.
Contoh bagaimana saya akan menulis skrip di atas adalah:
#!/bin/bash
# Configure variables
noun=geese
count=three
# Announce something
echo "I am foo"
sleep 0.5
echo "hear me roar!"
# Tell a joke
echo "So these ${count} ${noun} walk into a bar..."
# Emulate a pendulum clock for a bit
for i in {1..6}; do
expr $i % 2 >/dev/null && echo "tick" || echo "tock"
sleep 1
done
local
- ini menyediakan ruang lingkup variabel yang sangat penting dalam skrip non-sepele.
main()
di bagian atas dan menambahkanmain "$@"
di bawah untuk menyebutnya. Itu memungkinkan Anda melihat logika skrip tingkat tinggi hal pertama ketika Anda membukanya.