Dlaczego nie oba?
Przede wszystkim „opisowy” i „pełny” to nie to samo. Na przykład, jeśli piszesz dość lokalną pętlę, i
jest to bardzo dobra nazwa zmiennej dla zmiennej pętli; current_iteration_index
, choć prawdopodobnie bardziej opisowy i zdecydowanie bardziej szczegółowy, jest znacznie gorszy i w ogóle nie dodaje żadnych informacji, ponieważ użycie i
jako zmiennej pętli jest powszechnie akceptowane i nie ma innego znaczenia i
niż to.
Dobre nazwy zmiennych mają charakter opisowy, ponieważ programista zaznajomiony z idiomem języka i konwencjami bazy kodu może łatwo odgadnąć, jaka jest ich rola, ale są również wystarczająco zwięzłe, aby zachować zwartość.
Limit 80 znaków, pierwotnie będący konsekwencją ograniczeń technicznych terminali tekstowych z lat 70. XX wieku, jest nadal ceniony przez wielu dzisiaj, i mimo że nadal istnieją przyczyny techniczne (maksymalne długości linii w niektórych protokołach sieciowych, w szczególności związane z pocztą e-mail), bardziej istotne są przyczyny psychologiczne i społeczne. Okazuje się, że długości linii wokół znaku 66 znaków zapewniają najwygodniejsze doznania w prozie w języku naturalnym (rozmiar czcionki, co ciekawe, nie robi dużej różnicy, a co za tym idzie, nie zmienia też rozmiaru ekranu ani papieru); 80-znakowe limity linii są dość zbliżone do tego, ale ponieważ większość typowego fragmentu kodu jest zwykle wcięta co najmniej na jednym lub dwóch poziomach (co oznacza od 4 do 16 znaków, w zależności od ustawień wcięcia),
Innym efektem trzymania się linii 80-znakowych jest to, że jest to całkiem niezły wskaźnik, kiedy sprawy są zbyt skomplikowane. Długie linie są zwykle spowodowane przez jedną z następujących czynności:
- Funkcje z długą listą argumentów; nie jest to przyjemne, ponieważ utrudniają czytelność i mogą łatwo powodować subtelne błędy, np. gdy ludzie zamieniają kolejność argumentów w sposób, który nie jest w stanie złapać kompilatora.
- Złożone wyrażenia, często spotykane w warunkowych (np.
if ((user.isLoggedIn && user.hasPermission(page.getRequiredPermission()) && !user.isBanned) || page.getRequiredPermission() == null)
); to również jest zwykle trudne do odczytania, a kod powinien zostać przepisany na coś bardziej uporządkowanego. Najprawdopodobniej wyrażenie robi zbyt wiele i należy je rozdzielić na metodę lub funkcję.
- Długie literały używane w wywołaniach funkcji lub wyrażeniach, np
print(translate(LANG_EN, LANG_ES, "This is the home page. Feel welcome to click around and see what we have."));
. Przenieś literał na zmienną lub stałą; może nadal przekraczać długość linii, ale jeśli będziesz to robić konsekwentnie, czytelnik może przynajmniej bezpiecznie zignorować niewidoczną część linii, zakładając, że następuje tylko pozostała część literału. Lub jeszcze lepiej, przenieś literały poza kod i do zewnętrznego magazynu danych (plik, baza danych, cokolwiek).
- Głęboko zagnieżdżone instrukcje, np. Sześć poziomów
if
instrukcji w metodzie klasy (to 32 kolumny wcięć dla typowych ustawień). Ponownie, głębokie zagnieżdżanie tworzy złożony i trudny do odczytania kod i należy go unikać jak zarazy - mówiąc prosto, głębokie zagnieżdżanie przepełnia stos ludzkiego mózgu podczas czytania.
Wszystko to są ostatecznie symptomy rzeczy, których wolałbyś nie mieć w swojej bazie kodu na dłuższą metę, a egzekwowanie limitów 80 znaków jest przyjemnym i prostym sposobem, który pomaga zmniejszyć złożoność i zwiększyć czytelność. (Nie oznacza to, że nie można napisać idealnie nieczytelnego kodu w 80 kolumnach: różne konkursy zaciemnionego kodu są wyraźnym kontrprzykładem).