« 1 2 3 »
Autor Zpráva
quatzael
Profil
Kubo2:
To je ono!! Moc díky!! Nakonec jsme se domluvili:o)

Všimni si, že som odmazal x zo zoznamu parametrov funkcie, ktorú definuješ, a taktiež si všimni použitie obalovej funkcie vo for cykle kvôli zachovaniu scope a tým aj hodnoty premennej, ako už vyššie písal Chamurappi.
To je pravda, že mě mohlo napadnout..
_es
Profil
quatzael:
To je ono!!
Nie, to nie je „ono“, je to pochybné „riešenie“. Vytvárať vlastnosti globálnemu objektu a pracovať s nimi ako s premennými, zbytočne generovať nadbytočné funkcie... Je to zbytočné komplikovanie kódu, je to nevhodné aj z výkonového hľadiska, nie sú možné rôzne optimalizácie a pod.

> Já potřebuju nějak vytvořit cyklus PŘÍMO v JAVASCRIPTU, kterým bych NADEFINOVAL tři funkce NAJEDNOU, s tím, že v názvu a v obsahu tý funkce bude figurovat proměnná, která bude nést označení dané kategorie.
> Nejde mi o SPOUŠTĚNÍ funkce, ale o NADEFINOVÁNÍ
„Potrebuješ“ niečo iné - spraviť to nejako správnejšie. Lebo presne tak, ako si to popísal, sa to robiť nemá. Ak aj trváš na nadbytočne veľkom počte funkcií, respektíve to nevieš spraviť lepšie, tak si ich môžeš uložiť napríklad do poľa či objektu a volať ich:
pole[0](); pole[1]();
objekt["aaa"](); objekt["bbb"]();
quatzael
Profil
_es:
Jaký vlastnosti globálního objektu? A jaký optimalizace máš na mysli?


_es:
Ale vždyť jsem psal, že tam jsou tři shodný funkce, kvůli kterým tohle potřebuju a ty ostatní jsou naprosto odlišné a unikátní, jaký má smysl to dávat všechno do jedný?
_es
Profil
quatzael:
Jaký vlastnosti globálního objektu?
V kóde od Kuba2 je this globálny objekt a pridávajú sa mu vlastnosti.

A jaký optimalizace máš na mysli?
Napríklad, ak je v kóde var x;, tak je už pred spustením kódu isté, že x je premenná. Vlastnosť globálneho objektu premennou nie je.
quatzael
Profil
A jakej to bude mít dopad na výkon? Je to opravdu nějak pozorovatelný?
Kubo2
Profil
quatzael:
Jaký vlastnosti globálního objektu?
this je v mojom kóde implicitne globálny objekt tj. window. Takisto môžeš samozrejme použiť nejaký iný objekt napr. var form_presets = {} a funkcie si uložiť tam:

form_presets['aaa'] = function() {...}
form_presets['bbb'] = function() {...}
...

A potom ich volať ako ukazoval _es:

form_presets['aaa'](); form_presets['bbb']();
quatzael
Profil
_es:
Napríklad, ak je v kóde var x;, tak je už pred spustením kódu isté, že x je premenná. Vlastnosť globálneho objektu premennou nie je.
No ale nechápu jak tohle vysvětluje tu optimalizaci..
_es
Profil
quatzael:
Oveľa podstatnejšie než výkon je to, že bude JS kód neprehľadný a zle upravovateľný.


quatzael:
No ale nechápu jak tohle vysvětluje tu optimalizaci..
Že napríklad kompilátor vie, že x je premenná, aj to, na akej „úrovni“ (lokálna, globálna) a môže na základe toho spraviť nejaké optimalizácie. V tom kóde nevie, čo form_preset_aaa je.
Radek9
Profil
quatzael:
Globální scope se totiž chová v principu o dost jinak než všechny ostatní. Normálně totiž můžeš ve scope něco definovat jen jako proměnnou nebo funkci (což je zároveň taky vlastně proměnná). A tyhle definice compiler dopředu vidí. Globální scope je zároveň i globálním objektem, na kterém je tedy logicky možné navíc definovat i vlastnosti. A u těch už compiler dopředu neví, jestli tam vůbec ve finále budou a co v nich vlastně bude. Navíc tyhle vlastnosti jdou mazat, čímž mohou vznikat nepředvídatelné a těžko dohledatelné chyby. A to teď ani nemluvíme o konfliktech v globálních názvech mezi externími knihovnami.
quatzael
Profil
Radek9:
No tak externí knihovny kromě jQuery nepoužívám. Pro mě je zásadní, že to takhle funguje. Doufám teda, že to potom funguje jako normální funkce a není s tím žádný problém když přehlédnu tu věc s tím prvotním compilováním. Jedná se jen o 3 takto definované funkce (zatím). Ušetří to spoustu dalšího kódu, a je to přehlednější, tak prostě myslím, že tohle bude nejlepší řešení za daný situace..
_es
Profil
quatzael:
Ani si poriadne nezdôvodnil, na čo to chceš. Keďže sa vypytuješ na úplne základné veci ( K čemu slouží funkce jako obsah proměnné?) - asi nebude výsledný JS veľmi dobrý a efektívny. Čo s takými divne definovanými funkciami budeš robiť? Na čo konkrétne ich použiješ? Určite sa to dá spraviť nejako vhodnejšie.
quatzael
Profil
_es:
Já jsem totální samouk, to jo, ale celý to vytvářím z uživatelskýho pohledu. Protože to dělám pro koncový uživatele, kteří budou web využívat, ne pro js profesionály, aby slintali blažeností při pohledu na nádherný kód.
_es
Profil
Ten kód robiš aj pre seba. Ak sa k takému nejakému kódu za dlhší čas vrátiš a budeš rozmýšľať, kde že to je definovaná funkcia form_preset_ccc...
quatzael
Profil
_es:
To vím, že to dělám i pro sebe, abych se v tom vyznal. Právě proto bych byl rád, kdybych tam měl co nejvíce systematičnosti, a to že se ty funkce budou jmenovat stejně jenom se budou lišit tou jednou částí v názvu mi strašně ulehčí celý generování javascriptu.
Keeehi
Profil
quatzael:
že se ty funkce budou jmenovat stejně jenom se budou lišit tou jednou částí v názvu mi strašně ulehčí celý generování javascriptu.
Já myslím, že to je celý kámen úrazu. Ty vůbec nemáš problém s tím, že bys spojil 3 javascriptové funkce dohromady a ostatní nechal být. Ty máš problém s tím, že nevíš, jak v PHP elegantně docílit toho, aby se některé generovaný jedním a další jiným způsobem, protože do teď vypadal předpis pro všechny stejně. Je to tak?
Jestli ano, tak se přestaň vzpouzet těm rozdílným JS funkcím, (protože tak je to správně) a požádej o pomoc s elegantním kódem pro PHP, který by je zvládl vygenerovat.
quatzael
Profil
Keeehi:
Hele, tohle v PHP opravdu jako zase zvládnu. Tady nejde jen o čistý vygenerování scriptu v PHP, ale potom i o používání obecně v javascriptu.

Jestli ano, tak se přestaň vzpouzet těm rozdílným JS funkcím, (protože tak je to správně) a požádej o pomoc s elegantním kódem pro PHP, který by je zvládl vygenerovat.
Vytvářím systém formulářů, který je poměrně hodně komplikovaný, protože podle vstupních hodnot některé inputy jdou pryč, některý se pozmění a některý nový se zase objeví. Dělám tam kompletní validaci, nápovědu, a ukládání hodnot. Není to žádná sranda, kterou bys udělal za pár dní..
Vytvářím to tak, aby když něco budu muset v budoucnu změnit, tak abych to měnil ideálně jen na jednom místě. Jsou to tisíce řádků v několika skriptech. Jestli se nabízíš s pomocí vytvoření "elegantního" kódu, tak klidně dej vědět, můžeme se v Praze někde na půl dne sejít, já Ti vysvětlím o co jde a můžeš se pustit do práce:o)
Keeehi
Profil
quatzael:
Hele, tohle v PHP opravdu jako zase zvládnu.
Takže zvládneš v PHP vygenerovat místo
function funkce_aaa() { $("#item-aaa").show(); }
function funkce_bbb() { $("#item-bbb").show(); }
function funkce_ccc() { $("#item-ccc").show(); }
function funkce_ddd() { /*JS kód nesouvisející s předchozími*/ }
function funkce_eee() { /*další jiný JS kód */ }

Toto:
function funkce_aaa_bbb_ccc(s) { $("#item-"+s).show(); }
function funkce_ddd() { /*JS kód nesouvisející s předchozími*/ }
function funkce_eee() { /*další jiný JS kód */ }

