Názory ke článku Řešíme zdrojový kód - přiřazování proměnných
20. 1. 2012
S přiřazením velmi úzce souvisí věci jako: výraz vs příkaz, L-hodnota, R-hodnota, a o těch tady není ani zmínka, což mi přijde jako dost velký chyba, protože je to úplný základ jakéhokoli programování.
Výtah z přednášky Ing.Jana Fikejze, UPCE, FEI, Úvod do jazyka C:
L-hodnota = výraz
L- hodnota
- výraz s výsledkem
- lze do něho výsledek uložit
- má přiřazenou adresu v paměti
- může být vpravo i vlevo
R- hodnota
- vše co není L-hodnota
- může být jen vpravo
- hodnotový výraz – hodnota určitého typu
Příklad (L = l-hodnota, R= r-hodnota):
int a = 0, b = 8;
a = 5 * b; <- R
L -> a = b; <- L
Chyba -> 5 * b = a;
#1 Honza
Ano, děkuji za doplnění.
Podobných definic jsou plné učebnice a skripta.
V článku je právě představován trochu jiný pohled na věc.
Článek není úvodem do jazyka C. Snažil jsem se právě
svými slovy napsat to co v učebnicích nenajdete.
Všechno to o čem píšu je a bude trochu "jiné".
Terminologie je jen soustava nálepek,
Někdo chytrý a vlivný si prostě v minulosti sedl
a vymyslel to, dal těm věcem jména dle svého uvážení.
To je naprosto v pořádku, k něčemu to je.
Mrzí mě ale že to později všichni jen papouškují,
a vyžadují papouškování i po ostatních, stává se z toho oficiální dogma.
Takový "newspeak", který ospravedlňuje a vysvětluje sám sebe.
A lidé jsou "umravňování" aby se vyjadřovali jak se sluší,
protože je to asi znepokojující, když člověk přemýšlí sám
za sebe nebo co, já nevím, přijde mi to prostě legrační. :-)
Jinak já si dobrých autorit vážím, tu terminologii naprosto respektuju,
jen si ji držím trochu od těla :-), mám pocit že její snadné příjímání
pak přímo vede k vyjetým myšlenkovým schématům.
Všechna práce už byla udělána, zbývá jen dokola přesně papouškovat. :-)
Věřím že to že se moc nedržím učebnicové terminologie přiměje lidi k vlastnímu přemýšlení
více než opisování učebnic a odříkávání naučených manter.
Nevím, někdo to třeba ocení, jiný by mě nejradši uškrtil. :-)
20. 1. 2012
#2 Pudni tvor
Chytrej clovek kdyz uz "papouskuje" nejakej termin, tak by mel mit v hlave jasnou predstavu o tom, co ten termin znamena. Pokud nema, nejde o odbornika, ale ...
Terminologie se pouziva prave pro to, aby kdyz vice lidi mluvi o stejne veci tak aby vedeli presne o cem mluvi a nevznikaly nejasnosti. Ti, kteri by si z tvojeho clanku chteli odnest neco uzitecneho by mohli misto L-hodnota pouzivat "to nalevo". Kam bychom to dopracovali...
Problemem ktery svazuje mysl neni terminologie, ale ruzne skatulkovani, na vsech urovnich (a troufam si tvrdit ze i ve vsech oborech) . Clovek pak nepremysli nad tim jak problem vyresit, ale nad tim jakou skatulku pouzit na jeho vyreseni. Snad aby se vyvaroval znovu vynalezani kola.
Jinak jako programator v tomto clanku nenachazim nic uzitecneho, nebo zajimaveho. Mozna pro uplneho zacatecnika by to byly uzitecne informace.
#3 JoshB
Ano, máte pravdu, mohl jsem to napsat odborněji.
Proč je ale špatné říct "to nalevo" když tam skutečně myslím to nalevo?
Vždyť je ten text i tak uvedený že budu psát obyčejně z pohledu laika
"Představuju si, že úplně poprvé prohlížím nějaký zdrojový kód..."
Myslím si že začátečníka by štvalo spíš používání odborných termínů
tam kde to lze říct normálně obyčejně. Představuju si jak si někdo říká
"...doprčic jaká zase L-hodnota... Jó to nalevo! no tak proč to neřekne hned..."
A když člověk pochopí princip, tak ten termín je už jen nálepka,
kterou si s tím snadno později spojí.
Ano, souhlasím, přesné názvosloví je užitečné k diskusím na odborné úrovni.
Mohou se tím vyloučit některá nedorozumnění.
Ale stejně nejsme stroje, je to spíš přeceňované.
V programování se stejně komunikace odehrává na úrovni kódu.
Nikdo se s nikým nechce bavit o L-hodnotách, R-hodnotách apod.
Stejně v složitější komunikaci by si lidi pořádně nerozuměli.
Jednoduše lidi řeknou "ukaž kód ať vím o čem vlastně mluvíš"
V praxi se s tím termínem L-value člověk setká jen při chybových
hlášeních překladače a samozřejmě u zkoušky na škole. :-)
Ano s těmi škatulkami máte pravdu ale jen když si člověk dobře uvědomuje
že určitý termín je jen označení, nálepka něčeho. Ale mám pocit že si to moc často neuvědomujeme.
To škatulkování se běžně děje právě přes označování různými termíny, které tvoří tu škatulku
do které tu věc strčíte tím že to nazvete určitým termínem. A pak s tou věcí zacházíme
podle toho jak je definován ten termín. Ta věc samotná je většinou složitější, přesahuje
ten termín co byl na ní nalepen, to je problém. Mimo to tohle škatulkování je právě
děláno často nevědomně, kdy si člověk ani neuvedomuje že to zahrnuje pod určitý termín či pojem
a zachází s tím tak, dopouštíme se toho všichni včetně mě. :-)
Ale tohle už možná příliš zobecňuju, ten termín L-hodnota je tady celkem jasný.
Dík.
13. 2. 2012
#5 jagger
Ahoj. Já taky. Sranda je, že L-hodnota je v angličtině L-value jen shodou okolností. Mě se líbí, že autor ukazuje věci jednoduše a obyčejně.
Mezi námi, Honza cituje přednášku místo toho, aby se vyjádřil sám. Navíc definice R-hodnota (proč R, proč ne P?) je to, co není L-hodnota je fakt super. Do X jakožto L-hodnoty se může přiřadit Y, což je v podstatě misto v paměti blablabla. Prostě v programování (ne v jazyce) máme výrazy, což je výraz složený z operátorů, proměnných a funkcí (podle dané syntaxe) a ten se DÁ přiřadit někam. Předání výrazu jako parametru do volání funkce je také přiřazení.
Analogie s polem je prima, obrázek hezký a názorný. A lze si to představit obyčejně: při simulaci na papírek s popiskem X zapisuju dolů novou hodnotu X a na starou kašlu, můžu si ji i škrtnout.