Formatowanie kodu, czytelność, praktyki

0

Cześć

Chciałbym pisać czytelny kod. Zacząłem studia i chciałbym nabierać dobrych nawyków. Czy jeśli nie umiem programować to jestem w stanie wyciągnąć coś z książki "Clean Code"? Czy najpierw powinienem nauczyć się pisać działający kod? Zastanawiam się nad kupnem, ale jeśli i tak jej nie zrozumiem na tym etapie to raczej to odłożę w czasie.

Czy książka jest dobrze przetłumaczona na język polski?

Mam jeszcze pytanie dot.programowania, chodzi o język C. Mam taki przykładowy kawałek kodu:

// fathm_ft.c -- converts 2 fathoms to feet
#include <stdio.h>

int main(void)
{
	int feet, fathoms;
	
	fathoms = 2;
	feet = 6 * fathoms;
	
	printf("There are %d feet in %d fathoms!\n", feet, fathoms);
	printf("Yes, I said %d feet!\n", 6 * fathoms);
	
	return 0;
}

Jak deklarować zmienne? Jeśli ich typ jest taki sam to lepiej zostawić je w jednej linijce czy rozbić na kilka? Przypisywać zmiennym od razu wartość czy oddzielić deklarację od instrukcji przypisania? Jak operować whitespace'ami, by zwiększyć czytelność kodu?

1

Jeśli masz problem z formatowaniem to możesz poszukać jakiegoś narzędzia do formatowania kodu, które będzie wymuszać taki sam styl w całym projekcie.

Nie wiem czego używa się w C/C++. ale w JavaScripcie jest to eslint, oraz prettier. Wtedy wystarczy stworzyć jeden plik z konfiguracją i mamy problem z głowy.

1
hoger888 napisał(a):

Czy najpierw powinienem nauczyć się pisać działający kod?

Zależy.
Jeśli jesteś na poziomie zmiennych i for'ów, programy 50 liniowe, to "najpierw działający"

Dla programu 500 linii, a tym bardziej w tysiace, skrajnie trudno jest uzyskać "działajacy", jeśli jest w złym stylu / braku stylu. Styl, dobre praktyki nie są w większych programach dodatkiem do "działania", ale prawie niezbędnym fundamentem.

PS. Martin i podobne książki nt dobrych praktyk będą skupiały się na programowaniu obiektowym

1

Czy jeśli nie umiem programować to jestem w stanie wyciągnąć coś z książki "Clean Code"?

NIE - naucz się najpierw dobrze programować, napisz kilka programów i pokaż je kilku inny programistom. Po takich doświadczeniach będziesz być może w stanie zrozumieć o co wujkowi chodzi. Nie uczysz się grać w piłkę jak jeszcze nie umiesz chodzić, wszystko po kolei.

Czy książka jest dobrze przetłumaczona na język polski?

Aha, nie znasz jeszcze marki Helionu. Po przeczytaniu kilku tłumaczonych książek powinieneś sobie wyrobić opinię

Mam jeszcze pytanie dot.programowania, chodzi o język C...

Klasyczny C jest specyficzny bo zmienne trzeba deklarować na początku funkcji, podobnie jak w Pascalu.
Dobrze to widać na przykładzie kodu jądra Linuxa: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/coredump.c?h=v5.15-rc4#n121

W C99 już to poprawili i można deklarować zmienne w miejscu użycia:

#include <stdio.h>

int main()
{
    printf("Hello World");
    
    int foo = 1;
    int bar = 2*foo;
    printf("bar is %d.", bar);

    return 0;
}

Podobnie było by gdybyś używał "C z C++" czyli pisał C ale w C++ (po prostu zmień rozszerzenie z c na cpp i gcc to łyknie).

EDIT:

Zmienne radzę deklarować jedna na linię, no chyba że są powiązane np.

double x, y, z;

W C jest pułapka jeżeli napiszesz:

int* a, b;

to a jest wskaźnikiem, a b liczbą typu int.
Zrób sobie przysługę i ucz się pisać gwiazdkę przy nazwie zmiennej, potem cholernie ciężko się oduczyć:

int *a, *b; // dobrze, obie zmienne to wskaźniki

Co do formatowania jak użyjesz jakiegoś lepszego IDE (VisualStudio na win, Eclipse z CDT na Linux) to tam jest opcja formatowania kodu, lub nawet formatowania kodu podczas zapisywania pliku.

Są też formatery z linii komend ale wydaje mi się że to jeszcze nie ten poziom zaawansowania (clang-format).

0

Pisanie czytelnego kodu to podchwytliwa sprawa. To nie jest lista zasad do wykucia na blachę. To są sprawy subtelne: jak nazywać rzeczy (jeden z trudniejszych problemów w programowaniu), jak dzielić funkcje. Tu czytając przykłady musisz dobrze rozumieć kod, bo inaczej nie będziesz rozumieć czemu tak, a nie inaczej. Najpierw napisz kilka działających programów, a potem spróbuj. Do tego czasu ogranicz się do robienia wcięć i zasady „staraj się, żeby funkcja nie była dłuższa niż 20linijek, nie miała więcej niż 2 parametry”, jeśli widzisz że powtarzasz taki sam schemat działań, napisz funkcję. Względnie, jeśli masz długą serię if-else if-else to pomyśl dwa razy czy nie można użyć np. pętli lub tablicy akcji(dispatch table: https://blog.alicegoldfuss.com/function-dispatch-tables/ ).

Co do deklarowania zmiennych to różnie to bywa. Jeśli masz kilka powiązanych zmiennych i nie są inicjalizowane lub inicjalizacja jest krótka, można spokojnie napisać razem, np:

int suma = 0, ilosc = 0;
// liczymy  srednią

jeśli nie, raczej piszemy w odrębnych linijkach. Oddzielanie przecinkiem zamiast pisania wszystkiego od nowa może być trochę wygodniejsze w czytaniu, bo po kształcie kodu już widzisz, że zminne są tego samego typu:

int suma = 0,
    ilosc = 0;

Jednak, nie odpowiedzi na takie pytania chyba najlepiej spróbować znaleźć metodą prób i błędów. Gusta są różne. Czytaj różne kody źródłowe, stosuj rozwiązania, które ci się podobają.

0

Czytelny kod idzie w parze z wiedzą i zrozumieniem problemów. Jeśli nic nie wiesz o problemach jakie chcesz rozwiązać wówczas będziesz błądził nawet jesli przeczytasz ze sto takich ksiązek jak clean code.

Na początek nie myśl o stylu czy tego typu rzeczach, po prostu zostaw w programie to co niezbędne - to i tak wiele. Programiści docenią fakt, że nie lejesz wody.

1 użytkowników online, w tym zalogowanych: 0, gości: 1