Jestli ano tak je hotovo, ty tři podobné funkce máš zkrácené do jedné a jak vidíš, na ostatní jsem ani nešáhl.
_es
Profil
quatzael:
Vytvářím to tak, aby když něco budu muset v budoucnu změnit, tak abych to měnil ideálně jen na jednom místě.
Ako chceš niečo v budúcnosti meniť, keď je problém zistiť, kde je to vlastne definované? Ak je v kóde niekde form_preset_aaa(); tak je obvyklé očakávať, že je niekde inde v kóde function form_preset_aaa(... alebo aspoň menej pohodlné var form_preset_aaa; a niekde inde do premennej priradená funkcia - to však nikde v kóde v štýle 1#30 nenájdeš. Nie si ani schopný vysvetliť, na čo takú divnú globálnu premennú potrebuješ - asi ju vôbec nepotrebuješ.
quatzael
Profil
Keeehi:
Jestli ano tak je hotovo, ty tři podobné funkce máš zkrácené do jedné a jak vidíš, na ostatní jsem ani nešáhl.
Vždyť jsem říkal, že zrovna to DEFINOVÁNÍ těchto funkcí v PHP negeneruju.. Tyhle funkce budou pro každej formulář neměnný, takže není potřeba je generovat přímo z PHP.

Přece nemá smysl úplně všechno generovat z PHP, jen to, kde existuje nějaká variabilita..


_es:
Ako chceš niečo v budúcnosti meniť, keď je problém zistiť, kde je to vlastne definované?
To právě budu vědět, protože všechno co budu potřebovat změnit bude jen na tom jednom konkrétním místě.

Nie si ani schopný vysvetliť, na čo takú divnú globálnu premennú potrebuješ - asi ju vôbec nepotrebuješ.
Já nevím jakou "divnou globální proměnnou" máš na mysli. Já Ti zase vysvětluju, že ten systém formulářů je natolik složitej a provázanej, že to tady nevysvětlím bez toho, abych tady několik dní sepisoval nějaký popis toho o co se jedná, který by kvůli délce stejně nikdo nečetl..
Keeehi
Profil
_es, quatzael:
Vždyť jsem říkal, že zrovna to DEFINOVÁNÍ těchto funkcí v PHP negeneruju..
OK. Takže kde je problém? Proč nemůžeš místo těch tří funkcí bez parametrů použít jednu funkci s parametrem, jako jsem to udělal já v [#17] a poprvé už _es v [#18] na předchozí stránce?
quatzael
Profil
Keeehi:
Proč nemůžeš místo těch tří funkcí bez parametrů použít jednu funkci s parametrem, jako jsem to udělal já v [#17] a poprvé už _es v [#18] na předchozí stránce?

Protože to spouštění funkce převážně generuju v PHP. Ta funkce se nespouští jenom jednou, ale při různých příležitostí. Takže bych musel v PHP složitě řešit kdy místo aaa bude aaa_bbb_ccc. Tohle opravdu není jediná funkce, která se tam objevuje.. Prostě je tam hafo funkcí různě provázaných, takhle jak to chci vyřešit já to je prostě nejjednodušší. A nemusím tam řešit tohle aaa_bbb_ccc, který bude fungovat jen unikátně pro jednu funkci a pro ostatní ne..
_es
Profil
quatzael:
Protože to spouštění funkce převážně generuju v PHP.
No hurá! Takže nepotrebuješ spraviť netradičné „NADEFINOVÁNÍ“ funkcií, ale len ich „SPOUŠTĚNÍ“, aj to asi nejako vhodnejšie, než neurčito načrtávaš, teda niečo iné, než si tvrdil. Ak budeš mať 100 elementov a s nimi budeš potrebovať robiť 20 rôznych vecí, tak si hentak do kódu na to „NADEFINUJEŠ“ 2 000 rôznych globálnych funkcií? A čo ak tých elementov bude 1 000 a činností 100? Tipujem, že ti asi žiadne hentak podivne definované globálne funkcie nie sú treba, len neovládaš nejaké základné techniky v JS a DOM.
quatzael
Profil
_es:
Ne, já dávám do funkcí jenom logické celky, takže nepotřebuju mít tisíce funkcí. Na druhou stranu nedávám do jedné funkce nesourodé úkony, kde bych to musel řešit parametrem a pak podle něj pouhým switchováním na daný úsek ve funkci o tisíci řádcích, to opravdu nedává smysl..

No hurá! Takže nepotrebuješ spraviť netradičné ‚NADEFINOVÁNÍ‘ funkcií, ale len ich ‚SPOUŠTĚNÍ‘,
Ale já přece píšu PŘEVÁŽNĚ. To znamená, že některý spouštění se bude generovat z PHP (z různých míst) a některý (menší množství) čistě z js kódu, který nijak negeneruju.

Tipujem, že ti asi žiadne hentak podivne definované globálne funkcie nie sú treba, len neovládaš nejaké základné techniky v JS a DOM.
To fakt nevím z čeho tak soudíš. Když definuješ úplně jiný pravidla pro úplně jiný elementy, tak to prostě do jedný funkce nijak elegantně nesloučíš, i kdyby jsi znal ty nejpokročilejší techniky DOMU, to je prostě nesmysl..
anonymníí
Profil *
quatzael:
Proč pořád spojuješ parametry se switchem?

Pokud funkce _aaa, _bbb a _ccc mají dělat totéž, jen se třemi různými elementy (aaa, bbb, ccc), je parametr jedinou správnou volbou. Switch žádný pochopitelně nebude třeba.

Pořád jen naznačuješ, pořád přesvědčuješ, že tvé řešení je správné. A já přemýšlím, proč jsi se chodil ptát, když jsi neřekl nic konkrétního, nenecháš si poradit a stále trváš na tom, že máš pravdu?
Chamurappi
Profil
Nějak se to tu zacyklovalo. Když zrekapituluji situaci:
1) Víme, že quatzael něco dlouhodobě vytváří.
2) Kompletní zadání (a příklad použití) nám nesdělí, protože je buď příliš složité na popis, nebo ho považuje za obchodní tajemství.
3) Lidi, kteří dobře umí JS, si myslí, že požadovaný postup je špatně. (Já si to myslím také a stejný pocit mám i z jiných otázek.)
4) Ale quatzael se domnívá, že toto řešení je OK. Nepopiratelně funguje.

