Jest to właściwie jedyna reguła formatowania kodu, którą znalazłem, ma zauważalny wpływ na czytelność i nie wymaga prawie żadnego wysiłku (zakładając, że Twój edytor kodu nie rozpocznie z tobą walki).
Dobrze jest zaprojektować język programowania, aby nazwy pojawiały się w spójnej pozycji w deklaracjach / definicjach. Uzasadnienie jest proste: masz ładną wizualną kotwicę (kręcone nawiasy klamrowe lub po prostu wiszące wcięcie), za pomocą której możesz od razu znaleźć początek nazwy. Nie musisz analizować języka podczas skanowania pliku, znajdź nazwę.
To tak samo, jak podczas formatowania dokumentu: kiedy zaczynasz nową sekcję, umieszczasz nazwę pogrubioną czcionką - często w osobnej linii - nie zakopaną gdzieś, niezróżnicowaną, długim zdaniem.
Wczesne C miało bardzo krótkie podpisy: typy zwracane były opcjonalne, a typy argumentów deklarowane po podpisie. Nazwy również były bardzo krótkie. Zmniejszyło to wpływ okazjonalnego typu powrotu kompensującego nazwę.
double dot(x, y);
Nadal jest lekkostrawny.
C ++ pogorszyło to nieco. Przenosi specyfikacje typów argumentów do podpisów, dzięki czemu podpisy są dłuższe. Ta składnia została później przyjęta podczas standaryzacji C.
static struct origin *find_origin(struct scoreboard *sb,
struct commit *parent,
struct origin *origin)
jest mniej strawny, ale nie jest tak źle. (Fragment z Git)
Teraz rozważ współczesne praktyki programowania z długimi, opisowymi nazwami i sparametryzowanymi typami i zobacz, jak ten wybór stał się katastrofalny. Przykład z nagłówka Boost:
template <class A1, class A2, class A3, class A4, class A5, class A6>
inline typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&)
{
typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type result_type;
return result_type();
}
Jeśli piszesz kod ogólny, takie podpisy nie są niczym niezwykłym. Możesz znaleźć przykłady o wiele gorszych przypadków, bez zbytniego wysiłku.
C, C ++ i ich pochodne, Java i C #, wydają się być wyjątkami od posiadania czytelnych deklaracji / definicji. Ich popularni poprzednicy i rówieśnicy (Fortran, ALGOL, Pascal) umieścili nazwy przed typami wyników i, na szczęście, wielu ich następców (Go, Scala, TypeScript i Swift, aby wymienić tylko kilka) wybrało również bardziej czytelne składnie.