Od liceum nauczono mnie, że definiowanie zmiennych takich jak to:
int _a;
lub
int __a;
należy uznać za złą praktykę, ponieważ w końcu łamigłówki kompilatory wykorzystujące zmienne zaczynające się od znaku podkreślenia do nazwania zmiennych tymczasowych.
O ile wiem, jest to powód, dla którego niektórzy lubią przenosić podkreślenie na końcu nazwy, na przykład:
int a_;
Widzę jednak dużo kodu, który wykorzystuje zmienne początkowe podkreślenia. Ten kod buduje się całkiem dobrze zarówno w Visual Studio 2010, jak i g ++ 4.x.
Zastanawiam się: czy obecnie nie jest to problem? Czy nowoczesne kompilatory są mądrzejsze od konwencji nazewnictwa?
c++
programming-practices
naming-standards
Emiliano
źródło
źródło
Odpowiedzi:
Najwyraźniej nie rozumiesz, dlaczego podkreślenia przedrostków są złą praktyką. Krótko mówiąc, dzieje się tak, ponieważ standard C i C ++ rezerwują te prefiksy dla szczegółów implementacji, na przykład dla standardowej implementacji biblioteki. (zauważ, że _ i __ nie są zarezerwowane na te same rzeczy, patrz komentarze)
Nawet jeśli nazwy są objęte zakresem (przestrzeń nazw, klasa itp.), Mogą istnieć pewne nazwy globalne, w szczególności makra, które używają tych prefiksów i mogą po cichu uszkodzić kod, jeśli je również użyjesz.
Zasadniczo więc przez większość czasu można bezpiecznie używać tych prefiksów, ALE jeśli ich nie użyjesz, masz 100% gwarancji, że twoja nazwa nigdy nie będzie kolidować z nazwami implementacji.
Dlatego w razie wątpliwości nie używaj tych prefiksów.
źródło
_limit
nie jest błędem, ale jest funkcją globalną. Myślę, że lepiej jest mieć prostą zasadę, która mówi „nie używaj wiodących znaków podkreślenia bez wyjątku” niż zasadę, która pozwala im w niektórych kontekstach, a nie w innych. Ale możemy zgodzić się na to. I dla jasności, nie mam problemów z podkreśleniami w innych miejscach niż na samym początku.Korzystanie z dwóch znaków podkreślenia jest zdecydowanie złe - jest to zarezerwowane dla szczegółów implementacyjnych specyficznych dla kompilatora. Nie dotyczy to użycia jednego podkreślenia.
Niektóre osoby nie znoszą podkreśleń. Bez względu na to, czy dzwonisz,
m_index
czyhighest_price
też_a
- oni tego nie znoszą. Pracowałem z kimś 25 lat temu, który powiedział mi o konkretnej drukarce IBM (bardzo popularnej), która mieści więcej linii na stronie, pomijając dolny piksel w każdej innej linii. Było to dobre w przypadku notatek lub wyników z dużej liczby liczb i tym podobnych, ale miało wpływ na kod powodujący, że połowa twoich znaków podkreślenia była niewidoczna. (Tak, naprawdę!) Ludzie z tego pokolenia mają na ogół irracjonalną nienawiść do podkreślania, albo przez interakcję z tą drukarką, albo przez pracę z kimś, kto się w nią wkurza, że podkreślenia nie powinny być używane.Większość osób uważa, stosując mieszane sprawy (opcja nie mieliśmy w, powiedzmy, Fortran) bardziej czytelny podejście:
mIndex
,HighestPrice
,a
wstać dość dobrze do wcześniej podkreślonego przykładów. Dam ci dwie zasady:_limit
dla parametrów funkcji,m_limit
dla zmiennych składowych, nigdy nie używaj podkreślenia, wielbłąda, wielkie litery każdego słowa, węgierski, coś ) i trzymaj się tego. Nie przejmuj się czasami podkreśleniami na początku, czasem na końcu, czasem ich nie używaj i pięcioma różnymi konwencjami obudów. Bądź konsekwentny.Ta drukarka już dawno zniknęła. Jeśli chcesz użyć jednego podkreślenia na raz, nie krępuj się. Ale zrozum, nienawiści podkreślające wciąż istnieją.
źródło