NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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 6 - Aréna s bojovníky v Kotlin

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
Jirka
Člen
Avatar
Jirka:11.12.2019 10:41

Lekci jsem prošel, všechno funguje parádně. Je tam ale jedna věc, na kterou bych se chtěl zeptat. Jedná se o náhodné prohození bojovníků, jestli bude začínat první nebo druhý. Udělat to pomocí referencí je skvělý nápad.
Takže na začátku máme:

// původní pořadí
var b1 = bojovnik1
var b2 = bojovnik2

v tuto chvíli b1 ukazuje na bojovnik1 a b2 ukazuje na bojovnik2. To je ok. Pokud dojde díky hodu kostkou k přehození pořadí, udělá se toto:

b1 = bojovnik2
v tuto chvíli b1 ukazuje na bojovnik2 a b2 taky ukazuje na bojovnik2. Nic neukazuje na objekt bojovnik1. Neměl by tedy být objekt bojovnik1 odstraněn garbage collectorem?
Odstraněn očividně není, protože následující řádek zafunguje a objekt bojovnik2 již má referenci.
b2 = bojovnik1

Takže mě zajímá, proč nebyl objekt odstraněn garbage collectorem? Je tam nějaká časová prodleva, než bude objekt odstraněn? A je takový přístup bezpečný? Mám tím na mysli, jestli je v pohodě zrušit všechny reference na objekt a pak s ním dále pracovat? V našem případě je prodleva mezi prvním a druhým příkazem minimální, ale i tak mi to nepřijde úplně OK. Asi by se to dalo řešit nějakou třetí, dočasnou referencí, například:

b3 = bojovnik1
b1 = bojovnik2
b2 = bojovnik1

 
Odpovědět
11.12.2019 10:41
Avatar
zitekv
Člen
Avatar
zitekv:12.12.2019 22:20

Chápu kam míříš, ale bojovnik1 neni objekt (ale je to atribut třídy) a ukazuje na instanci bojovnika, v ukazce zalgoren, která se předává v okamžiku vyvoření instance třídy Arena.
Program.kt

val kostka = Kostka(10)
val zalgoren = Bojovnik("Zalgoren", 100, 20, 10, kostka)
val shadow = Bojovnik("Shadow", 60, 18, 15, kostka)
val arena = Arena(zalgoren, shadow, kostka)

Arena.kt

class Arena(private val bojovnik1: Bojovnik, private val bojovnik2: Bojovnik,
    val kostka: Kostka) {
 
Odpovědět
12.12.2019 22:20
Avatar
Lumlich
Člen
Avatar
Lumlich:18.2.2020 11:51

Ahoj, jaký má význam ten 47. řádek: "System.out.prin­tln()" v Arena.kt, resp. ta jeho část "system.out"? Jestli se nepletu, vysvětlení k tomu není. Moc díky. L

 
Odpovědět
18.2.2020 11:51
Avatar
Odpovídá na Lumlich
Matěj Přerovský:18.2.2020 14:44

>

Editováno 18.2.2020 14:45
Odpovědět
18.2.2020 14:44
42
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 5 zpráv z 5.