IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 6. diel - Aréna s bojovníkmi v Kotlin

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
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

 
Odpovedať
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) {
 
Odpovedať
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

 
Odpovedať
18.2.2020 11:51
Avatar
Odpovedá na Lumlich
Matěj Přerovský:18.2.2020 14:44

>

Editované 18.2.2020 14:45
Odpovedať
18.2.2020 14:44
42
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!