Zeptal bych se tedy quatzaela:
1) Myslíš si, že kdybychom znali úplné zadání, že bychom považovali zvolený postup za správný? (Já si myslím, že ne.)
2) Věříš, že nejde vymyslet lepší řešení, nebo že nemá cenu vymýšlet lepší řešení?
3) Kdy bude velké odhalení celého projektu? Jsme tu všichni strašně zvědaví, co to vlastně kutíš :-)
quatzael
Profil
anonymníí:
Jenže já potřebuju, aby to spouštění funkcí _aaa a například _fff proběhlo jednoduše stejným patternem a nemusel jsem na x místech řešit, že když bude v proměnný jedna z kategorií aaa, bbb, ccc, tak má spustit jednu funkci s parametrem, a když ne tak ty ostatní bez parametru..

A já přemýšlím, proč jsi se chodil ptát, když jsi neřekl nic konkrétního, nenecháš si poradit a stále trváš na tom, že máš pravdu?
Já jsem se nešel ptát na to, aby jste mi navrhovali nějakej koncept, a potom co jste mi ho navrhli, jsem si trval na svým řešení.
Zadal jsem konkrétní dotaz co potřebuju udělat, na to mi nakonec bylo odpovězeno.
Já zase nechápu, že Ty jsi tak strašně přesvědčený, že moje řešení musí být za každou cenu špatný, jenom protože se Ti nezdá moc cool použití nějakýho globálního objektu..


Chamurappi:
1) Myslíš si, že kdybychom znali úplné zadání, že bychom považovali zvolený postup za správný? (Já si myslím, že ne.)
Právě, o to jde - znát "úplné zadaní". Kámen úrazu je v tom, že to "úplné zadání" je natolik obsáhlé, že by vám trvalo hodně dlouho než byste se v tom začali orientovat. Já na tom pracuju už hodně dlouho a pořád mám problém s tím, abych na nic nezapomněl a všechno tam bylo správně zakomponovaný. Navíc je třeba počítat s určitou flexibilitou, aby bylo možné "jednoduchým způsobem" měnit některé aspekty v těch formulářích.

2) Věříš, že nejde vymyslet lepší řešení...
Lepší řešení jde najít vždycky. Dám ruku do ohně, že ani Ty nejseš takovej frajer, aby nešlo vymyslet lepší řešení pro skripty, který píšeš Ty konkrétně (nemám samozřejmě na mysli jednoduchý věci o pár řádcích).

