Lista kontrolna dla dobrego programowania


Checklist for good programming
Copyright © By Raphael A. Finkel
For original English text, go to: http://www.cs.uky.edu/~raphael/checklist.html

Lista kontrolna powinna pomóc Ci pisać wysokiej jakości programów.
Raphael Finkel, 17.08.2005

  • Identyfikatory: Sprawdź, czy wszystkie identyfikatory są znaczące.

Jedna litera identyfikatory prawie nigdy nie są miarodajne.
Nazwy takie jak flagi i temp rzadko są znaczące. Zamiast flagi, za nazwanie logiczny warunek sprawdza, jak valueFound.
Zastanów się wielu słów identyfikatory, jak nameIndex. Długie identyfikatorów (w granicach rozsądku) wydają się być bardzo czytelny.

  • Bare literały: Unikać liczb innych niż 0 i 1 i ciągów innych niż “” w programie oprócz podczas definiowania stałych.

Nie należy używać dosłownego liczbę całkowitą jako tablica związana.
Nie należy używać dosłownego liczbę całkowitą jako parametr uruchamiania, na przykład limitu czasu lub numeru portu.
Nie należy używać dosłownych liczby całkowite, aby wybrać pozycje menu.
Nie należy używać dosłownego całkowitą do pomiaru wielkości łańcuch albo innych zdarzeń; sizeof wykorzystanie () i strlen () w C i C + + i długość () i rozmiar w Javie…
Nie należy używać dosłownego ciąg dla nazwy pliku. Można wyprowadzać ciągami tekstowymi, choć.
Nie należy używać dosłownego całkowitą do wskaźnika do tablicy zawierającej heterogenicznych danych.
Nie deklarują identyfikator z nazwiskiem oznaczający dosłownie, takie jak “trzydzieści”.

  • Modularyzacja: program jest zbudowany z oddziałujących elementów.

Nie należy wkładać całą swoją kod do procedury main ().
W rzeczywistości nie czynią wszelkie rutynowe zrobić zbyt dużo pracy. Jeśli jest dłuższy niż około 50 linii, to być może zbyt długo.
Jeśli duplikat kodu kilka razy zastanowić się, czy pętla będzie działać lepiej, a może podprogram.
Jeśli uznasz wcięć bardzo głęboko, prawdopodobnie nie używasz podprogramów, kiedy powinny.
Nie nowo procedury biblioteczne (chyba, że ​​zadanie wymaga). Spójrz w podręcznikach do nauki o sprintf () i atoi (), na przykład.
Użyj pliki nagłówkowe w C i C + + (pliki nagłówkowe mają nazwy zakończone. H) określenie wszystkich stałych wymaganych przez wielu plików i zadeklarować wszystkie podprogramy eksportowane między plikami. Ale nie należy umieszczać ciała podprogramów w plikach nagłówkowych (z rzadkim wyjątkiem inline podprogramów).

  • Formatowanie: Twój program powinien być łatwy do odczytania.

Spójrz na http://geosoft.no/development/javastyle.html jasnych sugestii na temat formatowania i innych kwestii prezentacji. Wniosek ten jest wyraźnie skierowana na Javie, ale ma wartość dla innych językach też.
Staraj się ograniczyć wszystkie linie do 80 znaków, wielu ludzi uważa kod w 80-kolumn okien ze względów historycznych.
Nie należy używać zarówno tabulatorów i spacji dla wcięć, ponieważ nie wszystkie edytory tekstu traktować karty jak dokładnie 8 spacji.
Czy po spójny wzorzec wcięcia, który odzwierciedla strukturę programu sterującego.
Nie należy wkładać wiele pustych linii w swoim programie. Jeden pusty wiersz między podprogramów wystarczy.
Różne systemy operacyjne zakończyć linie różne sposoby. Jeśli przemieszczać się pomiędzy Win32 (który używa \ r \ n), Unix (który używa \ n) i MacOS (który używa \ r), sformatować dysk plik się stosować jednolite metody terminacji.
Nie ustawić bit wykonywalny (Unix) z plikami źródłowymi.

  • Kodowanie: chcesz, aby Twoje kodowanie być jasne, utrzymaniu i wydajny, w tej kolejności. Niektóre z zasad tutaj są bardzo specyficzne, inne są bardziej ogólne.

