TDP004 Objektorienterad programmering
Laborationer
Den här sidan innehåller kortfattade rekommendationer för hur din C++-kod skall se ut. Om du inte följer någon utförligare stilguide måste du följa dessa riktlinjer. Att använda god programmeringsstil är viktigt för att underlätta läsning av koden. Fundera på vad du tycker är tydligast när du skriver kod, och jämför med vad som sägs i t.ex. Code complete. Fundera även på vem som spenderar mest tid på att läsa din kod, och vem som alltså vinner mest på att den hela tiden hålls organiserad och lättläst. (Tips: Det är inte din assistent.)
Inkluderingsfiler
Preprocessorkommandot för inkludering skall följas av exakt ett blanksteg. Alla inkluderingar skall finnas först i filen. Standardbibliotek inkluderas med <> tecken, medan egna filer inkluderas med dubbelcitattecken. Använd tomma rader för att gruppera olika typer av inkluderingar.
Bra exampel | Dåligt exampel |
---|---|
#include <iostream> #include <iomanip> #include "my_class.h" using namespace std; |
#include"iostream" #include<my_class.h> #include<iomanip> using namespace std; |
Uttryck
Uttryck skrivs med enkla blanksteg runt operatorer. I vissa lägen är det tydligare att skriva ihop en beräkning, eller gruppera med parenteser.
Bra exempel | Dåligt exempel |
---|---|
velocity = distance / time; f = a*x*x + b*x + c; |
velocity=distance/time; f=a * x*x+b *x+c; |
Använd parenteser så fort prioriteten eller associativiteten är oklar.
Bra exempel | Dåligt exempel |
---|---|
return ((a || b) && (c || d)); |
return a||b&&c||d; |
Bryt upp långa rader på lämpliga ställen eller dela upp i två uttryck. En extra omgivande parentes hjälper till med indenteringen om uttrycket radbryts.
Bra exempel |
---|
cout << "value of a = " << a << "value of b = " << b << "value of c = " << c << endl; return ((adrian_is_home || bertram_is_at_work) && (ceasar_is_empereor || david_beat_goliat)); bool home_or_work_test { adrian_is_home || bertram_is_at_work }; bool power_test { ceasar_is_empereor || david_beat_goliat }; return home_or_work_test && power_test; |
Dåligt exempel |
---|
cout<<"value of a = "<<a<<"value of b = "<<b<<"value of c = "<<c<<endl; return ((adrian_is_home||bertram_is_at_work)&&( ceasar_is_empereor||david_beat_goliat)); return adrian_is_home||bertram_is_at_work&&ceasar_is_empereor||david_beat_goliat; |
Satser och block
Krullparentes ("måsvinge") skrivs alltid på egen rad. Krullparentserna indenteras inte, medan koden inuti ett krullparentesblock alltid indenteras. Använd ett blanksteg mellan satsers nyckelord ("if", "for", "while") och startparentes.
Bra exempel | Dåligt exempel |
---|---|
int sum {}; for (int i {}; i < stop; ++i) { sum = secret_value[i]; } while (!last()) { next(); } int positive {-1}; do { cout << "enter a positive value "; cin >> positive; } while (positive < 0); int main() { string selection; while ( cin >> selection ) { if (selection == "one") { do_one(); } else if (selection == "two") { do_two(); } else if (selection == "quit") { char confirm; cin >> confirm; if (confirm == 'Y' || confirm == 'Y') { return 0; } } else { do_others(); } } return 0; } |
int sum{};for (int i{};i<stop;++i)sum=secret_value[i]; while(!last()) { next(); } int positive{-1}; do{cout<<"enter a positive value "; cin >> positive; } while (positive < 0); int main(){ string selection; while(cin>>selection) { if(selection=="one")do_one(); else if(selection=="two"){do_two();} else if(selection=="quit"){ char confirm; cin >> confirm; if (confirm == 'Y' || confirm == 'Y') { return 0;}}else {do_others();}} return 0; } |
Identifierare
Använd beskrivande namn på funktioner och variabler. Bra kod går nästan läsa som poesi. Tumregeln är att längre är bättre än kortare, och begripligt namn bättre än obegripligt. Emacs har funktionalitet för att autoexpandera variabelnamn (M-/), och funktionalitet för att byta ett ord mot ett annat (M-%). Det finns alltså inga ursäkter.
Konstanter
Konstanta variabler döps med enbart VERSALER. Olika ord i namnet separeras med understreck.
Bra exempel | Dåligt exempel |
---|---|
int const SIZE_OF_APPLE_ARRAY {4711}; |
const int aplesiz{4711}; |
Lokala variabler
Lokala variabler döps med enbart gemener. Olika ord i namnet separeras med understreck.
Bra exempel | Dåligt exempel |
---|---|
int speed_of_car {90}; // km/h |
int spEEdYCar{90}; |
Globala variabler
Globala variabler leder till svårhanterlig kod och är strikt förbjudna. Det blir i längden omöjligt att hålla reda på vilka delar av koden som använder en global variabel. De programfel som tids nog oundvikligen uppstår kräver oftast att all kod modifieras för att ta in parametrar istället. Gör rätt direkt, och använd parametrar. Globala konstanter är dock tillåtna (varför?).
Parametrar
Parametrar döps med enbart gemener. Olika ord i namnet separeras med understreck. Använd aldrig variabler med samma namn som en parameter.
Bra exempel | Dåligt exempel |
---|---|
int example(int parameter_one, int parameter_two); |
int example(int P, int Q); |
Funktioner
Funktionsnamn skrivs med enbart gemener. Olika ord i namnet separeras med understreck.
Bra exempel | Dåligt exempel |
---|---|
double radians_to_degrees(double radians) { return radians * 360.0 / (2 * PI); } |
double r2d2(double R) { return R*180/PI; } |
Klasser
Klasser skrivs med versal inledningsbokstav i varje ord i namnet. Varje ord i namnet separeras med understreck.
Bra exempel | Dåligt exempel |
---|---|
class Infix_To_Postfix; |
class infixpostfix; |
Sidansvarig: Eric Ekström
Senast uppdaterad: 2024-10-23