28 komentářů k článku Testování v PHP: anotace:

  1. Kokeš

    Anotace v komentářích?

    Tak to vypadá, že to PHPčkaři při tom opisování z Javy zase nějak popletli. Anotace, které řídí chod programu (v tomto případě testu) patří přímo do kódu — do komentářů se píší maximálně dokumentační anotace, které ale na běh programu nemají vliv a jsou to jen metadata do JavaDocu.

    1. arron

      Re: Anotace v komentářích?

      My to víme, ale protože tohle PHPčko nativně nepodporuje, tak jsme si to lehce přiohnuli no :-)

      1. Kokeš

        Re: Anotace v komentářích?

        No budiž, jako dočasné řešení. Ale jsou aspoň nějaké snahy, aby se to standardizovalo a anotace se staly normální součástí jazyka resp. jeho specifikace? Je to dost užitečná věc.

        1. Radek Miček

          Re: Anotace v komentářích?

          Je to dost užitečná věc.

          Ani bych neřekl – vzhledem k tomu, že atributy v C#/anotace v Javě nejdou přidat k cizímu kódu bez toho, abych ho změnil (tj. bez změny zdrojáku nebo bajtkódu).

          1. Kokeš

            Re: Anotace v komentářích?

            Překvapivě :-) To je asi jako si stěžovat, že v takovém jazyce nemůžu měnit metody tříd, aniž bych přepsal zdroják nebo bajtkód.

            1. Radek Miček

              Re: Anotace v komentářích?

              Ne, v případě C# to je jako stěžovat si na použití Service Locatoru, když jde použít DI. C# má lepší nástroj než jsou atributy.

              1. Kokeš

                Re: Anotace v komentářích?

                Ale DI je přece jen jedna z mnoha možností využití anotací. Opravdu nevidím problém v tom, že anotace nejdou měnit bez úpravy zdrojáku/bajtkódu (totéž mi nevadí u metod/proměnných) a považuji je za užitečné i s tímto „omezením“.

                1. Radek Miček

                  Re: Anotace v komentářích?

                  Myslel jsem fakt, že atributy odpovídají Service Locatoru a vhodně použité Expression Trees odpovídají DI. Service Locator je často považován za antivzor a ze stejných důvodů jsou antivzor i atributy.

                  1. Kokeš

                    Re: Anotace v komentářích?

                    To je ale přece věc konkrétní aplikace anotací, jejich konkrétní využití. Anotace jako takové jsou jen způsob, jak třídě/metodě/vlas­tnosti dát nějaké atributy a pak si je někde jinde (typicky v nějakém frameworku) číst a podle toho s těmi objekty zacházet. Nic víc, nic míň.

                    Jestli je někdo používá jako Service Locator nebo nějak špatně, je to jeho chyba, ne chyba anotací.

                    1. Radek Miček

                      Re: Anotace v komentářích?

                      Anotace jako takové jsou jen způsob, jak třídě/metodě/vlas­tnosti dát nějaké atributy a pak si je někde jinde (typicky v nějakém frameworku) číst a podle toho s těmi objekty zacházet.

                      Přesně tak. Problém je ve čtení anotací – jde v podstatě o čtení z globálních konstant indexovaných typem/metodou apod. Když čtete z anotací, tak váš kód závisí na globálních konstantách a rázem se zhoršuje jeho znovupoužitelnost a testovatelnost.

                      1. Kokeš

                        Re: Anotace v komentářích?

                        To je ošklivé a falešné překrucování :-) Je to asi jako říct, že umístění metody do třídy je taky fuj fuj globální konstanta indexovaná balíčkem (jmenným prostorem) a názvem třídy. A že to zhoršuje znovupoužitelnost a testovatelnost.

                        Ano, mohly bychom všechny metody a deklarace proměnných nasypat na jednu hromadu, udělat z nich funkce a pak z nich ty třídy resp. objekty sestavovat až za chodu nebo při spuštění programu na základě konfigurace. Ale to už jsme úplně jinde, to je jiné paradigma.

                      2. Kokeš

                        Re: Anotace v komentářích?

                        Pokusím se to vysvětlit ještě jinak: stejně jako můžu metodu označit jako privátní, veřejnou nebo jinou, můžu ji pomocí anotace označit jako makovou — přičemž co je „maková“ není definováno ve specifikaci jazyka, ale je to moje vlastní označení, které jsem si vymyslel a používám ho. U označení „private“ (nebo jiných klíčových slov) ti snad nevadí, že jsou to „globální konstanty“ vázané na třídu/metodu, ne? Díky tomu je možné jazyk (poměrně libovolně) rozšiřovat, aniž by se musela měnit jeho specifikace.

                        1. Radek Miček

                          Re: Anotace v komentářích?

                          Když mám nějakou metodu jako veřejnou, tak ji stále ještě mohu skrýt (např. přetypováním na vhodný nadtyp). Nebo v OCamlu můžete modul omezit více různými rozhraními (signaturami). Zatímco, když nastavím např. mapování objektu v C# do databáze pomocí atributů, tak už to nemohu změnit nebo nemohu nastavit mnoho různých mapování. Nebo, když používám objekt z nějaké knihovny, tak ho nemohu namapovat do své DB pomocí atributů, protože je nemohu přidat. Proto podporuje Entity Framework ještě jiný způsob mapování – a to tzv. Fluent API, kde se využívají právě Expression Trees.

                          1. Kokeš

                            Re: Anotace v komentářích?

                            Ale já snad nikde netvrdil, že anotace jsou všelék a použitelné kdykoli. Jasně, že jsou případy, kdy se nehodí, nebo je nejde použít. Ale v jiných případech dobře použít jdou — a proto jsem psal, že je považuji za užitečné. Silniční auto snad taky považujeme za užitečné, přestože s ním nejde jezdit po poli nebo po poušti, ne?

                            1. Radek Miček

                              Re: Anotace v komentářích?

                              Proč jazyk komplikovat anotacemi, když existují obecnější mechanismy, které nejsou o mnoho složitější?

  2. puty

    Anotácia != špeciálny komentár

    Tvrdenie, že anotácie sú komentáre so špeciálnym významom je úplne zcestné. Každý jeden komentár má špeciálny význam – ale jeho význam je určený pre prográmatora. Anotácie sú metadáta určené pre „program“. To, že sú v PHP zapísane ako komentár, je len nutné zlo. PHPDoc anotácie sú určené predovšetkým na generovanie dokumentácie, alebo ich využívaju aj vývojové prostredia – túto kategóriu anotácie je OK považovať za špeciálne komentáre. Špeciálne sú tým, že sú štruktúrované a s jasnou sémantikou a teda tiež sa jedná o metadáta. Akonáhle však využijem anotáciu tak, že k nej pristupujem cez reflexiu počas vykonávania skriptu jedná sa už o metadáta, ktoré sú určené pre interpreter a to v žiadnom prípade nie je možné označiť ako komentár.

    1. Michal

      Re: Anotácia != špeciálny komentár

      Hlavne je to uplne „o hovne“. Proc maji lidi v ceskych diskuzich potrebu rozebirat neco co je spatne, ale stejne s tim nic nenadelaj? Proc se tady nediskutuje konstruktivne jako kdekoli jinde na webu (prevazne v EN)???

      1. Kokeš

        Re: Anotácia != špeciálny komentár

        Když si to přečteš, tak zjistíš, že o tom tu padly asi dva komentáře a zvídavý dotaz, jestli to někdo řeší… Zbytek je o užitečnosti anotací obecně (bez ohledu na to, jestli se píší do komentářů nebo jsou součástí jazyka).

        1. puty

          Re: Anotácia != špeciálny komentár

          Diskusiu som samozrejme čítal. Tá rieši, prečo anotácie nepatria do komentárov. Mne však vadí, že autor článku nazval anotáciu komentárom, lebo nechcel použiť výraz metadáta. To že v PHP sú komentáre znásilnené tak, aby reprezentovali metadáta pre runtime, na ktoré v iných jazykoch existujú špecializované konštrukty, vóbec neriešim.

          1. Martin Hassman

            Re: Anotácia != špeciálny komentár

            Tím, že hovno nazveme smrkovou šiškou se smradu nijak nezbavíme. A tím, že se u anotací budeme vyhýbat označení komentář, nijak onen komentářový původ nezastřeme – každý ho tam vidí, každému to bude smrdět, není proč to skrývat.

            1. Kokeš

              Re: Anotácia != špeciálny komentár

              +1

              No tedy, klobouk dolů, tohle je snad tvůj první komenrář tady na Rootu, který dává smysl, není to jen ubohý výkřik a obsahuje docela rozumný názor.

    1. Josef ZamrzlaAutor příspěvku

      Re: Anotace @small, @medium, @large

      Díky. Tyto tři anotace jsem zatím zatajil a nechal je na díl o konfiguraci PHPUnit :-)

  3. Podbi

    Dobrý článek

    Díky za zajímavý článek o části PHPUnit, která není běžně až tak známá. Něco takového zde pro domácí komunitu chybělo. Těším se na další pokračování.

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3726