Nie należy używać sekwencji czy stwierdzenia, które nie posiadają jeszcze gdyby tylko można dopasować; używać else if.
Jeśli chcesz kategoryzować wprowadzania tekstu, nie wyliczyć możliwych pierwszych znaków.
Użyj Przesunięcie zamiast mnożenia do budowy bitowe wzorce.
W instrukcji switch, należy zawsze sprawdzić w przypadku domyślnej. Podobnie w sekwencji instrukcji if-then-else, użyj końcową innego.
Wszystkie wywołania systemowe mogą się nie powieść. Zawsze należy sprawdzić kod zwrotny i używać perror () aby zgłosić awarię.
Boolean należy zawsze używać typu boolean w Javie, bool w C + + i 0/1 liczby całkowite C. Nie należy używać znaków t oraz f, i nie używać -1 do 1.
Użyj pętli do inicjalizacji struktur danych, jeśli to możliwe.
Użyj każdą zmienną a każde pole o strukturze dokładnie jeden cel. Nie należy przeładowywać je, chyba że istnieje doskonały powód, aby to zrobić.
Nie należy używać tego samego identyfikatora zarówno typu, zmienna i nazwę pliku, nawet po zmianie kapitalizacji. To zbyt skomplikowane.
W przypadku modyfikowania danych z htonl () lub podobnej rutyny przed transmisji sieciowej, nie zmieniają dane w miejscu. Budowy drugiej struktury danych.
Staraj się nie używać globalnych lub nielokalne zmiennych. Oświadczam każdej zmiennej w najmniejszym zakresie można. Istnieje dozwolonego korzystania z nielokalnych zmiennych, ale upewnij się, że naprawdę ich potrzebują.
Shell i Perl programy powinny mieć ich #! linia jak w pierwszej linii pliku, w przeciwnym wypadku linia jest tylko komentarz.
Staraj się unikać kodowanie szczególne przypadki. Często można użyć pseudo-dane lub inne struktury danych metod, które pozwalają złożyć szczególne przypadki w zwykłych przypadkach.

  • Kompilatory: Niech pomoże Ci znaleźć błędy

Zawsze powoływać kompilatorów z wszystkich ostrzeżeń włączone. Dla C i C + +, użyj na ścianie flagę. Dla języka Java, użytkowej Xlint: ALL-dezaprobata. Dla Pythona, użyj-t-W ogóle.
Wszystkie Perl programy powinny działać z flagą-W i powinni mieć stosować surowe. Wszystkie Perla cgi-bin skrypty powinny mieć-T flagę, też.

  • Narzędzie make: Użyj jej, a ją dobrze wykorzystać.

Makefile powinien zawsze mieć “czysty” przepis, który powinien usunąć wszystkie pliki, które mogą być przebudowany przez innych receptur w makefile, w tym obiektów i plików wykonywalnych.
Jeśli twój projekt ma kilka plików źródłowych, makefile powinien generować obiektów (. O) pliki jako potrzebne i połączyć je ze sobą.
Makefile powinien być napisany tak, że jeśli make dwa razy z rzędu, drugi bieg czy nie rekompilacji.
Każdy przepis powinien utworzyć plik określony w jej celu.
Każdy przepis powinien stosować każdy plik określony w swojej liście wymagań wstępnych.
Naucz się korzystać z zasady celów, takich jak. Współpracy w celu uniknięcia powtarzające się pliki Makefile.
Jeśli masz tylko jeden C lub C + + plik źródłowy, plik wykonywalny powinny mieć taką samą nazwę (bez rozszerzenia. C lub. CPP).
Upewnij się wymienić wszystkich. H plików jako warunek wstępny, gdzie są one potrzebne. Rozważ używanie makedepend wygenerować listę warunkiem wstępnym dla Ciebie.

  • Dokumentacja: To nie tylko po prostu dla równiarka. To pomaga jak piszesz program, też!

Dodaj dokumentacji jak piszesz program. Zawsze można zmienić go jako zmian konstrukcyjnych.
Na przykład zewnętrzne dokumentację: W jaki sposób jeden skompilować i uruchomić program, a co to znaczy zrobić? Zewnętrzna dokumentacja może być w osobnym pliku, dla małych projektów, może to być komentarz w jednym pliku źródłowym.
Dołącz wewnętrznej dokumentacji: Jakie algorytmy i struktury danych używasz? Przegląd może być w osobnym pliku, ale zwykle wewnętrznej dokumentacji znajduje się na konkretnych procedur, deklaracji i kroków, które opisuje.
Sprawdź cały program i dokumentację błędów ortograficznych. Jest niegrzeczny, aby włączyć w błędny pracy, a to świadczy o braku uwagi na szczegóły.
Sprawdź wszystkie swoje dokumenty (i komunikaty wyjściowe) za błędy gramatyczne.
Programy są dużo bardziej czytelne jeśli umieścić krótki komentarz na klamry zamykające. Na przykład, nawiasem zamykającym warunkowy może mieć komentarz w stylu “jeśli wartość wygląda dobrze”. Nawias zamykający pętlę może mieć komentarz w stylu “dla każdej linii wejściowej”. Klamra zamknięcie procedury może mieć komentarz po prostu nazywania procedurę. Nawias zamykający Klasa może mieć komentarz mówiący “klasa”, a następnie nazwa klasy.

Comments are closed.