Čím parsovat HTML v C++?

kozzi

Re:Čím parsovat HTML v C++?
« Odpověď #45 kdy: 18. 11. 2015, 19:54:09 »
Ukaž alespoň kousek kódu, který se bez komentáře neobejde.

Kód: [Vybrat]
methods.value = env->GetMethodID(annotationCls, "value", "()I");

/* Android bug 190058
 * Annotation methods require one parameter on Android 6 eventough
 * the method is declared without any. nullptr is a safe value. */
jvalue params[1];
params[0].l = nullptr;
env->CallIntMethodA(annotation, methods.value, params);

Bez komentáře nemáte šanci poznat, že posílání parametru metodě bez parametrů není chyba, ale workaround chyby.

Prave si ukazal jeden z mala pripadu kdy je opravdu komentar dulezitej. Bohuzel jsem zjistil ze se najdou i taci, kteri ho ignoruji a nemaji problem dany kod "opravit"  :'(


Kit

Re:Čím parsovat HTML v C++?
« Odpověď #46 kdy: 18. 11. 2015, 19:55:46 »
Bez komentáře nemáte šanci poznat, že posílání parametru metodě bez parametrů není chyba, ale workaround chyby.

Proč by mělo být posílání parametru metodě chybou? I ze samotného zápisu vidím, že tam ten nullptr prostě potřebuje.

Co třeba ten zápis trochu pozměnit tak, aby tam ten komentář nebyl potřebný?
Kód: [Vybrat]
jvalue androidBug190058[1];
androidBug190058[0].l = nullptr;
env->CallIntMethodA(annotation, methods.value, androidBug190058);

Jinak ty názvy typů a objektů vypadají docela šíleně. To se nedivím, že k tomu někdo potřebuje komentáře. Například z názvu CallIntMethodA lze jen těžko rozluštit, zda "Int" je integer nebo internal a zda "A" znamená attribute nebo annotation. Z názvu "env" zase nepoznám, zda je to environment nebo třeba envelope.

kozzi

Re:Čím parsovat HTML v C++?
« Odpověď #47 kdy: 18. 11. 2015, 19:59:00 »
Ukaž alespoň kousek kódu, který se bez komentáře neobejde.

Kód: [Vybrat]
methods.value = env->GetMethodID(annotationCls, "value", "()I");

/* Android bug 190058
 * Annotation methods require one parameter on Android 6 eventough
 * the method is declared without any. nullptr is a safe value. */
jvalue params[1];
params[0].l = nullptr;
env->CallIntMethodA(annotation, methods.value, params);

Bez komentáře nemáte šanci poznat, že posílání parametru metodě bez parametrů není chyba, ale workaround chyby.

Prave si ukazal jeden z mala pripadu kdy je opravdu komentar dulezitej. Bohuzel jsem zjistil ze se najdou i taci, kteri ho ignoruji a nemaji problem dany kod "opravit"  :'(

Mi pripomelo situaci kdy jsem hledal v jednom souboru chybu a na konci souboru najdu toto:

// NEMAZAT!!!
// KDO TO SMAZE TOHO VLASTNORUCNE USKRTIM
// !!!POZOR!!! tento radek nesmite smazat jinak te nepojede

No a samozrejme pod timto komentarem nebylo nic, tak kouknu do historie gitu a vidim jak tam nekdo umazal radek a komentar v gitu ve stylu REF: smazam zbytecny nic nedelajici radek kodu

Takze se vracime k tomu ze komentare jsou vlastne zbytecne

#

Re:Čím parsovat HTML v C++?
« Odpověď #48 kdy: 18. 11. 2015, 20:39:26 »
Takze se vracime k tomu ze komentare jsou vlastne zbytecne
Hele, stat se to na mym projektu, pridu za korenem/koc a zeptam se proc to udelal a pak si vysvetlime, ze se ty komentare kolem fakt ctou ... udela to podruhy a uz to asi takto klidne neprojde. Prece to, ze delas s debilem neznamena, ze komentar nema smysl z principu. Cpat hinty do nazvu promenych etc je sice taky mozny, ale je treba dodrzovat jednotnej format, jinak se z toho clovek nevyhrabe.

Kit

