• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pierwsze kroki - przejrzystość kodu C++

+1 głos
452 wizyt
pytanie zadane 17 lipca 2020 w C i C++ przez ten_tomek Nowicjusz (160 p.)

Dzień dobry,

Zaczynam przygodę z programowaniem i zacząłem od filmów z serii C++, staram się sam pisać kod a potem sprawdzać poprawność z kodem z filmu. Słyszałem, że ważne jest aby kod był możliwie jak najbardziej przejrzysty i tutaj pojawia się moje pytanie - czym właściwie jest "możliwie jak najbardziej czysty kod". Poniżej są dwa bloczki kodu, pierwszy mój, drugi z filmu. Mój jest krótszy jeśli chodzi o ilość linii, ale zależności "if" są u mnie dłuższe, w drugim kodzie źródłowym jest odwrotnie. 
Problem raczej błahy ale chciałbym wiedzieć która wersja jest bardziej odpowiednia, żeby już na starcie zacząć myśleć w jak najbardziej optymalny sposób.

#include <iostream>

using namespace std;

int wiek ;

int main()
{
    cout << "Podaj swoj wiek:" ;
    cin >> wiek ;

    if ((wiek>=18) && (wiek>=35))
    {
        cout << "Jestes pelnoletni i mozesz startowac na prezydenta!" ;
    }
    if ((wiek>=18) && (wiek<35))
    {
        cout << "Jestes pelnoletni ale nie mozesz startowac na prezydenta!" ;
    }
    if (wiek<18)
    {
        cout << "Nie masz ukonczonych 18 lat" ;
    }

    return 0;
}
#include <iostream>

using namespace std;

int wiek ;

int main()
{
    cout << "Ile masz lat?" ;
    cin >> wiek ;

    if (wiek>=18)
    {
        cout << "Jestes pelnoletni" ;
    }
    else
    {
        cout << "Jestes niepelnoletni" ;
    }
    if (wiek>=35)
    {
        cout << endl << "Mozesz startowac na prezydenta" ;
    }
    else
    {
        cout << endl << "Nie mozesz startowac na prezydenta" ;
    }

    return 0;
}

Z góry bardzo dziękuję za pomoc smiley

Pozdrawiam,
Tomek

1 odpowiedź

+2 głosów
odpowiedź 17 lipca 2020 przez tangarr Mędrzec (155,140 p.)

Zaproponowałbym jeszcze troszkę inne rozwiązanie.

#include <iostream>
 
using namespace std;
 
int wiek ;
 
int main()
{
    cout << "Podaj swoj wiek:" ;
    cin >> wiek ;

    if (wiek<18) {
        cout << "Nie masz ukonczonych 18 lat" ;
    }
    else if (wiek < 35) {
         cout << "Jestes pelnoletni ale nie mozesz startowac na prezydenta!" ;
    }
    else {
        cout << "Jestes pelnoletni i mozesz startowac na prezydenta!" ;
    }
 
    return 0;
}

Tak na prawdę przy takiej ilości kodu wszystkie trzy rozwiązania są tak samo czytelne.
Jeżeli chcesz uzyskać czytelny kod to skup się na:
1. Nazywaniu funkcji i zmiennych w taki sposób, żeby inny programista domyślił się ich znaczenia bez wnikliwego analizowania kodu
2. Unikaniu powtarzania kodu. Zamiast wielokrotnego wklejania takiego samego lub podobnego kodu wyodrębnij część wspólną do osobnej funkcji.
3. Staraj się aby funkcje nie były zbyt długie i nie miały wielokrotnych zagłębień

komentarz 18 lipca 2020 przez ten_tomek Nowicjusz (160 p.)
Super, bardzo Ci dziękuję. Teraz już wiem na co zwracać uwagę :)
komentarz 18 lipca 2020 przez Oscar Nałogowiec (29,420 p.)

@tangarr,
 Przesunałbym też deklaracje zmiennej do wnętrza main (jako lokalna a nie globalna).

Zastanawiam się też na konstrukcją:

    if ((wiek>=18) && (wiek>=35))

Z punktu widzenia logiki pierwszy warunek jest zbędny - drugi warunek jest po prostu węższy, jak jest spełniony to i ten pierwszy jest spełniony. Kompilator może dać ostrzeżenie.

Jednak rozumiem, że są to dwa warunki na dwie niezależne od siebie okoliczności i to że jeden przykrywa drugi to przypadek. Więc taki zapis jak wyżej jest czytelniejszy - jednak to ewentualne ostrzeżenie... Niektórzy nie lubą jak kompilacja kodu daje ostrzeżenia.

Drogą kompromisu, by kompilator był syty i czytelność zachowana,  napisałbym tak:

 

    if ( /*  (wiek>=18) && */ (wiek>=35))

Albo (chyba lepiej) rozbiłbym to na zagnieżdzone 2 if/else oddzielnie na oba warunki.

Skomplikowane wyrażenia są jedną z głównych 'nieczytelności' w programach.

 

Podobne pytania

+1 głos
1 odpowiedź 542 wizyt
pytanie zadane 27 lipca 2022 w Java przez michal441599 Użytkownik (530 p.)
0 głosów
1 odpowiedź 452 wizyt
pytanie zadane 26 marca 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
2 odpowiedzi 728 wizyt

93,743 zapytań

142,683 odpowiedzi

323,300 komentarzy

63,330 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...