Nejsou jmenné prostory stejným prokletím jako include?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
petr.pavel
Člen | 535
+
0
-

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
+
0
-

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
+
0
-

@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
+
0
-

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
+
0
-

@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
+
0
-

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
+
0
-

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
+
0
-

Droid, Pajka: +1

petr.pavel

  • Žijeme v 21. storočí. Nič si nemusíš pamätať, IDE za teba všetko doplní. (Napíšem PresenterStlačí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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-
  • 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
+
0
-

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.

mm-marek
Člen | 61
+
0
-

Díky NS mám kratší názvy souborů a jmenují se tak jak se logicky jmenovat mají, to mi hrozně vyhovuje :)

David Grudl
Nette Core | 8228
+
0
-

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.