Nejsou jmenné prostory stejným prokletím jako include?
- petr.pavel
- Člen | 535
Je to kacířská otázka, já vím. Ale nějak nespatřuji
praktickou výhodu použití verze se jmennými prostory. Moc se mi
líbí RobotLoader. Prostě
si definuji svou třídu a nemusím se starat o to, aby se
includovala/requirovala všude, kde ji chci použít. V tomto ohledu mi
použití jmenných prostorů přijde jako krok zpět. Opět nesmím zapomenout
psát „include“, i když teď se mu říká use
, a musím si
pamatovat nebo dohledávat nějakou hierarchii.
Výhodám jmenných prostorů rozumím, u velkých aplikací by mi názvy jedné knihovny mohly kolidovat s názvy jiné. Ale ruku na srdce, fakt je to takový problém? Před příchodem jmenných prostorů všichni používali prefixy a fungovalo to. Asi jsem ještě neprogramoval dost velkou aplikaci.
Skoro mi přijde, že Nette začalo používat jmenné prostory kvůli sobě, ne kvůli projektům svých uživatelů. Že Nette samo potřebovalo stejný název použít v různých kontextech a používat různé prefixy bylo krkolomné. Jestli je to pravda, tak mi to přijde jako vykoupení vlastního pohodlí nepohodlím uživatelů. Tedy přesně filosofie opačná ke smyslu existence frameworku.
Co si o tom myslíte? Asi mi hlavně odpoví vývojáři Nette (žádné flame, prosím), ale rád bych slyšel i názory začátečníků. O ty tu jde také.
- 22
- Člen | 1478
není to krok zpět, zabraňuje to kolizi názvů tříd ať jak ve vlastním projektu, tak v importovaných knihovnách. Většina OOP jazyků namespace mají, takže je to asi opodstněné. Prefixy jsou hnus. Ze stejneho důvodu se ti nebude líbit DI, až na něj narazíš, je to totiž také více psaní :-)
Editoval 22 (31. 8. 2011 13:28)
- Jan Voráček
- Člen | 90
@petr.pavel Nikdo tě přece nenutí používat
use
. Můžeš namespace používat stejným způsobem jako prefixy,
pokud chceš.
Já si s Nette hraju rok a zařazuji se stále do kategorie začátečník, ale verzi bez namespace bych už používat nechtěl – všechno je na jedné kupě, nevíš, co k čemu patří. Hlavní výhodu vidím především v té hierarchické struktuře.
- Pavel Kouřil
- Člen | 128
Jakožto začátečník si díky jmenným prostorům připadám mnohem více hipster než jsem kdy byl s prefixy. Jo, a taky se mi hodí ty blbinky jako hierarchie a že mi IDE je schopné napovídat mnohem rozumnějc.
- petr.pavel
- Člen | 535
@22: Nejde mi ani tak o víc psaní, jako o „pamatovat/dohledávat
hierarchii“ a „nezapomenout napsat“.
DI je vzor, který řeší závislosti mezi objekty. To sem myslím
nepatří.
@Jan Voráček: Díky za upozornění, ale moc to neřeší ty moje dvě hlavní námitky (pamatovat/dohledávat/nezapomenout).
Ale i tak díky za váš komentář. Jsem ochoten připustit, že na tom asi něco bude, když to po dlouhém používání máte radši než prefixy. Ale jinak jste mě moc nepřesvědčili :-)
- 22
- Člen | 1478
petr.pavel napsal(a):
@22: Nejde mi ani tak o víc psaní, jako o „pamatovat/dohledávat hierarchii“ a „nezapomenout napsat“.
DI je vzor, který řeší závislosti mezi objekty. To sem myslím nepatří.
no právě až budeš znát Nette (za rok/dva), tak i namespaces budeš
znát z paměti.
Jinak argument o „nezapomenout namespace“ === „nezapomenout prefix“ no
ne? :-)
- Jan Voráček
- Člen | 90
Věř mi, že po chvilce používání (možná delší chvilce) si nebudeš pamatovat třídy jen podle názvu, ale i s celým jmenným prostorem a vůbec ti to nepřijde divný. Naopak při dohledávání v API se ti to bude velice hodit.
EDIT: Když se nad tím tak zamýšlím … Že ty používáš IDE, co ti nenapovídá, a vadí ti, že musíš všechno smolit ručně :)
Editoval Jan Voráček (31. 8. 2011 13:48)
- smasty
- Člen | 90
Droid, Pajka: +1
petr.pavel
- Žijeme v 21. storočí. Nič si nemusíš pamätať, IDE za teba všetko
doplní. (Napíšem
Presenter
→ Stlačím Enter → IDE samo doplníNette\Application\Presenter
). - Nikto ťa nenúti používať
use
. - Namespaces sú prakticky nevyhnutnosťou objektového modelu. Udržujú v objektovom strome hierarchiu. Nehrozí tak zahltenie globálneho priestoru. Je to ako spýtať sa prečo používať triedy, keď predsa môžem používať globálne funkcie a globálne premenné a konštanty.
- Prefixovanie je len workaround pre (dovtedy) neexistujúcu feature.
A tou sú práve
Namespaces
. - Ad DI: „DI je vzor, který řeší závislosti mezi objekty“. Namespaces je feature, ktorá rieši hierarchiu objektov.
- Patrik Votoček
- Člen | 2221
smasty napsal(a):
- Namespaces sú prakticky nevyhnutnosťou objektového modelu. Udržujú v objektovom strome hierarchiu. Nehrozí tak zahltenie globálneho priestoru. Je to ako spýtať sa prečo používať triedy, keď predsa môžem používať globálne funkcie a globálne premenné a konštanty.
Palec nahoru.
Pokud neprogramuješ v Notepadu nebo PSPadu ale v pořádném IDE přechod na namespace takřka nepostřehneš.
Namespace a prefix je takřka to samé s tím rozdílem že namespace je srozumitelnější.
Představ si že by z API úplně zmizela sekce namespace a ty by jsi něco hledal (to je pro mě představa pekla!).
Strom tříd je prostě ten TOP1 důvod proč namespace pokud má tvá aplikace 20 tříd asi to postrádá smysl. Btw proč by jinak na namespace přecházely i frameworky, které jsou v žebříčku pod Nette (Symfony2, Zend2).
- petr.pavel
- Člen | 535
No to mi právě taky nebylo jasné, co na namespacech všichni vidí. Taky by to klidně mohla být módní vlna. A neříkejte mi, že něco takového v programování není.
Osobně nepotřebuji hierarchii pořád vidět. Když něco hledám, projdu si adresáře, v nichž jsou soubory uložené. Ty mají taky hierarchii. PHP není Java, nemusíme si hrát na packages, kde se člověk jinak bez nějaké další hierarchie nezorientuje (tady odhaduju, nedělám v Javě).
Používám Eclipse/PDT. Napovídá, ale rychlejší vždycky bude prostě psát míň a rovnou z hlavy.
Argument, že si to za rok, dva zapamatuju… no, asi bych ti musel věřit. Ale nechtěl bych na to vsázet být na pozici ředitele, který se rozhoduje, který framework zvolit. Je to prostě překážka v učení. Jestli nakonec namespacy budou používat všechny frameworky, tak tohle dilema odpadne :-)
- Mikulas Dite
- Člen | 756
Tak třeba symfony, která se s Nette často porovnává má namespace taky.
Třeba zend v trunku ne, ale pokuď si zvládneš zapamatoval název
Zend_Oauth_Config_ConfigInterface
, tak ti
Zend\Oauth\Config\ConfigInterface
nebude dělat problém, že.
Jediný rozdíl je, že když začneš psát ConfigInte
, IDE ti
v druhém případě poradí.
Nezlob se, ale tohle téma se řešilo roky zpět. Bez namespace to prostě se stovkama tříd není to pravé ořechové.
- smasty
- Člen | 90
petr.pavel wrote:
Argument, že si to za rok, dva zapamatuju…
Nové
namespaces sú tu od apríla. Presne v tom čase som sa začal učiť
Nette. A môžem ti povedať, že som s namespaces nikdy nemal problém.
Keď viem, ako sa trieda volá, napíšem jej názov a namespace mi doplní IDE.
Keď viem, čo hľadám, ale neviem, ako sa to volá, namepsaces sú
nenahraditeľné, pretože sú logicky usporiadané.
Jestli nakonec namespacy budou používat všechny frameworky, tak tohle dilema odpadne :-)
Používa ich Nette, Symfony, Zend – 3 najlepšie a najčastejšie používané PHP frameworky. Myslím, že to stačí.
- Nox
- Člen | 378
- To mě teda vysvětli – máš problém najít si namespace, ale když potřebuješ vědět třídu tak musíš prohledávat filesystém… to nedává smysl.
- Módní vlna? Namespacy jsou tu už asi 20 let! A stále se používají a nové jazyky ho využívají
- Na NS není absolutně žádné zpomalení, napíšu „Pre“, zmákčnu klávesu, hotovo. Žádné hledání, NS za mě doplní IDE → naopak je to mnohem rychlejší. Chceš vědět všechny třídy v nějakém logické skupině? Není problém – napíšeš NS, zmáčkneš klávesu, dostaneš výpis
- NS ani nemusíš neustále uvádět, jako je tomu u prefixu, stačí použít use .. použiješ ho 1× na stránce a pak už žádné NS není! — narozdíl od prefixů, které musíš vypisovat neustále dokola
nevidím prostě jediný argument se kterým by se dalo souhlasit… oddělení je nutnost a prefixy jsou horší a pomalejší verze NS, to je asi celé
Editoval Nox (31. 8. 2011 17:04)
- Filip Procházka
- Moderator | 4668
Jenom bych dodal, že Nette umělo namespaces ještě před tím, než David vydal první verzi a ještě před tím, než byly stable v PHP :) Takže to vskutku není módní vlna.
- David Grudl
- Nette Core | 8228
Jmenné prostory jsou řešením určitých problémů, ale nedělají to
zdarma, je to něčím vykoupeno. Nicméně dlouhé názvy se mi taky jeví jako
opruz, proto se tak dlouho řešila podoba jmenných prostorů. Nakonec vyhrála
ta, která názvy natahuje minimálně a přidává na srozumitelnosti, např.
z původního NHttpRequest
na Nette\Http\Request
nebo
Nette\Mail\Message
.