-
Fototrend
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Pala
veterán
Sziasztok! Akad itt valaki, aki object composition (és ezzel kapcsolatos patternek, best practice-ek) terén otthonosabban mozog.
Szinte bárhol olvasok a témáról, általában a lentihez hasonló példákkal illusztrálják, hogyan is néz ez ki a gyakorlatban (ez nem az én kódom, csak példa):
const canCast = (state) => ({
cast: (spell) => {
console.log(`${state.name} casts ${spell}!`);
state.mana--;
}
})
const canFight = (state) => ({
fight: () => {
console.log(`${state.name} slashes at the foe!`);
state.stamina--;
}
})
const fighter = (name) => {
let state = {
name,
health: 100,
stamina: 100
}
return Object.assign(state, canFight(state));
}
const mage = (name) => {
let state = {
name,
health: 100,
mana: 100
}
return Object.assign(state, canCast(state));
}
scorcher = mage('Scorcher')
scorcher.cast('fireball'); // Scorcher casts fireball!
console.log(scorcher.mana) // 99
slasher = fighter('Slasher')
slasher.fight(); // Slasher slashes at the foe!
console.log(slasher.stamina) // 99Namármost, nekem ezzel az a problémám, hogy a kompozíció során minden egyes object instance új példányt kap ugyanabból a metódusból is, tehát tkp. elkezdjük szépen teleszemetelni a memóriát, kvázi feleslegesen. Kérdés, hogy:
1. El tudjuk-e ezt kerülni úgy, hogy a fenti kódban a canCast és canFight továbbra is pure function-ök maradjanak (mondjuk most a bennük lévő console.log miatt nem azok, de azt most gondolatban vegyük ki )!? (Pusztán azt elérni, hogy egy metóduson osztozzanak az instance-ek, nem nehéz.)Épp most írok egy játékot, ahol object compositiont használok, százas nagyságrendben készülnek majd objektumok, és nem találtam igazán szép megoldást erre a problémára.
[ Szerkesztve ]
-
Pala
veterán
válasz Silεncε #8072 üzenetére
Reacthoz talán a legjobb megoldás (CSS-in-JS helyett) a Sass/SCSS modules. Scope-olható és nem kell beleturmixolni a JS-be. Az ilyen Radium meg Styled Components-féle mutációktól én fejre állok. Ezt az Emotiont nem ismertem, de most gyorsan belenézve ez is kb. ugyanaz a förmedvény, mint a Styled Components.
[ Szerkesztve ]
-
Pala
veterán
válasz lanszelot #8484 üzenetére
Ez egy nagyon nem triviális topik! Kezdőknek én nem javasolnám, de ha sok felesleges hajszálad van, akkor első körben egy kis gráfelmélet-tanulmányozást javaslok, azon belül is egy irányított körmentes gráfra (directed acyclic graph) lesz szükséged az adatmodellezéshez.
[ Szerkesztve ]
-
Pala
veterán
válasz Silεncε #8486 üzenetére
A linkelt codepennél az a probléma, hogy egyetlen root node-ból (parent) indul az egész, miközben ugyebár minden (normális) embernek két szülője szokott lenni, emellett oldalágon beházasodást is kezelni kell és akkor jönnek még ilyen buktatók, mikor rokoni szálon házasodnak emberek és úgy lesz gyerekük, meg egyéb finomságok... Ezért nem lehet fa-struktúrát használni, hanem általánosabb gráf kell ide, amiben a körmentességet biztosítani kell, hiszen az nem fordulhat elő, hogy a nagyapa fiának a fia a nagyapa apja is legyen.
Fel kell állítani dummy adatokkal egy példa-családfát 20-30 emberrel, leképezni az egészet egy szomszédossági listába (adjacency list), ez alapján már ki lehet generálni rekurzívan valami otromba gráfot belőle, aztán lehet gondolkodni a formázáson. Szerintem ez utóbbi a nagyobb challenge benne, hogy miként lehet ezt átláthatóan prezentálni.
[ Szerkesztve ]
-
Pala
veterán
válasz lanszelot #8496 üzenetére
Az a helyzet, hogy (látva a korábbi hozzászólásaidat a topikban) neked nem komplex feladatok megoldásával kellene foglalkoznod, hanem tanulással. Méghozzá azért, mert alapvető ismereteid hiányoznak, nem csak JavaScript és a webprogramozás, hanem úgy általában a programozás terén. Félreértés ne essék, nincs ezzel semmi gond, mindenki tartott itt egyszer... csak ezt fel kellene ismerned.
-
Pala
veterán
válasz lanszelot #8500 üzenetére
Ahhoz, hogy tudj tervezni, elsősorban algoritmizálási képesség és adatstruktúrák (majd később design patternek) ismerete szükséges, ez jelenti az alapokat, mondhatni. Mindig adatokkal dolgozunk (ezért kell adatstruktúrában gondolkodni), és mindig valamilyen műveletet végzünk rajtuk (ehhez kell az algoritmizálás). Ezen a területen kell képezned magad kicsit elméletibb oldalról ( [link] ), majd gyakorlatiasabb megközelítéssel ( [link] ).
A családfás feladatnak is ugyanúgy kell nekiállni, első lépésként felismerni, hogy milyen adatstruktúrával tudod reprezentálni a családfát. És ehhez a bizonyos felismeréshez kellenek a fenti alapok, pl. hogy ehhez a feladathoz egy gráfra lesz szükséged (irányíott körmentes gráf, DAG = directed acyclic graph), majd azt utána leképezni olyan formába, hogy kód-szinten is kifejezhető legyen (ehhez meg egy szomszédossági lista (adjacency list) kell, ezeknek nézz utána neten). Ha nem ismered a gráfokat, akkor meg kell őket tanulni (nem kell profi szinten). Ez az a bizonyos első lépés, amit keresel. Ha hajlandó vagy rászánni egy minimális összeget, illetve némi időt, hogy pl. a fenti két kurzust végigcsináld, máris teljesen máshogy állnál hozzá a feladathoz. De akár Youtube-on is rengeteg ingyenes anyagot találsz "algorithms", "data structures" kulcsszavakra.
Mindezekkel együtt továbbra is hangsúlyozom, hogy a feladat, amire vállalkozni szándékozol, nem triviális. Sokkal egyszerűbb példákkal kellene kezdeni, ha el akarod sajátítani a megfelelő gondolkodásmódot. Egy hasonlattal élve, most kb. autóversenyzőnek készülsz, de közben nincs kedved megtanulni vezetni, mert te egyből autóversenyző akarsz lenni, mert az érdekel. És emiatt nem találod, hogyan kezdj neki, mert túl nagyot akarsz ugrani.
[ Szerkesztve ]
-
Pala
veterán
Nézd meg YT-on vagy akárhol, hogyan kell egy Pong játékot canvasra leprogramozni, onnan tudsz meríteni ötleteket, praktikákat. Azért a Pongot említem, mert ott a falról/paddle-ről visszapattanó labda valamelyest párhuzamba állítható az általad említett lézeres-tükrös koncepcióval.
Én írtam játékot canvasra, arra készülj fel, hogy ez javarészt geometria + algoritmizálás.
[ Szerkesztve ]
-
Pala
veterán
válasz #20221952 #8723 üzenetére
Nekem konkretan volt Budapesten olyan frontend interjum, ahol kozoltem az interjuztatoval, hogy kizarolag angolul tudok valaszolni a kerdeseire, mert nem ismerem a magyar terminologiat. Azt mondta, semmi gond. Emiatt szerintem ne izgulj, ez inkabb elony. Sot, tovabbmegyek, en amondo vagyok, olyan helyre ne is akarj menni, ahol a fejlesztok nem tudnak angolul legalabb egy"kozepesen szar" szinten.
-
Pala
veterán
válasz #20221952 #8731 üzenetére
Egy jotanacs: ne kolts ilyenekre penzt, ezeknek a kodolo kurzusoknak a nagy resze egyedul azoknak eri meg, akik az ilyen vallalkozasokat mukodtetik. Minden, amit itt tanitanak, az netrol ezerszer tobb forrasbol, jobb minosegben elerheto; ingyen vagy sokkal olcsobban (magyarul egy lehuzas az egesz).
[ Szerkesztve ]
-
Pala
veterán
Mi a gond konkretan??
Megoldas:
1. Adsz egy classt az osszes divnek, majd document.querySelectorAll-lal eltarolod oket egy tombben.
2. A fuggvenyed bemeneti ertekkent kap egy tombot (vagy listat), benne tetszoleges mennyisegu szammal. Ezutan szepen kiszurod azokat a szamokat, amikkel nem lehet indexelni a 9db div-et, magyarul kiszorsz belole mindent, ami nem 0 es 8 koze eso egesz szam, de stringeket + egyeb bullshitet is kiszurhetsz, attol fuggoen, hogy milyen merteku error handlinget akarsz beleepiteni.
3. Utana random kivalasztasz egy szamot ebbol a leszurt szamokat tartalmazo tombbol, ezzel megkapod a veletlenszeruen kivalasztott div-et.
4. Majd generalsz egy szamot 1 es 25 kozott es beleiratod a kivalasztott div-be.
5. Orulsz.Lehet persze sokfelekeppen cifrazni, de a fo koncepcio ez.
[ Szerkesztve ]
-
Pala
veterán
válasz arcoskönyv #9698 üzenetére
Az async JS-ben csak annyit jelent, hogy az igy megjelolt fuggveny mindenkeppen egy promise-t ad vissza, meg akkor is, ha ezt nem jelzed explicit modon.
Az await pedig egy kenyelmesebb mod a promise-ok visszateresi ertekenek kezelesere (a masik opcio a then-catch).
Az await kulcsszot async fuggvenyen belul lehet hasznalni, amikor promise-okkal dolgozol.Kezdetnek ennyi eleg.
[ Szerkesztve ]
Új hozzászólás Aktív témák
- iPhone topik
- Sorozatok
- Diablo 3
- Villanyszerelés
- Kerékpárosok, bringások ide!
- Újabb Samsungok telepíthetik a Galaxy AI-t
- bb0t: Gyilkos szénhidrátok, avagy hogyan fogytam önsanyargatás nélkül 16 kg-ot
- Mindent megtudtunk az új Nokia 3210-ről
- Milyen billentyűzetet vegyek?
- Képeken az egyik kameráját elvesztő Sony Xperia 10 VI
- További aktív témák...
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen