Učebnice programovania

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:Učebnice programovania
« Odpověď #30 kdy: 28. 08. 2019, 16:51:43 »
Účelem getterů a setterů není samotný přístup k členským proměnným. Jejich účelem je aby zvenku nebylo poznat, jestli nějaká taková proměnná vůbec existuje.

Ve svých aplikacích gettery ani settery nepoužívám. Proč? Jednoduše nepotřebuji žádný přístup ke členským proměnným.


Re:Učebnice programovania
« Odpověď #31 kdy: 28. 08. 2019, 17:09:10 »
Účelem getterů a setterů není samotný přístup k členským proměnným. Jejich účelem je aby zvenku nebylo poznat, jestli nějaká taková proměnná vůbec existuje.

Ve svých aplikacích gettery ani settery nepoužívám. Proč? Jednoduše nepotřebuji žádný přístup ke členským proměnným.
Ani v obecnější podobě, jakou jsem popisoval v dalším odstavci? Zpráva, která se objektu ptá na nějakou hodnotu nebo stav, je v vlastně taky getter. Jestli tomu vevnitř odpovídá nějaká členská proměnná nebo ne by přece mělo být zvenku úplně jedno, ne? Osobně beru jako getter cokoliv, co se objektu na něco ptá a při pohledu zvenčí nijak neovlivňuje jeho stav.

Re:Učebnice programovania
« Odpověď #32 kdy: 28. 08. 2019, 17:10:44 »
Účelem getterů a setterů není samotný přístup k členským proměnným. Jejich účelem je aby zvenku nebylo poznat, jestli nějaká taková proměnná vůbec existuje.

Ve svých aplikacích gettery ani settery nepoužívám. Proč? Jednoduše nepotřebuji žádný přístup ke členským proměnným.

(je tu ještě?)

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:Učebnice programovania
« Odpověď #33 kdy: 28. 08. 2019, 19:23:01 »
Účelem getterů a setterů není samotný přístup k členským proměnným. Jejich účelem je aby zvenku nebylo poznat, jestli nějaká taková proměnná vůbec existuje.
Ve svých aplikacích gettery ani settery nepoužívám. Proč? Jednoduše nepotřebuji žádný přístup ke členským proměnným.
Ani v obecnější podobě, jakou jsem popisoval v dalším odstavci? Zpráva, která se objektu ptá na nějakou hodnotu nebo stav, je v vlastně taky getter. Jestli tomu vevnitř odpovídá nějaká členská proměnná nebo ne by přece mělo být zvenku úplně jedno, ne? Osobně beru jako getter cokoliv, co se objektu na něco ptá a při pohledu zvenčí nijak neovlivňuje jeho stav.

V obecnější podobě používám jako getter metodu toString() a jako setter konstruktor. Jinak se objektu na nic neptám, protože mě stav jeho atributů nezajímá.

Re:Učebnice programovania
« Odpověď #34 kdy: 28. 08. 2019, 21:22:03 »
Účelem getterů a setterů není samotný přístup k členským proměnným. Jejich účelem je aby zvenku nebylo poznat, jestli nějaká taková proměnná vůbec existuje.
Ve svých aplikacích gettery ani settery nepoužívám. Proč? Jednoduše nepotřebuji žádný přístup ke členským proměnným.
Ani v obecnější podobě, jakou jsem popisoval v dalším odstavci? Zpráva, která se objektu ptá na nějakou hodnotu nebo stav, je v vlastně taky getter. Jestli tomu vevnitř odpovídá nějaká členská proměnná nebo ne by přece mělo být zvenku úplně jedno, ne? Osobně beru jako getter cokoliv, co se objektu na něco ptá a při pohledu zvenčí nijak neovlivňuje jeho stav.

V obecnější podobě používám jako getter metodu toString() a jako setter konstruktor. Jinak se objektu na nic neptám, protože mě stav jeho atributů nezajímá.

A jak to vlastně děláš? Mějme třeba objekt `Color` (RGB). Určitě dělám něco blbě, ale já bych tam viděl nějaký getter či accessor, to už je jedno jak to nazvu.


gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:Učebnice programovania
« Odpověď #35 kdy: 29. 08. 2019, 08:54:50 »
mimo jiné citují tento zdroj https://ronjeffries.com/xprog/articles/practices/pracnotneed/ , kde se píše

Citace
You find that you need a getter for some instance variable. Fine, write it. Don’t write the setter because “we’re going to need it”. Don’t write getters for other instance variables because “we’re going to need them”.
Tak k téhle citaci mám dost zásadní výhrady. Asi tuším, co chtěl autor říct, ale řekl to IMO dost extrémním způsobem.

Účelem getterů a setterů není samotný přístup k členským proměnným. Jejich účelem je aby zvenku nebylo poznat, jestli nějaká taková proměnná vůbec existuje.

Třída není jenom náhodný shluk proměnných a funkcí. Je to balík, který je úzce provázaný dohromady. Pokud má ten balík nějakou vlastnost, kterou dává smysl číst zvenku, pak dostane getter. Pokud má tuhle vlastnost smysl z venku i měnit, pak dostane i setter. Jestli té vlastnosti odpovídá nějaká proměnná je úplně jedno. U takhle psaných tříd je samotná existence setteru užitečná dokumentace. Rozhodně užitečnější, než existence nějaké podobně pojmenovaného membra. Odhadovat, jestli nějaká metoda chybí protože není rozumné danou proměnnou měnit jen tak, nebo to jenom zatím nebylo potřeba, nemusí být až taková sranda.

