Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: novomente 14. 07. 2020, 16:27:08
-
Narazil jsem na dost "triviální problém", který mi znemožňuje dobře chápat zdrojový kód programu. Tento problém je, jak bych měl lingvisticky číst zdroják. Tak např. v jazyce C mám následující program:
int main()
{
#define MAX 1000
int i;
int a, b;
int pole[MAX];
for(i = 0; i < MAX; i++) {
pole[i] = a + b;
}
}
Zdroják je sice neúplný a tudíž funkčně neužitečný, ale jde mi jen o způsob čtení.
Takže takový to zdrojový kód čtu následovně:
"intýdžr mein
difajn MAX tisíc
intýdžr i
intýdžr a a b
intýdžr pole pole o velikosti MAX
for i rovná se 0, dokud i je menší než MAX, i plus plus
pole i rovná se a plus b"
Takhle nějak to čtu, a vím, že to není moc dobré. Chtěl jsem se zeptat, jestli někde existuje nějaký popis, jak lingvisticky číst zdroják? Vím, že je to vysoce individuální záležitost, jak to kdo čte. A tak by mě také zajímalo, jak to čtete vy?
-
Z toho důvodu se obvykle české (ne-anglické) názvy proměnných nepoužívají. Blbě se to čte, když tam nezbytně část slov anglicky být musí.
Celý program jsem recitovat potřebu neměl nikdy, interní monolog probíhá v jazyce nevyslovitelném (takový verbální těsnopis), ale když např. kolegovi popisuji nějakou konkrétní část, nevzdaluji se moc od psané litery - takže skutečně něco jako "define max one thousand, int eye, int aye, bee, ..." aby to v tom textu rychle našel i člověk, který třeba nemá tu intuici a znalost jazyka na takové úrovni.
Vyšší konstrukty jako třeba signaturu funkce bych nečetl fakt nikdy. Je to prostě funkce main, beztak tam jiná není neb C nepřetěžuje :-)
-
A pak ze programovani nepotrebuje zadny talent :)
Moje (vnitrni) cteni onoho kousku je asi takto:
funkce Main
MAX neceho bude 1000
cislo i (index?), taky nejake a,b
pole cisel velikosti MAX
cyklus pres vsechny prvky pole ukladajici soucet a b do aktualne iterovaneho
u casti "soucet a b" se jiz zaroven mracim pac maj nedefinovany hodnoty :)
Kdyz se totiz divam na kod, tak v tom nevidim jen pouhy textovy soubor, ale mozek me interpretuje to co vidim rovnou jako neco, co ten kod je. Typovani neprikladam vahu (to tak uz je, a taky momentalne pouzivam casteji netypovane skripty), za to pod nazvy symbolickych konstant a promennych potrebuji videt smysl, k cemu budou slouzit. A,B je slaby, pole je fajn. Doporucuji se mrknout na Madarskou notaci, kdyz chcete k tomu formalni teorii.
Je to stejny jako ze nectete root.cz jako eR ou ou Tee tecka cee zet, ale jako RuutCeeZet, a u toho zaroven uz tusite, ze root je buh!
-
Pokud je dotaz míněný vážně, tak já popisuju, co program dělá. Nejčastěji v druhé osobě: „Vezmeš pole čísel a pro každý prvek ...“ atd. Takže popisuju funkční bloky a jejich smysl, detaily někdy vypouštím. Někdy se to dá číst jako kuchařka: „Vezmi pole a vraž do něj čísla od jedný do stovky, pak upeč továrnu na bla bla a...“. Důležité je udržet pozornost, expresivní výrazy někdy pomůžou :D
-
Rozhodně program takhle nečtu. Nejprve ten kód jenom proskenuju – je to celé jedna funkce main, takže vstupní bod programu, pak divně nadefinovaná konstanta, nad tím se zaseknu a budu dumat nad tím, proč právě takhle a jestli mi v syntaxi C něco neuniká, přeci jen v C nepíšu. Pak jsou tam nějaké deklarace a pak hlavní tělo kódu. Deklarace zatím přeskočím, obvykle jsou nezajímavé. Hlavní kód je tělo od nuly do MAX, plní postupně pole součtem čísel a a b. teď se začnu shánět po tom, kde se a a b berou, takže se vrátím až k té deklaraci.
Takže vůbec nečtu ten text, který je tam napsaný, ale rovnou to čtu podle významu. A nečtu to lineárně, ale po větších strukturách, a teprve když mne nějaká část zajímá, jdu „dovnitř“.
-
"V main funkci, mám konstantu MAX. Připravím si proměnné. Projdu v cyklu od nuly do MAX, a do každého prvku pole přidám součet a a b. Hej, kde jsem získal hodnoty a a b?!"
V druhé kole zkouknu typy, případně hodnoty konstant.
Ve třetím kole zkouknu jakého typu je volaná funkce, a že je to zrovna main.
-
Připojuju se tentokrát k FJ - program se nečte po řádcích, program se (typicky) čte "shora dolů". V tomto případě vím, že main() je hlavní funkce programu a když vrací int, je to exit kód programu. Teď mě (typicky) zajímá, co ta funkce hlavní funkce dělá a v tomto případě to plní pole a nic s ním nedělá, takže to zase zavřu a nezajímá mě to.
Pokud to je program který dělá něco špatně nebo mám dělat review kódu, samozřejmě půjdu po detailech, ale vždycky je dobré to napřed pojmout jako celek a pak jít k podrobnostem.