nebo že nemá cenu vymýšlet lepší řešení?
Přesně tak! Optimalizaci je výhodný dělat do tý doby, dokud má ten marginální přínos větší smysl než to neustálý přepatlávání kódu.

3) Kdy bude velké odhalení celého projektu? Jsme tu všichni strašně zvědaví, co to vlastně kutíš :-)
Už by to mělo být brzy:o)
Keeehi
Profil
Já si dovolí ještě poznámečku na okraj a pak už budu mlčet až do toho slavnostního odhalení. Leda že by to tu nabralo výrazně jiný směr.

quatzael:
Já na tom pracuju už hodně dlouho a pořád mám problém s tím, abych na nic nezapomněl a všechno tam bylo správně zakomponovaný.
Nebude problém právě v tom? To bude nějaký spaghetti vodě když máš problémy tomu rozumět ty sám (čti je to velmi komplikované a provázané). Já sám se ve svých kódech vyznám bez obtíží a snažím se je psát tak, aby i ostatní tomu rozuměli. Nejde o žádné malé projektíky a rozhodně si nemyslím, že by na základní pochopení wocogou potřebovali ostatní víc než deset minut, maximálně hodinu.
quatzael
Profil
Keeehi:
Tady nejde o to, že se nevyznám ve svým kódu. S tím problém nemám. Já mluvím o celým konceptu, zadání. Co všechno ten systém formulářů musí umět, aby to celý spolu dohromady fungovalo. Zadání je strašně obsáhlý a jde o to, umět z něho vytáhnout ty podstatný věci, který jsou pro ty formuláře relevantní.

Nejde o žádné malé projektíky a rozhodně si nemyslím, že by na základní pochopení wocogou potřebovali ostatní víc než deset minut, maximálně hodinu.
Nevím co řadíš mezi své "žádné malé projektíky". Už jsi například dělal někdy internetové bankovnictví, s tím, že sis samozřejmě musel nastudovat i jak funguje zaúčtování plateb, clearing a všechno relevantní okolo..?

Na základní pochopení "wocogou" samozřejmě klidně může stačit hodinka. Ale rozhodně z toho nepochopíš celý problém a co všechno za detaily budeš muset vyřešit. A hlavně to za tu hoďku neudržíš všechno v hlavě..

Chamurappi:
Taky záleží jak definuješ "lepší" řešení. Když děláš něco obsáhlejšího, tak lze vždycky najít nějaké "lepší" řešení. Nejsi stroj.
anonymníí
Profil *
quatzael:
Trochu se ztrácíš. O žádných "globálních objektech" jsem nepsal, to byl někdo jiný :-)

Můžu tě poprosit, ve stručnosti, na pár řádků, o popis toho zadání, které jistě nepochopíme? Jaká je provázanost mezi formuláři? Zkus to.

Nějak se mi nezdá, že kód, kde každá spojitost mezi jednotlivými formuláři má vlastní funkci (a doufám, že _aaa, _bbb, _ccc jsou jen pracovní názvy tady a ne reálné), by měl být snadno rozšiřitelný, jak píšeš. To nemůže, už z principu. Buď je bez prefixů a s parametry, přičemž parametry mají společného jmenovatele, nebo to jsou různé funkce, každá psaná na míru spojistoti formuláře. Pak jediná rozšiřitelnost je copy&paste a hledání volného suffixu.

Dále, píšeš na Keeehiho ohledně velikosti projektu. Nechci tě podceňovat, ale nemyslím si, že bys psal nějaké internetové bankovnictví. Nicméně je vidět, že v bankovnictví se trochu vyznáš, nebo jsi si něco někde přečetl. Clearing není slovo, které by znal každý. Na toto mám podobný názor jako Keeehi, bude se jednat o něco spíše menšího, co by šlo rozdělit na pár (jednotky/menší desítky) malých úloh a funkcí. Protože na to ale jdeš ze špatné strany, přerůstá ti to přes hlavu.
Kubo2
Profil
quatzael:
Alebo to celé nahraj niekam na GitHub/Bitbucket/akýkoľvek iný podobný server, kde bude mať komunita DJPW prístup, a my sa na to pozrieme, a zároveň budeme môcť objektívne diskutovať k reálnemu kódu. (Teda ak to nie je obchodné tajomstvo, ako spomínal Chamurappi.)
« 1 2 3 »

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: