NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 11 - Gettery a settery v Javě

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Ondřej Kozel:22.9.2020 23:22

Ahoj, co když třída obsahuje nějakou veřejnou konstantu? U těch se používání getterů nevyplatí, protože je zbytečné nebo se naopak využívají, aby bylo všechno jednotné?

Díky

 
Odpovědět
22.9.2020 23:22
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na Ondřej Kozel
Alesh:27.9.2020 15:07

Gettery a settery se využívají proto, aby se nedalo přímo manipulovat s obsahem proměnné "z venku". U konstanty nic měnit nelze, setter je tedy nesmysl, getter je zbytečný.

 
Odpovědět
27.9.2020 15:07
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:1.4.2021 11:13

Jen taková malá poznámečka.
V úvodu tutoriálu by se mohlo i přihlížet na skloňování:) Když už jsi ve všem tak důsledný, tak ti potom může vyjít, i třeba tento text:

Jsem Nataša, žena. Je mi 25 let a jsem plnoletý. //<--- Žena a na konci je "plnoletý" :)

Takže jen jako vsuvku bych tam ještě vložil pro korektnost

String gramatickaPlnoletost = muz ? "plnoletý" : "plnoletá";

Ale je to skutečně jen detail, který nemění nic na podstatě :) Spíše kosmetická úprava tutoriálu.

PS:

Když se zamyslíme nad ostatními atributy, není nejmenší důvod, abychom taktéž umožňovali modifikovat pohlaví

Jooooo, zkus toto vysvětlit všem gender fanatikům v roce 2021 :D:D Podle zvrácených teorií by pohlaví neměl být už boolean, ale pomalu už by to mělo být varchar 2128

Editováno 1.4.2021 11:14
Odpovědět
+4
1.4.2021 11:13
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:1.4.2021 11:19

Menší překlep:

za předpokladu, že setter nebo setter nemá nějakou další logiku

Odpovědět
+1
1.4.2021 11:19
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:1.4.2021 11:38

A jen bych asi doplnil takové krátké 2 věcné poznámky:

  1. Gettery a Settery se nazývají "PŘÍSTUPOVÉ METODY"
  2. Proč se přístupové metody používají a nepoužívá se přímý přístup k atributům instance/třídy je hlavně ze dvou důvodů.
  • Praktické hledisko: Když se dívám na cizí kód a nebo používám cizí knihovnu, tak se nebudu dívat na vnitřní logiku a nebudu hledat, jak si dotyčný pojmenovává kdejaký atribut, ale podívám se, jaké metody mi vystaví - takže jako zkušený programátor, když používám jinou třídu, tak vím, že když chci něco nastavovat, tak se dívám automaticky po metodách se prefixem "set". To samé, když chci získat nějakou informaci, tak hledám prefix "get/is"
  • Historické hledisko: Ono se těžko vysvětluje a dokazuje případ rozbití kódu na jednom atributu. V podstatě i tento modelový příklad, kterým v tutoriálu "rozbíjíš" kód, tak by se dal také rozbít tím, že právě vystavíš setter i pro pohlaví či pro plnoletost. (což u někoho zbrklého, jako jsem třeba já může bez problémů nastat. Navíc když používám Lombok, tak ani netuším, jestli jde nějak díky tomuto pidi frameworku zamezit, aby se nějaká přístupová metoda nevygenerovala... toď otázka do pléna).

Nicméně dřív se do setter metod rvala i logika (viz třeba teď ten nešťastný případ v metodě setVek(). Není to čisté. Hlavně dnešní frameworky jsou stavěné na tom, že přístupové metody opravdu pouze a jenom vracejí/nastavují hodnotu atributu (nebo v případě objektových datových typů přiřazují nebo vrací referenci na objekt). Nic jiného se u přístupových metod neočekává. Logiku pak řešíme v jiných metodách.
Jenže historicky se logika do setterů pak i rvala. Upustilo se od toho hlavně z toho důvodu, že to bylo neintuitivní. Kupříkladu metoda setXPozice nakonec nejen, že nastavovala x-ovou pozici nějakého souřadnicového systému, ale obsahovala podmínky/cykly a vnitřní logiku, kterou by člověk od metody s takovým názvem skutečně nečekal.
Proto se od toho upustilo, ale konvence přístupových metod zůstala a dneska je využívaná jako přístup, se kterým počítá řada frameworků.

Dřívější "rozbití" kódů, které přístupové metody třeba ošetřovaly, tak ukazuje krásný příklad s geometrickými obrazci.
Dejme tomu, když bychom kreslili domeček. Domeček se bude skládat ze čtverce a trojúhelníku. (čtverec = zdivo, trojúhelník = střecha).
Když nastavíme metodu getDum(), tak vrátíme oba tyto atributy a zamezením přístupu k atributům nehrozí, že by nám třeba někdo místo trojuhelniku nastavil třeba kruh.

Jenže jak říkám, toto bylo dřív, dokud se takto řešila logika v přístupových metodách. Dneska se na to dívá z jiného pohledu.

Odpovědět
+4
1.4.2021 11:38
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Odpovídá na Lubor Pešek
Jan Křížek:15.4.2021 12:45

Potíž s gender tématikou v ČR (a možná i jinde) je v tom, že anglický výraz gender má stejný překlad do češtiny, jako anglický výraz sex, tedy pohlaví. Zatímco sex označuje pohlaví fyziologické, tak gender má označovat něco, čemu by se více hodil český překlad rod, tedy ženský rod, mužský rod a podobně. Tedy jako vhodné řešení v programování bych přidal navíc atribut rod a potom bych použil list, kde by se dalo vybrat z více možností. A ta kosmetická úprava by se vztahovala spíše k rodu.

 
Odpovědět
+1
15.4.2021 12:45
Avatar
Odpovídá na Jan Křížek
Nositelka Změny:25.4.2021 22:17

Já bych se na pohlaví úplně vykašlala. Za mě je to úplně jedno, kolik jich je. Bohužel člověk může být něco mezi mužem a ženou, a to i biologicky, nejenom duševně. Nemyslím, že je potřeba zrovna varchar, ale proměnnou boolean muz; považuji za docela sexistickou... Pokud už to pohlaví chceme, vždy by tam měla být alespoň možnost "nechci uvést", když už nic jiného. Ale já bych se nebránila ani možnosti "jiné".

Odpovědět
-2
25.4.2021 22:17
j.k.j
Avatar
Alesh
Tvůrce
Avatar
Alesh:25.4.2021 22:30

proměnnou boolean muz; považuji za docela sexistickou...

:-))
Já myslím, že to chce především používat mozek a neřešit kraviny, učíme se zde programovat a ne diskutovat o zhovadilých trendech dnešní doby. :-) Každej snad chápe ten příklad, jak je to myšleno a jak ten boolean funguje.

 
Odpovědět
+5
25.4.2021 22:30
Avatar
Lukáš Kučavík:9.12.2021 11:57

Jsou tedy stejně rychlé, jako kdybychom pracovali s veřejným atributem (za předpokladu, že setter nebo setter nemá nějakou další logiku).

Řekl bych, že zde má být getter nebo setter, není liž pravda?

Odpovědět
9.12.2021 11:57
Každý je zodpovědný za svůj život ale ne každý je ochoten tu zodpovědnost přijmout.
Avatar
Jaroslav Drobek:14.2.2022 6:13

překlepy: "jsme..používaly metody", "setter nebo setter"

Je nějaký důvod zaškrtnout gettery a settery v nabídce 'Refactor -> Encapsulate fields', jsou-li už tyto napsány (ručně) v kódu?

 
Odpovědět
14.2.2022 6:13
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 91.