Skocz do zawartości
Komentator

Kurs Arduino - #9 - Czujnik odległości HC-SR04, funkcje

Pomocna odpowiedź

12 godzin temu, Slowik napisał:

Gdyby wywołać funkcję bezpośrednio w instrukcji warunkowej w pętli,

@Slowik nie jest to dobry pomysł z 2 powodów:

  1. wywołasz tę funkcję 7 razy zamiast 1,
  2. za każdym razem możesz uzyskać inny pomiar, raczej chcesz zwizualizować tylko jeden.

Mogę Ci jeszcze doradzić co zrobić żeby poprawić kod 🙂

  1. wyrzuć tzw. magiczne liczby i zastąp je dyrektywami preprocesora #define na górze kodu
  2. osobiście nie podobają mi się jednolinikowe warunki ale tu się nie upieram
  3. dla poprawy czytelności możesz wydzielić funkcjonalność czyli pomiar i wyświetlanie do osobnej funkcji.

W programowaniu bardziej istotna jest czytelność kodu, a nie jego upakowanie. Często dzięki ładnym nazwom zmiennych i funkcji możesz zrezygnować z komentarzy - patrz funkcja zmierz_odleglosc(). Niedawno pojawił się na forum artykuł o pisaniu czystego kodu, możesz na niego zerknąć 🙂 

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

 Powiem inaczej: skracanie kodu nie polega na usuwaniu spacji (bo to tak, jakbyś z książki chciał usunąć myślniki i znaki nowej linii, co byłoby pewnie szczególnie przydatne przy dialogach), ale na zastępowaniu jakichś długaśnych konstrukcji prostszymi, krótszymi i bardziej czytelnymi. Oto przykład:

13 godzin temu, Slowik napisał:

if (odleglosc < (i * mnoznik)) digitalWrite(i, HIGH); // to wyjasnione ponizej poniewaz komentarz bylby zbyt dlugi :D
else digitalWrite(i, LOW);

 

Bez usuwania znaków nowej linii i wiodących spacji byłoby to:

if (odleglosc < (i * mnoznik))
  digitalWrite(i, HIGH); // to wyjasnione ponizej poniewaz komentarz bylby zbyt dlugi :D 
else
  digitalWrite(i, LOW);

Trochę czytelniejsze, prawda? Zapoznaj się z programami typu indent czy clang-format, one potrafią skrócić zapis nie tracąc czytelności.

Ale rozumiem, że chcesz to koniecznie i bezwarunkowo skrócić. Proszę bardzo:

digitalWrite(i, odległość < i * mnożnik);

Wypadł jeden if, z dwóch instrukcji zrobiła się jedna, a czytelność nawet większa[1]. To jest skracanie kodu. To, co pokazałeś, to nie jest skracanie kodu (bo kod przecież się nie zmienia, zmienia się tylko jego zapis z czytelnego na nieczytelny).

Aha, sensowności takiego czegoś nie komentuję. Nie ma o czym mówić.

---

[1] pod warunkiem że wie się o C/C++ trochę więcej niż po przeczytaniu pierwszego rozdziału podręcznika

Edytowano przez ethanak
  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

@Gieneq @ethanak Dziękuję za uwagi i rady 🙂 

Jeśli chodzi o "skracanie kodu" to nie miałem na myśli usuwania jakichkolwiek spacji (chociaż w mojej opinii zapis jednolinijkowy jest bardziej czytelny niż ze wcięciami, jak się scrolluje bardzo długi kod, to można więcej objąć wzrokiem). Raczej o coś jak zrezygnowanie z kilkudziesięciolinijkowej instrukcji switch lub if/else w której każda dioda jest opisana osobno. Albo możliwość regulacji czułości układu za pomocą jednej zmiennej, czy też możliwość dodawania/odejmowania diod, również w jednej zmiennej. Nie wiem skąd pojawił się szalony pomysł, że chodzi o usuwanie spacji, ale mimo wszystko dzięki za podsunięcie pomysłu na tą linijkę: 

digitalWrite(i, odległość < i * mnożnik);

To upraszcza kod jeszcze bardziej 🙂 

Dodam, że przejrzałem cały temat i nie znalazłem rozwiązania podobnego do tego które zaproponowałem, dlatego też opublikowałem wcześniejszy post. Zaznaczyłem również, że zdaję sobie sprawę, że nadmierne 'skracanie' kodu może powodować utrudnienia w czytelności. Żeby nikt niepotrzebnie się nie denerwował, następnym razem zanim wrzucę jakiś kod to postaram przeczytać chociaż 2 rozdziały z podręcznika o C/C++😎

 

Cytat
11 godzin temu, Gieneq napisał:

wyrzuć tzw. magiczne liczby i zastąp je dyrektywami preprocesora #define na górze kodu

 

Co mam rozumieć poprzez magiczne liczby? Chodzi o to, żeby zastąpić numery pinów dla echo i trigger dyrektywami preprocesora? 

PS Komentarze dodawałem tylko i wyłącznie dlatego, że na tym forum spotykałem się z opinią, że kod należy komentować nawet kiedy piszemy na własne potrzeby (o ile pamiętam w którejś lekcji z kursu jest taka uwaga). Mnie uczono, że kod ma być samokomentujący się a komentarze tylko w przypadku jakichś egde-case.

Udostępnij ten post


Link to post
Share on other sites
36 minut temu, Slowik napisał:

w mojej opinii zapis jednolinijkowy jest bardziej czytelny niż ze wcięciami

if (a) fun1(); else if (b) {if (c) fun2(); else fun3()} else fun4();

Co o tym sądzisz?

38 minut temu, Slowik napisał:

jak się scrolluje bardzo długi kod, to można więcej objąć wzrokiem

Jak się skroluje kod który ma np. 1000 linii to i tak całego wzrokiem nie obejmiesz, a zaręczam że 1000 linii to wcale nie jest tak dużo.

Przerabiałem kiedyś kod (w sumie kilka tysięcy linii) pisany przez niewidomego, który co prawda wszystko pięknie umieszczał w oddzielnych linijkach, ale nie wpadł na to żeby robić wcięcia (choć to trochę dziwne, zarówno brajlowski monitor jak i gadacz czytają poziom wcięć). Niestety - bez użycia indenta się nie obeszło...

A co do komentarzy - nie chodzi tu o jakieś komentowanie każdej linii, ale raczej o napisanie czegoś w stylu "a to jest po to". Rozumiem, że bez problemu za pięć lat będziesz wiedział, co robi linia 4276 w Twoim pisanym dzisiaj kodzie nawet i bez komentarza... ale zastanów się, czy na 100% będziesz pamiętał po kiego grzyba ją tam wsadziłeś i co, do ciężkiej cholewy, robi ta funkcja... 🙂

 

Udostępnij ten post


Link to post
Share on other sites
42 minuty temu, ethanak napisał:

Co o tym sądzisz?

To już popadanie w skrajność 🙂 Prawie klasyfikuje się do udziału w IOCCC 😁 

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...