Czasami klauzule no-op mogą sprawić, że kod będzie bardziej czytelny.
To może być kwestia opinii, ale oto przykład. Załóżmy, że utworzyłeś funkcję, która działa, biorąc dwie ścieżki uniksowe. Oblicza „ścieżkę zmiany” potrzebną do przejścia z jednej ścieżki do drugiej. Na swoją funkcję nakładasz ograniczenie, że obie ścieżki muszą zaczynać się od znaku „/” LUB oba nie mogą.
function chgpath() {
# toC, fromC are the first characters of the argument paths.
if [[ "$toC" == / && "$fromC" == / ]] || [[ "$toC" != / && "$fromC" != / ]]
then
true # continue with function
else
return 1 # Skip function.
fi
Niektórzy programiści będą chcieli usunąć opcję no-op, ale oznaczałoby to zanegowanie warunku:
function chgpath() {
# toC, fromC are the first characters of the argument paths.
if [[ "$toC" != / || "$fromC" == / ]] && [[ "$toC" == / || "$fromC" != / ]]
then
return 1 # Skip function.
fi
Teraz - moim zdaniem - z klauzuli if nie wynika jasno warunki, w których chciałbyś pominąć wykonywanie funkcji. Aby wyeliminować no-op i zrobić to wyraźnie, chciałbyś usunąć klauzulę if z funkcji:
if [[ "$toC" == / && "$fromC" == / ]] || [[ "$toC" != / && "$fromC" != / ]]
then
cdPath=$(chgPath pathA pathB) # (we moved the conditional outside)
Wygląda to lepiej, ale wiele razy nie możemy tego zrobić; chcemy, aby sprawdzanie było wykonywane wewnątrz funkcji.
Jak często to się dzieje? Niezbyt często. Może raz lub dwa razy w roku. Dość często zdarza się, że warto być tego świadomym. Nie boję się go używać, gdy myślę, że poprawia czytelność mojego kodu (niezależnie od języka).