dlaczego nawiasy klamrowe nie sa w tej samej kolumnie ? Pierwszy kontakt z cpplint

0

Jestem po wstępnej analizie
C++ Coding Style
oraz
Google C++ Style Guide
zintegrowałem sobie z IDE cpplint aby sprawdzić mój styl i wychodzi na to że 50% linii jest do poprawy

sporo uwag jest do nawiasów klamrowych

W pascalu zawsze blok kodu, człowiek nawet się nie zastanawia to jest jak odruch

begin
end

wszystko w tej samej kolumnie

wiec w c++ piszę podobnie

int myFun(int i)
{
  return 0;
}

wszystkie podręczniki stylu jednak zalecają

int myFun(int i){
  return 0;
}

Ale nie tłumaczą dlaczego

Nie wnikać przyjąć że tak musi być czy jest jakieś racjonalne wytłumaczenie ?

6

Ale nie tłumaczą dlaczego

Nie rozumiem. Taka konwencja. Tylko tyle i az tyle. Powodu nie ma. Ani za jednym ani za drugim. Obie wersje sie kompiluja. Chyba tylko w C# konwencja jest taka jak bys Ty oczekiwal.

3
Adamek Adam napisał(a):

zintegrowałem sobie z IDE cpplint aby sprawdzić mój styl i wychodzi na to że 50% linii jest do poprawy

W takim razie masz niespójną konwencję ;)
Ja osobiście używam tej samej konwencji, tj otwierający nawias w nowej linii, z tym samym wcięciem co zamykający.

Jest to po prostu jedna z wielu konwencji https://en.wikipedia.org/wiki/Indentation_style
Tak naprawdę to jest to rzecz gustu, ewentualnie przy pracy zespołowej trzymania się jednego wybranego/narzuconego stylu.

Jeśli wygodniej Tobie jest robić tak, to rób i już.

4

wszystkie podręczniki stylu jednak zalecają

Bo tak jest sensowniej - klamrę zamykającą masz na równi z deklaracją funkcji. W końcu - ta klamra zamyka funkcję, więc jest to logiczne. I nie tracisz całej linii na jeden znak. Dla mnie taki zapis jest o wiele sensowniejszy. Oczywiście - zaraz się znajdą tacy, którzy będą twierdzić, ze klamra powinna być w osobnej linii, pod int myFun(int i) - ale to są źli ludzie, nie słuchaj ich ;)

Poza tym - jak pisali przedmówcy, to jest tylko kwestia estetyki, skompiluje się nawet jakbyś napisał

int myFun(int i) {   return 0; }

Ważne jest to, żeby po pierwsze wybrać sobie jakiś jeden standard formatowania i jego się trzymać, a po drugie - jakbyś pracował grupowo, to żeby wszyscy artyści z Tobą tworzący mieli jeden standard uzgodniony i się jego trzymali. W każdym razie - C++ to nie Pajton i tutaj wcięcia czy inne formatowanie nie ma żadnego znaczenia, jedynie to kwestia estetyki i czytelności kodu.

2

Decyzja o umieszczeniu klamry w nowej linii należy do piszącego kod. Kompilator skompiluje obie wersje. Można wybrać wedle uznania.
Mam tu jednak ważną uwagę. Do tego, co pisały ludki (i szczurek ;) ) wyżej dodam, że można w pracy trafić do zespołu, który używa automatycznego formatowania w IDE. Chodzi w tym o to, żeby w Gitlabie nie było diffa z pierdyliardem zmian tylko dlatego, że jeden miś chce mieć klamrę tu a drugi tam. Pół biedy jeśli IDE sformatuje kod przy zapisie. Gorzej, jeśli ja mam w swoim IDE po swojemu a wtyczkę trzeba odpalić ręcznie (skrótem). Wtedy mogę wepchnąć zmiany z moim stylem. To trochę słabe. Skoro ustalamy z zespołem, że robimy tak samo, to róbmy. a jeśli nie chcemy, to powiedzmy na spotkaniu zamiast robić podchody.
Podsumowując: styl pisania kodu to tylko umowa. Jeśli jest czytelny dla autora i dla innych, to ok.

2

Bo tak jest czytelniej.

void funkcja(int a)
{ //co to za przerwa? do czego ona ma sluzyc, przeciez wiem ze zaczyna sie funkcja
  return 0;
}
void funkcja(int a){
  return 0;
}
//wszystko ladnie wyglada, robimy wciecia pokazujace zakres

Najwidoczniej więcej jest ludzi dla których opcja nr 2 jest czytelniejsza. Subiektywna opinia, ale wyobraz sobie pseudokod ktory tak wyglada:

funkcja czy_parzysta(n):

  jeśli n % 2 == 1:
    zwroc 0
  w przeciwnym razie:
    zwroc 1

ta przerwa tylko pogarsza czytelność

1

Sam w Pascalu zaczynałem i begin-end drażni mnie ogólnie, bo jest przegadane i nic nie wnosi do kodu imho.

A w temacie: pisz jak chcesz, byle spójnie.

Różne style widziałem, obecnie w pracy mam a'la C# czyli:

if (x)
{
  doStuff();
}

Sam wolę

if (x) {
  doStuff();
}

A to można jeszcze bardziej podzielić np.:

namespace x
{ //enter po ns
class C
{ //enter po nazwie klasy
  int f() const;
};

inline int [[nodiscard]]
C::f() const 
{ //funkcja od nowej
  if (sth) {
    //instrukcje sterujące już nie
  }
}

}

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