PHP nebo JavaScript

MarekF

Re:PHP nebo JavaScript
« Odpověď #75 kdy: 03. 03. 2017, 19:21:37 »
Ad 4. V JS bohužel není vše objektem, JS má primitiva a funkce, pokud si pamatuju, měly taky nějaké specifické vlastnosti.

Oldschool ma pravdu. Ono v JS interne fakt je vsetko objektom, aj primitivne typy. Funkcia je instancia Function, cislo instanciou Number, bool instanciou Boolean atd :) V tom je to kuzlo. Objekt moze mat nejaky typ, ale je stale objekt a to, ze typeof ti vrati nejaky "primitivny typ" je len koderska pomocka. Tu napriklad vytvorim funkciu vytvorenim instancie triedy Function :-)

Kód: [Vybrat]
var a = new Function(['name', 'surname'], "console.log('whole name:' + name + ' ' + surname)");
a('Kaja','Gott');
whole name:Kaja Gott

No a co sa tyka toho zapuzdrenia a schovavania, ktore zaujima fakt len Javistov ale normalny JSkar sa tomu vyhne tak je mozne pouzit revealing pattern:

Kód: [Vybrat]
function Person() {
    this._name = 'foo';
    function _setName(name) {this._name = name;}
    return {
        setName: _setName.bind(this),
        getName: this._getName.bind(this)
    }
}
Person.prototype._getName = function() {return this._name;}
var kaja = new Person();

Ako vidno je mozne pouzit bud prototypovanu alebo inner funkciu. Vonkajsiemu svetu su ponuknute len "public" metody
vratene v return. Nevyhoda a "prasackost" toho tu je, ze v debugeri neuvidis, ze kaja je z triedy Person.  Co pri vacsich projektoch je na slucku. Zato je lepsie nezneuzivat syntax a nehrat sa na zapuzdrenia, private, public atd.

Jo a vzneseni js koderi rulez :)


Kit

Re:PHP nebo JavaScript
« Odpověď #76 kdy: 03. 03. 2017, 21:31:34 »
Zato je lepsie nezneuzivat syntax a nehrat sa na zapuzdrenia, private, public atd.

Zapouzdření je přece jen o něčem jiném, než public vs. private vs. *ettery.

gll

Re:PHP nebo JavaScript
« Odpověď #77 kdy: 03. 03. 2017, 22:47:40 »
Zato je lepsie nezneuzivat syntax a nehrat sa na zapuzdrenia, private, public atd.

Zapouzdření je přece jen o něčem jiném, než public vs. private vs. *ettery.

Supr. A jak se udělá objekt, který nese skryté stavy, ale pracuje s nimi vlastními metodami implementovanými v prototypu proto, aby ony metody nemusel každý další objekt implementovat znovu? Neboli obdoba třídně-instanční implementace se sdílenými metodami a vlastními stavy.

LP

Re:PHP nebo JavaScript
« Odpověď #78 kdy: 04. 03. 2017, 08:42:28 »
Pokud bez večerního zapouzdření neusnete, tak v poslední verzi JS se dá čehosi podobného(je to privátní natolik, že když už se tam někdo dostane, tak to byl jasný záměr) dosáhnout třeba kombinací modulů a symbolů. Běžná iterace symboly nezahrnuje, ani se ze své podstaty nepřekrývají s ostatními položkami a napsat myPrivateMethod = Symbol() mi až tak složité nepřijde.

SB

Re:PHP nebo JavaScript
« Odpověď #79 kdy: 06. 03. 2017, 13:37:33 »
1) var není nástroj zapouzdření, pokud to tak chápeš ty, tak pánbůh s tebou a celim tymem (co když ti řeknu že closure nejde genericky naklonovat :) ? )
2) nejsou vzor Observer, reaktivita je deklarativní paradigma (ne oop design pattern) a pokud to porovnáváš s Observerem, pak jsi to zřejmě nikdy ani neviděl.

Var je deklarace proměnné (stavu) dostupné pouze uvnitř kontextu, požadavek na zapouzdření splňuje.

https://en.wikipedia.org/wiki/Reactive_programming#Similarities_with_observer_pattern


SB

Re:PHP nebo JavaScript
« Odpověď #80 kdy: 06. 03. 2017, 13:58:17 »
...Ono v JS interne fakt je vsetko objektom, aj primitivne typy. Funkcia je instancia Function, cislo instanciou Number, bool instanciou Boolean atd :) V tom je to kuzlo. Objekt moze mat nejaky typ, ale je stale objekt a to, ze typeof ti vrati nejaky "primitivny typ" je len koderska pomocka...

No to asi ne:

> typeof true
'boolean'
> typeof new Boolean(true)
'object'
> new Boolean(true) === true
false

> typeof 10
'number'
> typeof new Number(10)
'object'
> 10 === new Number(10)
false

...

To, že to má boxování, neznamená, že vše je objektem.


...tak je mozne pouzit revealing pattern:

Kód: [Vybrat]
function Person() {
    this._name = 'foo';
    function _setName(name) {this._name = name;}
    return {
        setName: _setName.bind(this),
        getName: this._getName.bind(this)
    }
}
Person.prototype._getName = function() {return this._name;}
var kaja = new Person();

Ako vidno je mozne pouzit bud prototypovanu alebo inner funkciu. Vonkajsiemu svetu su ponuknute len "public" metody
vratene v return. Nevyhoda a "prasackost" toho tu je, ze v debugeri neuvidis, ze kaja je z triedy Person.  Co pri vacsich projektoch je na slucku...

