Jak nie gubić się w nawiasach?

0

Witam! Chciałbym zadać pytanie, jak nie gubić się w nawiasach? Dzisiaj kiedy miałem wywołać swoją funkcję przyjmującą const char* i enum, to mi się chciało płakać. Kilka różnych funkcji...

if(!LoadFromFile(Stc(SetDir(getenv("USERPROFILE"),"\\AppData\\Csl\\config.ini")),cPath)){

    }

Na początku strasznie się w tym gubiłem :/. Po trzecim razie pykło. Jak nie gubić się w nawiasach?

6

Może wprowadzaj dodatkowe zmienne dla tych funkcji "wewnętrznych".

8
// źle:
if (foo(bar(zar(x), 1), SOME_EX)) {
  /* ... */
}

// dobrze:
let something = zar(x);
let somethingElse = bar(something, 1);

if (foo(somethingElse, SOME_EX)) {
  /* ... */
}

Przy czym nazwy zmiennych powinny być oczywiście sensowne ;-)

Wydzielenie trzeciej zmiennej również nie zaszkodzi, jeśli kod okaże się dzięki temu czytelniejszy.

3
PrezesiQ napisał(a):

Jak nie gubić się w nawiasach?

Nie pisać w Notatniku tylko w czymś, co potrafi pogrubić (podświetlić, pokolorować…) nawias przeciwny do tego na którym stoi kursor.

a.png

1
PrezesiQ napisał(a):

Witam! Chciałbym zadać pytanie, jak nie gubić się w nawiasach? Dzisiaj kiedy miałem wywołać swoją funkcję przyjmującą const char* i enum, to mi się chciało płakać. Kilka różnych funkcji...

if(!LoadFromFile(Stc(SetDir(getenv("USERPROFILE"),"\\AppData\\Csl\\config.ini")),cPath)){

    }

Na początku strasznie się w tym gubiłem :/. Po trzecim razie pykło. Jak nie gubić się w nawiasach?

Jak jest dużo nawiasów, to pisz tak:

if(
    !LoadFromFile(
        Stc(
            SetDir(
                getenv("USERPROFILE"),
                "\\AppData\\Csl\\config.ini"
            )
        ),
        cPath
    )
)
    {

    }

-- trochę dużo linijek, ale w miarę widać...

1

https://github.com/kien/rainbow_parentheses.vim
Albo podobne dla innego edytora. :D

0

Na ogół stosuję wcięcia

if(!LoadFromFile(
    Stc( SetDir(
        getenv("USERPROFILE"),"\\AppData\\Csl\\config.ini"
     )),cPath
)

Poza tym wydzielanie funkcji i zmiennych. To indywidualna kwestia czego użyć.
Na koniec, podświetlanie nawiasów w edytorze.

2
auto dir = SetDir(getenv("USERPROFILE"), "\\AppData\\Csl\\config.ini");
if (!LoadFromFile(Stc(dir), cPath))
{

}
0

ja mam plugina, że podświetla nie tylko nawiasy, ale i linie z numerem i znakiem danego nawiasu przy nim, więc od razu widzisz przewijając

0

Ja mam prostą metodę na to – unikać nawiasów. ;)

Po pierwsze, nie budować złożonych instrukcji i nie oszczędzać przesadnie na lokalnych zmiennych. Jeśli jakaś funkcja potrzebuje danych z kilku innych funkcji, to używam zmiennych lokalnych, tak aby do końcowej funkcji przekazać wyłącznie zmienne. Na koniec i tak czytam kod i oceniam jego czytelność. Jeśli coś jest choć trochę nieczytelne to to wydzielam, deklaruję dedykowaną zmienną i do niej wrzucam rezultat. Dany fragment musi być czytelny i łatwy do analizy (oraz debugowania).

Druga sprawa to rzutowanie, które też tworzy kolejne pary nawiasów. Często widzę fragmenty kodów, w których ta sama zmienna rzutowana jest na inny typ wielokrotnie. W takich przypadkach też warto wykonać rzutowanie raz i zapamiętać finalne dane w dodatkowej zmiennej.

Trzecia sprawa to unikanie nawiasów w najróżniejszych wyrażeniach. Znając kolejność wykonywania działań oraz priorytety operatorów, łatwo można pozbyć się ich nadmiaru. Niektóre projekty (a raczej główni autorzy tych projektów czy po prostu osoby decyzyjne) narzucają konieczność zapisu nawiasów, ze względu na bezpieczeństwo – to już inna sprawa. Takim przykładem jest SFML.

Jeśli o wspomagacze chodzi to każde normalne IDE posiada funkcję kolorowania par nawiasów. Jeśli Twoje nie posiada to je zmień, bo nawet Notepad++ potrafi takie rzeczy robić. I nie ma co też w przypadku nieczytelnego kodu zwalać winę na narzędzia – pisanie ładnego kodu to kwestia praktyki, więc wszystko przyjdzie z czasem (trzeba tylko chcieć). Doświadczony programista pisze kod, który można go bez problemu zrozumieć nawet bez kolorowania składni i innych wodotrysków.

0

Nikt tu nie udzielił poprawnej odpowiedzi, serio?

Trzy słowa: wydzielić poziomy abstrakcji:

if (!LoadFromFile(getConfigPath(), cPath)) {
 
}

string getConfigPath() {
  return Stc(setConfigPath());
}

string setConfigPath() {
    return SetDir(getUserProfilePath(), "\\AppData\\Csl\\config.ini");
}

string getUserProfilePath() {
  return getenv("USERPROFILE");
}
1

Sprawa już wyjaśniona, ale takie cebulowe zamykanie funkcji w funkcji (((()))) jest uczynione znacząco czytelniejszym np. w D

if(!LoadFromFile(Stc(SetDir(getenv("USERPROFILE"),"\\AppData\\Csl\\config.ini")),cPath)){
 
    }
if(!getenv("USERPROFILE")
    .SetDir("\\AppData\\Csl\\config.ini")
    .Stc()
    .LoadFromFile(cPath)) {
 
}
2

ja odkąd zacząłem się bawić lispem nie widze nawiasów tylko wcięcia

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