Poprawa czytelności kodu [zamknięty]

Jeśli chodzi o dokumentację kodu, zwykle przyjmuje się, że kod powinien wyjaśniać się Sam, a dokumentacja kodu wbudowanego (z wyłączeniem dokumentacji public API) powinna wyjaśniać tylko kwestie meta-kodu, takie jak obejścia, wyjaśnienia, dlaczego wybrane zostały konkretne implementacje itp.

Jak osiągnąć uczynienie kodu bardziej czytelnym i bardziej wyjaśniającym się ?


Edit: oprócz ogólnych komentarzy Szukam również konkretne wskazówki. Więc jeśli powiesz "krótkie, ale znaczące nazwy zmiennych", byłoby miło również uzyskać pomocną wskazówkę (np. "użyj zasady trzech słów").
Author: Peter, 2009-02-15

10 answers

Zobacz wpis na blogu Jeffa Atwooda. To wszystko podsumowuje. Dodam mój osobisty etos jeśli chodzi o dobry czytelny kod:

  • consistence: dotyczy to formatowania, używania klamer, nazewnictwa (zmienne, klasy, metody) i układu katalogów (jeśli zakopiesz katalog źródłowy gdzieś pod /css, będę cię ścigał maczetą);
  • Size: Jeśli funkcja nie mieści się w całości na ekranie w normalnym IDE na normalny rozmiar czcionki, a następnie trzeba całkiem cholernie dobry powód, dlaczego nie. Oczywiście istnieją pewne ważne przypadki dla znacznie dłuższych funkcji, ale są one znacznie przewyższone przez skandaliczne przykłady. Rozkładać w razie potrzeby, aby twoje funkcje były proste;
  • komentuj rozsądnie: istnieje tendencja, aby niektórzy programiści używali komentarzy jako substytutu czytelnego kodu lub po prostu komentowali w celu komentowania (Jak /* finished */ Komentarze tuż przed return true;. Poważnie, co to jest? punkt? Większość (dobry) kod wyjaśnia się;
  • nigdy nie wycinaj i nie wklejaj w ramach projektu: jest to całkowicie dopuszczalne, aby pobrać fragment kodu z jednego projektu do drugiego (każdy projekt jest wyspą), ale należy nigdy wziąć nietrywialny segment kodu z jednego projektu do innego punktu w projekcie. Nieuchronnie jedna zmiana i zostawiasz jakiegoś biednego programistę z zadaniem spojrzenia na te dwa lub więcej segmentów kodu, próbując wypracować jak (i prawdopodobnie więcej co ważne, dlaczego) są różne; i
  • unikaj powtarzającego się kodu: jeśli znajdziesz się pisząc ten sam ciąg wypowiedzi (lub bardzo podobny) w kółko, abstrakcyjny lub parametryzuj go. Jeśli widzisz bardzo podobne stwierdzenia, tendencja jest do przeszukiwania ich, zakładając, że wszystkie są takie same (gdy zazwyczaj nie będą w sposób, który ma znaczenie).
 28
Author: cletus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-17 11:56:27
  • spójny styl formatowania
  • dobre wykorzystanie białej przestrzeni
  • Używanie krótkich, ale znaczących nazw
  • nie za dużo komentarzy (jak wspomniałeś), ale kiedy to zrobię, skomentuj whys kodu, a jeśli ma to zastosowanie, why nots (dlaczego nie użyto innej implementacji, zwłaszcza jeśli wydaje się, że powinno to być oczywiste).
  • nie Optymalizuj kodu, dopóki profiler nie powie mi, że jest powolny lub nieefektywny
 8
Author: Patrick Cuff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-15 13:30:21

Używaj dobrych nazw zmiennych i metod. Podziel kod na znaczące części, które osiągają określone cele. Zachowaj spójność klas (wszystko działa razem) i oddzielenie (istnieje kilka zależności między klasami). Nie powtarzaj się (na sucho). Postępuj zgodnie z zasadami Uncle Boba (nie prawami, jak on wskazuje) w stopniu, w jakim działają one na rzecz ulepszenia kodu.

 8
Author: tvanfosson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-15 13:30:59

Książka clean code Z "uncle bob" daje całkiem dobry przegląd tego, jak powinny wyglądać funkcje, z praktycznymi przykładami.

Niektóre ważne punkty:

  • małe funkcje, klasy
  • dobre, znaczące, nazwy, rozmiar nie ma znaczenia, ale powinny być dokładnie tak długie, jak potrzeba
  • odstępy pionowe między funkcjami / zmiennymi powinny być niskie (deklarować rzeczy jak najbliżej miejsca, w którym są używane po raz pierwszy)
  • funkcje i klasy powinny robić jedną rzecz i tylko jedno

Książka ma o wiele więcej małych zasad, naprawdę polecam. Również uzyskać kod Complete 2.

 5
Author: TomHastjarjanto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-15 13:36:30

Kod samokontroli to:

  • dobre konwencje nazewnictwa
  • przejrzysta konstrukcja i rozdzielenie odpowiedzialności pomiędzy komponenty (Klasa, funkcja itp.)

Pamiętaj jednak, że nawet najbardziej samodokumentujący się kod może udokumentować tylko to, co tam jest; Nigdy to, co zostało celowo pominięte, zoptymalizowane, wypróbowane i odrzucone itp. Zawsze będziesz potrzebował języka angielskiego w swoich plikach źródłowych lub będziesz musiał pominąć ważne zastrzeżenia i projekt decyzje.

 4
Author: Assaf Lavie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-15 13:32:14

Generalnie nie komentuję w kodzie, jednak całkowicie nie zgadzam się z często utrzymywanym poglądem, że należy po prostu napisać czytelny kod, a potem nie trzeba dokumentacji.

To, co myślę powinno być udokumentowane, to twój interfejs . Przez to mam na myśli, że powinny być komentarze powyżej klas i metod. Nie proste metody jak set I get oczywiście.

Osoby korzystające z klas i metod napisanych przez Ciebie nie powinny czytać Twojego kodu, aby zrozumieć jak ich używać. Myślę więc, że należy udokumentować, jakie są prawne zakresy wejścia i wyjścia, a także ważne niezmienniki. Np. funkcja przyjmuje wskaźnik jako argument. Bez względu na to, jak dobrze nazwiesz swoją funkcję, nigdy nie może być oczywiste, czy podanie NULL jest poprawne, czy NULL jest poprawnym zwracanym wynikiem. Często -1 i 0 są używane do sygnalizowania czegoś w rodzaju szukanego obiektu not found lub podobnego. To powinno być udokumentowane.

Poza tym myślę, że kluczem do dokumentowania kod nie jest po to, aby dokumentować, co klasa lub Metoda robi lub jest, ale co intencja za nim jest.

 4
Author: Adam Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-15 14:20:04

Miej Konwencję kodowania {[2] } między tobą a twoimi kolegami. Zaczynając od wcięcia, obejmując nawiasy, aż do "skąd pochodzi nawias klamrowy: nowa linia, ta sama linia?"

W Visual Studio można wybrać i naprawić ten styl. Pomaga wszystkim innym w czytaniu tego samego kodu. Ułatwia to również śledzenie historii w systemie wersjonowania, gdy nie trzeba rozróżniać "pustych" edycji (zmiana stylu) i rzeczywistych edycji.

 2
Author: Leonidas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-15 13:30:22

Trzymaj się paradygmatu używanego w środowisku, które kodujesz.

Oczywistym przykładem jest użycie przypadku Pascala dla metod w. NET, przypadku wielbłąda w Javie.

Mniej oczywiste przykłady odnoszą się do używania tych samych konwencji, które są używane w standardowej bibliotece klas.

Jest wiele do powiedzenia na ten cel. Konwencje nazewnictwa przekazują wiele informacji dla ludzi, a bardzo niewiele dla kompilatora. Każdy, kto korzystał z API w jednym środowisku, które korzysta z konwencje innego środowiska zauważyły, jak bardzo wyróżnia się obcy kod.

Spójność jest cenną cechą, która zmniejsza obciążenie poznawcze ludzkiego konsumenta kodu.

 1
Author: Drew Noakes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-15 21:17:18

Eschew codejunk.

Edward Tufte ma piękną, potężną koncepcjęchartjunk , elementów wizualnych na wykresie, które przyczyniają się do szumu, a nie Informacji. Myśląc o wykresach w ten sposób, tworzymy znacznie wyraźniejsze wykresy.

Myślę, że ten sam rodzaj myślenia, zastosowany do kodu, przynosi nam znacznie czystszy kod. Przykłady obejmują komentarze w stylu /* getFoo() gets the foo */, niepotrzebne nawiasy i klamry, zbyt specyficzne nazwy zmiennych i notacja węgierska brodawki.

To, co tworzy chartjunk, zależy od zespołu, środowiska i projektu-niektórzy ludzie lubią brodawki; niektóre środowiska renderują kod w sposób, który czyni pewne śmieci użytecznymi( na przykład dopasowanie brace i komentarze // end for); niektóre projekty wymagają bardziej obszernego komentowania, aby dostosować się do standardów lub kompleksowo udokumentować API. Ale kiedy zespół ustali standardy, co oznacza chartjunk dla swoich projektów, wiele decyzji staje się łatwiejszych, a jego kod staje się bardziej spójne i czytelne.

 1
Author: Carl Manaster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-19 15:23:18

Wszystkie odpowiedzi (i pytanie) opierają się na założeniu, że czytelność jest wyłącznie odpowiedzialnością autora kodu. Jeśli tak naprawdę nie chcesz czytać kodu i masz listę rezygnacji z czytania (zapach kodu), która pasuje do 99% dostępnego kodu i nie chcesz nawet bardzo mocno myśleć o tym, co robi jakiś kod, to nie znajdziesz żadnego czytelnego kodu.

Jakiekolwiek zasady, których używamy dzisiaj, aby uczynić nasz kod bardziej czytelnym, będą wyglądać staro / align = "left" / Jeśli naprawdę chcesz lepszej czytelności kodu, przeczytaj jakiś stary kod (pozwolić na modę czasu, że musiał działać na maszynie z 1000-tą prędkością i pamięcią, którą masz), Postaraj się go zrozumieć i zachęcić kogoś innego do zrobienia tego samego.

 0
Author: paperhorse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-15 22:16:36