Re:Čím parsovat HTML v C++?
« Odpověď #49 kdy: 18. 11. 2015, 21:08:38 »
Takze se vracime k tomu ze komentare jsou vlastne zbytecne
Hele, stat se to na mym projektu, pridu za korenem/koc a zeptam se proc to udelal a pak si vysvetlime, ze se ty komentare kolem fakt ctou ... udela to podruhy a uz to asi takto klidne neprojde. Prece to, ze delas s debilem neznamena, ze komentar nema smysl z principu. Cpat hinty do nazvu promenych etc je sice taky mozny, ale je treba dodrzovat jednotnej format, jinak se z toho clovek nevyhrabe.

Však to je jednotný formát. Přidám do názvu proměnné číslo bugu a je to. Alespoň to není jak ten nicneříkající název "params". To má být ten tvůj jednotný formát? Co je obsahem proměnné "params"? Nebo je to snad objekt? :)


Sten

Re:Čím parsovat HTML v C++?
« Odpověď #50 kdy: 18. 11. 2015, 21:16:11 »
Bez komentáře nemáte šanci poznat, že posílání parametru metodě bez parametrů není chyba, ale workaround chyby.

Proč by mělo být posílání parametru metodě chybou? I ze samotného zápisu vidím, že tam ten nullptr prostě potřebuje.

Protože ta metoda je deklarována int(), tedy vrací int a nemá žádné parametry.

Co třeba ten zápis trochu pozměnit tak, aby tam ten komentář nebyl potřebný?
Kód: [Vybrat]
jvalue androidBug190058[1];
androidBug190058[0].l = nullptr;
env->CallIntMethodA(annotation, methods.value, androidBug190058);

To je paráda, když musíte projít issue tracker Androidu, abyste u kódu zjistil, co vlastně znamená.

Jinak ty názvy typů a objektů vypadají docela šíleně. To se nedivím, že k tomu někdo potřebuje komentáře. Například z názvu CallIntMethodA lze jen těžko rozluštit, zda "Int" je integer nebo internal a zda "A" znamená attribute nebo annotation. Z názvu "env" zase nepoznám, zda je to environment nebo třeba envelope.

Int je návratová hodnota té metody. A znamená, že se tomu předává pole (array) parametrů. Je to standardní konvence JNI, kterou když znáte, tak k tomu právě žádné komentáře moc potřeba nejsou ;)

Kit

Re:Čím parsovat HTML v C++?
« Odpověď #51 kdy: 18. 11. 2015, 21:39:09 »
Proč by mělo být posílání parametru metodě chybou? I ze samotného zápisu vidím, že tam ten nullptr prostě potřebuje.

Protože ta metoda je deklarována int(), tedy vrací int a nemá žádné parametry.

Jaká metoda? Ta v methods.value? Proč je název té metody tak mizerný? "value"? Slovo "methods" mi říká, že by to mělo být nějaké pole či kolekce. Ejhle, není. Zase někdo zaspal.

Kód: [Vybrat]
jvalue androidBug190058[1];
androidBug190058[0].l = nullptr;
env->CallIntMethodA(annotation, methods.value, androidBug190058);

To je paráda, když musíte projít issue tracker Androidu, abyste u kódu zjistil, co vlastně znamená.


To jsem stejně musel, protože z toho komentáře to jasné nebylo.

Jinak ty názvy typů a objektů vypadají docela šíleně. To se nedivím, že k tomu někdo potřebuje komentáře. Například z názvu CallIntMethodA lze jen těžko rozluštit, zda "Int" je integer nebo internal a zda "A" znamená attribute nebo annotation. Z názvu "env" zase nepoznám, zda je to environment nebo třeba envelope.

Int je návratová hodnota té metody. A znamená, že se tomu předává pole (array) parametrů. Je to standardní konvence JNI, kterou když znáte, tak k tomu právě žádné komentáře moc potřeba nejsou ;)

"Int" a "A" vymysleli tvůrci JNI. S tím se nedá nic dělat. Ale to "env" jsi tam dal ty a mohl jsi to pojmenovat správně. Pokud se tedy tvému zaměstnanci nebudou líbit tvé hloupé názvy proměnných, tak ho vyhodíš? V tom případě si nedělám iluzi o kvalitách toho zbytku, který "šlape brázdu" a raději do toho nekecá.

Sten

Re:Čím parsovat HTML v C++?
« Odpověď #52 kdy: 18. 11. 2015, 21:56:01 »
Jaká metoda? Ta v methods.value? Proč je název té metody tak mizerný? "value"? Slovo "methods" mi říká, že by to mělo být nějaké pole či kolekce. Ejhle, není. Zase někdo zaspal.

