Czy w C ++ jest złą praktyką tworzenie bloków kodu wewnątrz niektórych funkcji, takich jak:
bool f()
{
{
double test = 0;
test = // some other variable outside this function, for example.
if (test == // some value)
return true;
}
{
double test = 0;
test = // some variable outside this function, different from the last one.
if (test == // some value)
return true;
}
return false;
}
Chodzi o to, aby użyć tej samej nazwy zmiennej „test” wiele razy, dla tego samego rodzaju procedury. W moim projekcie mam wiele zmiennych i wykonuję wiele testów. Naprawdę nie chcę ciągle tworzyć nowych zmiennych o różnych nazwach dla każdego testu, biorąc pod uwagę, jak testy są tak podobne.
Czy złą praktyką jest wstawianie bloków kodu, aby zmienne wykraczały poza zakres po każdym teście, a następnie mógłbym ponownie użyć ich nazw? Czy powinienem szukać innego rozwiązania? Należy zauważyć, że rozważałem użycie tego samego zestawu zmiennych dla wszystkich moich testów (i po prostu ustawienie ich wszystkich na 0 po zakończeniu każdego testu), ale miałem wrażenie, że może to być złą praktyką.
źródło
Odpowiedzi:
Bloki są całkowicie uzasadnione, jeśli używasz ich do określania zasięgu niektórych zasobów. Pliki, połączenia sieciowe, przydziały pamięci, transakcje w bazie danych, cokolwiek. W takich przypadkach blok jest faktycznie częścią logicznej struktury kodu: spawnujesz zasób, istnieje on przez pewien czas, a następnie znika w wyznaczonym czasie.
Ale jeśli wszystko, co robisz, to wybieranie nazwy , to powiedziałbym, że to zła praktyka. Ogólnie rzecz biorąc, oczywiście; mogą mieć zastosowanie specjalne okoliczności.
Na przykład, jeśli funkcja ta została wygenerowana przez jakiś system generowania kodu, środowisko testowe lub tym podobne, to rozsądne jest stosowanie bloków ze względu na zakres nazw. Ale mówisz o kodzie napisanym na potrzeby maszyny, a nie człowieka.
Jeśli człowiek pisze kod, w którym musi ponownie użyć nazw w ramach tej samej funkcji, powiedziałbym, że te bloki prawdopodobnie muszą być osobnymi funkcjami. Zwłaszcza jeśli te nazwy są używane z różnymi typami i / lub znaczeniami w tych blokach.
źródło
Tworzenie takich bloków nie jest złą praktyką. Tak działają lunety.
Zwykle odbywa się to podczas korzystania z RAII (Pozyskiwanie zasobów to inicjalizacja) i chcesz kontrolować, kiedy wywoływane są destruktory.
Jeśli będzie długo, rozważę przeniesienie tego kodu do jego własnej funkcji.
Moim zdaniem samo użycie go do recyklingu nazw zmiennych nie jest dobrym pomysłem. Ale widzę, że przydało się to w przypadkach o niskiej pamięci
źródło