Souhlasím s tím, že není dobré psát zbytečný kód. S čím nesouhlasím je granularita. Ono co vlastně je nebo není potřeba není samotný getter nebo jedna třída. Potřeba je nějaká funkce celého systému.

nechtěl jsem začít diskuzi o getterech a setterech, jen jsem chtěl ukázat, že to heslo YAGNI na wikipedii se týká psaní nadbytečného kódu, ne funkcionality.

Re:Učebnice programovania
« Odpověď #36 kdy: 29. 08. 2019, 09:55:36 »
nechtěl jsem začít diskuzi o getterech a setterech, jen jsem chtěl ukázat, že to heslo YAGNI na wikipedii se týká psaní nadbytečného kódu, ne funkcionality.
Nemusíme vést diskuzi konkrétně o getterech, můžeme přejít do trochu obecnější roviny. :)

Problém s YAGNI (a to samé platí pro jakékoliv jiné jednoduché a univerzální pravidlo) je v tom, že je složité ho interpretovat a aplikovat. Třeba co přesně je ten "nadbytečný kód"? Ty gettery jsem rozepsal právě abych ilustroval že ta nadbytečnost rozhodně není nějaký přímočarý koncept. Dost záleží na kontextu a zkušenostech.

Kód není jen k tomu aby se přeložil nebo vykonal. Slouží i ke komunikaci s jinými vývojáři. A na základě zkušeností počítám jako jiného vývojáře i sebe po pár měsících. Dokonce bych si troufl tvrdit, že když píšeme kód, tak je to primárně pro lidi a ne pro stroj.

Doporučuju kouknout na https://www.youtube.com/watch?v=kYVxGyido9g&t=1s Je to sice o C++, ale ten princip je daleko obecnější a není omezený jen na jednotlivá klíčová slova. Spousta věcí v kódu nemá svůj protiklad. Buď tam je, nebo není. A pokud věci píšu když dávají logicky smysl a ne jenom, když je zrovna potřebuju, pak každá taková chybějící věc je informace pro další vývojáře. Pokud budu všechno psát jen ve chvíli, kdy to bude opravdu nutné, tak budoucí čtenář kódu o tuhle informaci přijde.

borekz

  • ****
  • 492
    • Zobrazit profil
    • E-mail
Re:Učebnice programovania
« Odpověď #37 kdy: 29. 08. 2019, 13:18:01 »
Třeba co přesně je ten "nadbytečný kód"?
Např. implementace nepožadovaných funkcí. Kromě one-man-show firem není programátor ta správná osoba, která by si měla vymýšlet zadání. "Prozíravý" programátor myslí "dopředu" a zaprasí kód nadbytečným obtížně udržovatelným balastem, aby byl "rozšiřitelný". Až po dlouhé době přijde nový požadavek, nejen že ten balast nic nepomůže, protože programátor není orákulum, ale ještě to zkomplikuje, protože je víc kódu k přepisování.

Re:Učebnice programovania
« Odpověď #38 kdy: 29. 08. 2019, 14:15:17 »
Upřímně Vám doporučuji vykašlat se na knížky a pořídit si nějaké online kurzy. Osobně jsem se ke knížce nedokopal, ale online kurzy jsou výborné.
https://www.udemy.com/java-the-complete-java-developer-course/
Při slevách za 300,-Kč, 80h contentu, cvičení, forum, kde opravdu poradí. Nemohu nic jen doporučit. A neustále tam přidává nový content z nových verzí javy, takže to máte vlastně na delší dobu. :-)

Re:Učebnice programovania
« Odpověď #39 kdy: 29. 08. 2019, 14:25:14 »
Např. implementace nepožadovaných funkcí. Kromě one-man-show firem není programátor ta správná osoba, která by si měla vymýšlet zadání.
Pokud je tou "funkcí" myšlena nějaká uživatelem viditelná funkčnost programu, pak naprostý souhlas. Pokud to má znamenat funkci nebo metodu v kódu, pak nesouhlasím. A do jakých funkcí je ten program uvnitř rozložený v zadání obvykle nebývá.
Citace
"Prozíravý" programátor myslí "dopředu" a zaprasí kód nadbytečným obtížně udržovatelným balastem, aby byl "rozšiřitelný". Až po dlouhé době přijde nový požadavek, nejen že ten balast nic nepomůže, protože programátor není orákulum, ale ještě to zkomplikuje, protože je víc kódu k přepisování.
Prozíravý programátor myslí dopředu hlavně na to, že po něm ten kód bude někdo číst. A ten čtenář bude muset zrekonstruovat spoustu předchozích myšlenkových postupů. Když píšu kód, tak nepíšu jednotlivé funkce ve vakuu. Navrhuju celé třídy. Tady mi dává smysl udělat takovou třídu komplet, ne jenom nezbytné části. Pak čtenář nemusí dedukovat, jestli nějaká metoda nedává smysl, nebo jenom nebyla třeba.

Jak už jsem psal, jde mi o granularitu. Nebudu psát hromadu wrapperů a interfaců jen kvůli budoucí rozlišitelnosti. Ale taky se nebudu bránit přidat pár metod do třídy, kde dávají smysl. A psal jsem to jako reakci na příspěvek, který to bral stylem "Ani jediný setter nazmar". To mi přijde spíš kontraproduktivní.