Wydaje się, że błędy off-by-one są jednym z najbardziej (jeśli nie najbardziej) typowych błędów programistycznych (patrz /software/109/what-are-common-mistakes-in-coding i konwencjonalna mądrość).
Z jakiego powodu są one tak powszechne, czy ma to związek z tym, jak działa ludzki mózg?
Co możemy zrobić, aby zapobiec popadnięciu w ofiarę jednym błędem?
Odpowiedzi:
To ma coś wspólnego z tym, jak działa ludzki mózg. Jesteśmy przekonani, że jesteśmy „wystarczająco dobrzy” do zadań, które zwykle nie wymagają precyzji inżynierskiej. Jest powód, dla którego przypadki, z którymi mamy największe problemy, nazywane są skrzynkami „krawędziowymi”.
Prawdopodobnie najlepszym sposobem na uniknięcie błędów off-by-one jest hermetyzacja. Na przykład, zamiast używać pętli for, która iteruje kolekcję według indeksu (od 0 do zliczenia - 1), użyj pętli dla każdego stylu z logiką, w której przestaje być wbudowany w moduł wyliczający. W ten sposób musisz tylko raz poprawnie wyrównać granice, pisząc moduł wyliczający, zamiast za każdym razem, gdy przeglądasz kolekcję.
źródło
Jest coś szczególnego w tym, jak mózg obsługuje granice i krawędzie.
Podczas gdy mózg łatwiej myśli w kategoriach zasięgu i przestrzeni , skupienie się na krawędzi wydaje się wymagać nieco więcej uwagi. Oto, jak to się dzieje, chwilowa utrata uwagi lub niewystarczająca koncentracja i przeoczyłeś granicę.
Innym niewielkim dodatkiem do problemu jest to, że różne środowiska programistyczne mają różne systemy indeksacji zaczynające się od 0 lub 1, co może wprowadzać zamieszanie u osób aktywnie narażonych na oba typy środowisk.
źródło
Uważam, że jest to spowodowane przełączaniem kontekstu. W naszym codziennym życiu używamy indeksów 1. Z tego powodu nasz mózg nie jest w stanie zapisać prawidłowego zachowania w pamięci długoterminowej.
źródło