Metoda se jmenuje „value“ (i v Javě) a její ukazatel je uložený ve struktuře „methods“, kde jsou ukazatele na metody pro danou třídu (protože resolvování ukazatelů metod se dělá při spuštění).

To jsem stejně musel, protože z toho komentáře to jasné nebylo.

Annotation methods require one parameter on Android 6 eventough the method is declared without any. nullptr is a safe value.

Co na tom není jasné?

"Int" a "A" vymysleli tvůrci JNI. S tím se nedá nic dělat. Ale to "env" jsi tam dal ty a mohl jsi to pojmenovat správně. Pokud se tedy tvému zaměstnanci nebudou líbit tvé hloupé názvy proměnných, tak ho vyhodíš? V tom případě si nedělám iluzi o kvalitách toho zbytku, který "šlape brázdu" a raději do toho nekecá.

env je konvence pro parametr obsahující ukazatel na JNIEnv.

Můžete si samozřejmě vymyslet vlastní konvence, ale míchání různých konvencí je pěkná prasárna. Pokud máte problémy dodržovat konvence, nedělám si iluzi o kvalitě vašeho kódu.

hu

Re:Čím parsovat HTML v C++?
« Odpověď #53 kdy: 18. 11. 2015, 22:05:47 »
Vyserte se už na to...

Kit

Re:Čím parsovat HTML v C++?
« Odpověď #54 kdy: 18. 11. 2015, 22:10:41 »
Jaká metoda? Ta v methods.value? Proč je název té metody tak mizerný? "value"? Slovo "methods" mi říká, že by to mělo být nějaké pole či kolekce. Ejhle, není. Zase někdo zaspal.

Metoda se jmenuje „value“ (i v Javě) a její ukazatel je uložený ve struktuře „methods“, kde jsou ukazatele na metody pro danou třídu (protože resolvování ukazatelů metod se dělá při spuštění).

Název "value" je pěkně blbý název pro metodu. Obvykle se metody pojmenovávají slovesem.

JNIEnv nepoužívám. Pokud je "env" uznávanou konvencí, tak musím konstatovat, že žádnou proměnnou dle tvé konvence nevidím. Pouze předvádíš cizí pírka, ale se svou kůží na trh nejdeš. Tím končím.

v

Re:Čím parsovat HTML v C++?
« Odpověď #55 kdy: 18. 11. 2015, 22:13:39 »
se svou kůží na trh nejdeš
srsly?

Sten

Re:Čím parsovat HTML v C++?
« Odpověď #56 kdy: 18. 11. 2015, 22:15:31 »
Název "value" je pěkně blbý název pro metodu. Obvykle se metody pojmenovávají slovesem.

Takhle se prostě jmenují metody anotací v Javě. Opět jde o konvenci, kterou jsem nevymyslel.

JNIEnv nepoužívám. Pokud je "env" uznávanou konvencí, tak musím konstatovat, že žádnou proměnnou dle tvé konvence nevidím. Pouze předvádíš cizí pírka, ale se svou kůží na trh nejdeš. Tím končím.

Proměnné dle mé konvence jsou třeba annotation, params nebo ta struktura methods. Navíc jsem reagoval na tvrzení, že v kódu nikdy není potřeba komentář, o nějaká konvence vůbec nešlo, tak co bych měl předvádět?

Tik

Re:Čím parsovat HTML v C++?
« Odpověď #57 kdy: 18. 11. 2015, 22:18:24 »
Kit: Ty seš fakt mimoň, až to bolí.

Daniel

Re:Čím parsovat HTML v C++?
« Odpověď #58 kdy: 18. 11. 2015, 22:32:24 »
ja pouzivam dost dlho http://htmlcxx.sourceforge.net/

Daniel

Re:Čím parsovat HTML v C++?
« Odpověď #59 kdy: 18. 11. 2015, 22:34:23 »
Přesně, lepší máš Javu.

Nevíme nic o účelu - HTML parser se nachází téměř v každém jazyce. Když Java, tak klidně i Python nebo PHP.

Pokud to chce pro C++, tak je nejspíš masochistou, ale je to jeho volba.

nedramatizujte, http://htmlcxx.sourceforge.net/ je jednoduche riesenie pre C++