Tak samozřejmě ta horní část s objektem jako vnitřním kontextem jde, to umím taky, má to jen malinkatou chybku: Objem funkcí v objektu mnohonásobně překračuje objem stavů. Mám-li pár takových objektů v celé aplikaci, sere na to pes, mám-li jich tisíce (např. seznamy), je to problém (a pomalé).

...Zato je lepsie nezneuzivat syntax a nehrat sa na zapuzdrenia, private, public atd.

Tak to už každý soudruh podle svého vkusu, já hledám jazyk, který zapouzdření umí, a to bez složitého zalamování. To je to samé, jako pan Čumil hledá jazyk se zabudovanou reaktivitou.

Kit

Re:PHP nebo JavaScript
« Odpověď #81 kdy: 06. 03. 2017, 14:14:31 »
..., já hledám jazyk, který zapouzdření umí, a to bez složitého zalamování. To je to samé, jako pan Čumil hledá jazyk se zabudovanou reaktivitou.

Zapouzdření není o tom, že je atribut private, ale o tom, že se takový atribut zvenčí nepoužívá, a to ani prostřednictvím *etterů. S atributy mají pracovat pouze metody, které patří objektu.

SB

Re:PHP nebo JavaScript
« Odpověď #82 kdy: 07. 03. 2017, 15:22:18 »
Zapouzdření není o tom, že je atribut private, ale o tom, že se takový atribut zvenčí nepoužívá, a to ani prostřednictvím *etterů. S atributy mají pracovat pouze metody, které patří objektu.

Nepotřebuju, aby mi někdo vysvětloval, co je zapouzdření a jak jej řeší on. Mimoto se to na Rootu už probíralo a liberálně-voluntaristický přístup tam byl také zmíněn.

Rapyd

Re:PHP nebo JavaScript
« Odpověď #83 kdy: 07. 03. 2017, 16:24:35 »
Nepotřebuju, aby mi někdo vysvětloval, co je zapouzdření a jak jej řeší on.

No ja to taky vidim, ze v tom nemas moc jasno. O to ale nejde, v diskusi se ti snazili vysvetlit, ze zapouzdreni jiz smeruje na smetiste koderskych dejin a JS je toho dukazem, ze to jde i bez nej. Ono totiz realny svet neni objektovy a prace na webu dost kopiruje behavioralni ineterakce zivych forem. Proto se OOP pro nej moc nehodi a jde spise o reaktivitu na eventy.

javaman ()

Re:PHP nebo JavaScript
« Odpověď #84 kdy: 07. 03. 2017, 17:55:36 »
Nepotřebuju, aby mi někdo vysvětloval, co je zapouzdření a jak jej řeší on.

No ja to taky vidim, ze v tom nemas moc jasno. O to ale nejde, v diskusi se ti snazili vysvetlit, ze zapouzdreni jiz smeruje na smetiste koderskych dejin a JS je toho dukazem, ze to jde i bez nej. Ono totiz realny svet neni objektovy a prace na webu dost kopiruje behavioralni ineterakce zivych forem. Proto se OOP pro nej moc nehodi a jde spise o reaktivitu na eventy.

Já zase vidim, že frčíš na nějaký brzo mrtvý vlně, která s vývojem moc společnýho nemá. SB píše obvykle dost zajímavý věci na rozdíl od ostatních patlalů.

Kit

Re:PHP nebo JavaScript
« Odpověď #85 kdy: 07. 03. 2017, 21:29:02 »
Nepotřebuju, aby mi někdo vysvětloval, co je zapouzdření a jak jej řeší on.

No ja to taky vidim, ze v tom nemas moc jasno. O to ale nejde, v diskusi se ti snazili vysvetlit, ze zapouzdreni jiz smeruje na smetiste koderskych dejin a JS je toho dukazem, ze to jde i bez nej. Ono totiz realny svet neni objektovy a prace na webu dost kopiruje behavioralni ineterakce zivych forem. Proto se OOP pro nej moc nehodi a jde spise o reaktivitu na eventy.

OOP se dá chápat mnoha způsoby. Někdo ho chápe jako výhodu, jiný zase jako klacky pod nohy. Některým vývojářům programy zkracuje a zefektivňuje, jiným zbytečně prodlužuje a zpomaluje. Je na každém, jaký styl si vybere.

SB

Re:PHP nebo JavaScript
« Odpověď #86 kdy: 08. 03. 2017, 08:47:36 »
OOP se dá chápat mnoha způsoby. Někdo ho chápe jako výhodu, jiný zase jako klacky pod nohy. Některým vývojářům programy zkracuje a zefektivňuje, jiným zbytečně prodlužuje a zpomaluje. Je na každém, jaký styl si vybere.

Tak snad aspoň na tomto se můžeme shodnout.

Rapyd

Re:PHP nebo JavaScript
« Odpověď #87 kdy: 08. 03. 2017, 10:41:18 »
Tak snad aspoň na tomto se můžeme shodnout.

Muzem to taky uzavrit:
- Pokud jsi spise na inheritanci tak bez do PHP.
- Pokud jsi na composition/functional/reactive bez do JS.

xxx

Re:PHP nebo JavaScript
« Odpověď #88 kdy: 08. 03. 2017, 11:19:52 »
A pokud nejsi ani na jedno, tak se můžeš po vzoru pana "j" naučit základy céčka a pak na rootu vyškolovat programátory s dvacetiletou praxí.