Typový system versus unittesty

v

Re:Typový system versus unittesty
« Odpověď #945 kdy: 29. 10. 2018, 13:17:39 »
Jejich benefit spočívá ve výkonu
Typy s výkonem nijak nesouvisí.
Prozradím ti, že historický důvod byl pouze - to podtrhuji! - pouze efektivní kod!
Jistě to můžeš doložit  ;)
Viz poznámky Johna Backuse k návrhu FORTRANu
byl by odkaz nebo alespoň původní název textu?


Petr

Re:Typový system versus unittesty
« Odpověď #946 kdy: 29. 10. 2018, 14:21:56 »
Dalo, ale je to hůře čitelné a srozumitelné. Cíl není nejmenší počet řádků, ale nejvyšší přehlednost a čitelnost, aby se programator nedopouštěl chyb z nepozornosti a nepochopení.
1. Zalezi na tom co ses zvyklej cist. Kdyz sem poprve videl lambdu tak mi to taky neslo prez rohovku.
2. Zajimave je, ze v te tve javove verzi jsou dve chyby z nepozornosti...
Nejde o lambdu, ale o příliš dlouhé řádky, na kterých se toho děje příliš mnoho. Tyto úsporné zápisy dobrou čitelnost kódu nepodporují. Moje javova verze byla stažena z webu z nějakého benchmarku, ktery porovnaval ruzne jazyky. Divím se spíš, že nikdo neprotestoval proti používání proměnné l, to je prasárna, ale nechtěl jsem do těch kódů zasahovat.

abcd

Re:Typový system versus unittesty
« Odpověď #947 kdy: 29. 10. 2018, 14:29:52 »
Citace
Myslis, ze nektery z tech jazyku ve tvych ukazkach ma dobry typovy system?

To už tady bylo hodněkrát:

A Typy nejsou zázračný lék
B Jsou
A Tady máš příklady v jazycích A, B, C, D, E, F, G, H
B Haha, jenže to nejsou jazyky s dobrým typovým systémem...
A ?
B Haskell, pyčo! Všichni tři, co ho používáme, si ho nemůžeme vynachválit.

Re:Typový system versus unittesty
« Odpověď #948 kdy: 29. 10. 2018, 14:59:35 »
Citace
Myslis, ze nektery z tech jazyku ve tvych ukazkach ma dobry typovy system?

To už tady bylo hodněkrát:

A Typy nejsou zázračný lék
B Jsou
A Tady máš příklady v jazycích A, B, C, D, E, F, G, H
B Haha, jenže to nejsou jazyky s dobrým typovým systémem...
A ?
B Haskell, pyčo! Všichni tři, co ho používáme, si ho nemůžeme vynachválit.

Pobavilo :-).
Haskell nepouzivam, snazil jsem se poukazat na to, ze nemuze vyvracet hypotezu o typovych sytemech ukazkama kodu z jazyku, ktery bud nemaji staticke typy vubec, nebo je maji tak zprasene, ze spis prekazi... (nechci hodnotit go, pac ho neznam).

[metafora]
A: Dospel jsem k nezdravemu presvedceni, ze oktavka ujede trasu z Prahy do Brna rychleji nez BMW M3.
B: To ti muzu snadno vyvratit... podivej se treba na tenhle pomeranc
[/metafora]

 

Re:Typový system versus unittesty
« Odpověď #949 kdy: 29. 10. 2018, 15:10:45 »
Dalo, ale je to hůře čitelné a srozumitelné. Cíl není nejmenší počet řádků, ale nejvyšší přehlednost a čitelnost, aby se programator nedopouštěl chyb z nepozornosti a nepochopení.
1. Zalezi na tom co ses zvyklej cist. Kdyz sem poprve videl lambdu tak mi to taky neslo prez rohovku.
2. Zajimave je, ze v te tve javove verzi jsou dve chyby z nepozornosti...
Nejde o lambdu, ale o příliš dlouhé řádky, na kterých se toho děje příliš mnoho. Tyto úsporné zápisy dobrou čitelnost kódu nepodporují. Moje javova verze byla stažena z webu z nějakého benchmarku, ktery porovnaval ruzne jazyky. Divím se spíš, že nikdo neprotestoval proti používání proměnné l, to je prasárna, ale nechtěl jsem do těch kódů zasahovat.

Nejde o usporne zapisy, ale o deklarativni vs. imperativni pristup.
Diky deklarativnejsimu zapisu, muzu spoustu veci vynechat a to citelnost zvysuje. Proste tim, ze je tam min veci na cteni a pochopeni.

A je podle me jedno kdo tu javovou verzi psal. Tvuj argument byl, ze je napsana takovym stylem, ze tam bude min chyb z nepozornosti. A stejne tam jsou. Tudiz je podle me predpoklad mylny. Imperativni pristup nijak nezvysuje citelnost/prehlednost/udrzovatelnost  kodu. Spis naopak.


SB

Re:Typový system versus unittesty
« Odpověď #950 kdy: 29. 10. 2018, 15:22:44 »
Java
Kód: [Vybrat]
import java.util.HashMap;
import java.io.*;

class dict_v1 {
    public static void main(String[] args) {
        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        HashMap<String, Integer> h = new HashMap<String, Integer>();
        String l;
        int max = 0;
        int x   = 0;
        while ((l = stdin.readLine()) != null) {
            if (h.containsKey(l)) {
                x = h.get(l) + 1;
                h.put(l, x);
                if (x > max){
                    max = x;
                }
            } else h.put(l, 1);
        }
        System.out.println(h.size()+" "+max);
    }
}

A nedalo by se to napsat treba takhle?
Kód: [Vybrat]
    public static void main(String[] args){
        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        Map<String, Integer> h = new HashMap<>();
        stdin.lines().forEach(l -> h.compute(l, (k, v) -> v == null ? 1 : v + 1));
        System.out.println(h.size() + " " + h.values().stream().max(Integer::compare).orElse(0));
    }

Ja vim, ze je to furt skaredy, a kdybych to dostal na code review tak bych k tomu mel minimalne 3 komentare, ale ...

Mně zas přijde divné, že nikomu na hustotu nevadila kostrukce "while ((l = stdin.readLine()) != null)".

Dále (jak si správně všimnul Listoper) je tato konstrukce vyloženě pozůstatkem z dob sraček typu C++ - dnes nejsme v době primitivních jazyků, abychom museli iterovat přes collection ručně!!!

Petr

Re:Typový system versus unittesty
« Odpověď #951 kdy: 30. 10. 2018, 22:06:57 »
Citace
Myslis, ze nektery z tech jazyku ve tvych ukazkach ma dobry typovy system?

To už tady bylo hodněkrát:

A Typy nejsou zázračný lék
B Jsou
A Tady máš příklady v jazycích A, B, C, D, E, F, G, H
B Haha, jenže to nejsou jazyky s dobrým typovým systémem...
A ?
B Haskell, pyčo! Všichni tři, co ho používáme, si ho nemůžeme vynachválit.

Pobavilo :-).
Haskell nepouzivam, snazil jsem se poukazat na to, ze nemuze vyvracet hypotezu o typovych sytemech ukazkama kodu z jazyku, ktery bud nemaji staticke typy vubec, nebo je maji tak zprasene, ze spis prekazi... (nechci hodnotit go, pac ho neznam).

[metafora]
A: Dospel jsem k nezdravemu presvedceni, ze oktavka ujede trasu z Prahy do Brna rychleji nez BMW M3.
B: To ti muzu snadno vyvratit... podivej se treba na tenhle pomeranc
[/metafora]
Aha, jenze to jsi se ztratil v debate. To nebyla reakce na typovy system, ale na hustotu kodu. Ten pomeranc je tvuj.

Petr

Re:Typový system versus unittesty
« Odpověď #952 kdy: 30. 10. 2018, 22:12:17 »
Dalo, ale je to hůře čitelné a srozumitelné. Cíl není nejmenší počet řádků, ale nejvyšší přehlednost a čitelnost, aby se programator nedopouštěl chyb z nepozornosti a nepochopení.
1. Zalezi na tom co ses zvyklej cist. Kdyz sem poprve videl lambdu tak mi to taky neslo prez rohovku.
2. Zajimave je, ze v te tve javove verzi jsou dve chyby z nepozornosti...
Nejde o lambdu, ale o příliš dlouhé řádky, na kterých se toho děje příliš mnoho. Tyto úsporné zápisy dobrou čitelnost kódu nepodporují. Moje javova verze byla stažena z webu z nějakého benchmarku, ktery porovnaval ruzne jazyky. Divím se spíš, že nikdo neprotestoval proti používání proměnné l, to je prasárna, ale nechtěl jsem do těch kódů zasahovat.

Nejde o usporne zapisy, ale o deklarativni vs. imperativni pristup.
Diky deklarativnejsimu zapisu, muzu spoustu veci vynechat a to citelnost zvysuje. Proste tim, ze je tam min veci na cteni a pochopeni.

A je podle me jedno kdo tu javovou verzi psal. Tvuj argument byl, ze je napsana takovym stylem, ze tam bude min chyb z nepozornosti. A stejne tam jsou. Tudiz je podle me predpoklad mylny. Imperativni pristup nijak nezvysuje citelnost/prehlednost/udrzovatelnost  kodu. Spis naopak.

Nemyslím si, ze by chyba v nejake nahodne vybrane ukazce kodu na netu byla statisticky vyznamna. Ano, v prehlednem a snadno citelnem zapisu bude mene chyb. Java takovou syntaxi nema, a nahrazujes pouze jednu neprehlednou formu druhou a to at to napises zpusobem jakym chces. Pricemz ja tvuj styl zapisu povazuji za zvlast neprehledny.

Re:Typový system versus unittesty
« Odpověď #953 kdy: 30. 10. 2018, 23:09:53 »
Citace
Myslis, ze nektery z tech jazyku ve tvych ukazkach ma dobry typovy system?

To už tady bylo hodněkrát:

A Typy nejsou zázračný lék
B Jsou
A Tady máš příklady v jazycích A, B, C, D, E, F, G, H
B Haha, jenže to nejsou jazyky s dobrým typovým systémem...
A ?
B Haskell, pyčo! Všichni tři, co ho používáme, si ho nemůžeme vynachválit.

Pobavilo :-).
Haskell nepouzivam, snazil jsem se poukazat na to, ze nemuze vyvracet hypotezu o typovych sytemech ukazkama kodu z jazyku, ktery bud nemaji staticke typy vubec, nebo je maji tak zprasene, ze spis prekazi... (nechci hodnotit go, pac ho neznam).

[metafora]
A: Dospel jsem k nezdravemu presvedceni, ze oktavka ujede trasu z Prahy do Brna rychleji nez BMW M3.
B: To ti muzu snadno vyvratit... podivej se treba na tenhle pomeranc
[/metafora]
Aha, jenze to jsi se ztratil v debate. To nebyla reakce na typovy system, ale na hustotu kodu. Ten pomeranc je tvuj.

Ale notak. Koukni na co jsem reagoval.

...
Tedy premisa tohoto téma - dobrý typový systém činí unit testy zbytečnými, je dle mého vyvrácena.
Myslis, ze nektery z tech jazyku ve tvych ukazkach ma dobry typovy system?

Re:Typový system versus unittesty
« Odpověď #954 kdy: 30. 10. 2018, 23:16:22 »
Dalo, ale je to hůře čitelné a srozumitelné. Cíl není nejmenší počet řádků, ale nejvyšší přehlednost a čitelnost, aby se programator nedopouštěl chyb z nepozornosti a nepochopení.
1. Zalezi na tom co ses zvyklej cist. Kdyz sem poprve videl lambdu tak mi to taky neslo prez rohovku.
2. Zajimave je, ze v te tve javove verzi jsou dve chyby z nepozornosti...
Nejde o lambdu, ale o příliš dlouhé řádky, na kterých se toho děje příliš mnoho. Tyto úsporné zápisy dobrou čitelnost kódu nepodporují. Moje javova verze byla stažena z webu z nějakého benchmarku, ktery porovnaval ruzne jazyky. Divím se spíš, že nikdo neprotestoval proti používání proměnné l, to je prasárna, ale nechtěl jsem do těch kódů zasahovat.

Nejde o usporne zapisy, ale o deklarativni vs. imperativni pristup.
Diky deklarativnejsimu zapisu, muzu spoustu veci vynechat a to citelnost zvysuje. Proste tim, ze je tam min veci na cteni a pochopeni.

A je podle me jedno kdo tu javovou verzi psal. Tvuj argument byl, ze je napsana takovym stylem, ze tam bude min chyb z nepozornosti. A stejne tam jsou. Tudiz je podle me predpoklad mylny. Imperativni pristup nijak nezvysuje citelnost/prehlednost/udrzovatelnost  kodu. Spis naopak.

Nemyslím si, ze by chyba v nejake nahodne vybrane ukazce kodu na netu byla statisticky vyznamna. Ano, v prehlednem a snadno citelnem zapisu bude mene chyb. Java takovou syntaxi nema, a nahrazujes pouze jednu neprehlednou formu druhou a to at to napises zpusobem jakym chces. Pricemz ja tvuj styl zapisu povazuji za zvlast neprehledny.
Chapu. Je to tvuj nazor. Docela by me zajimalo jestli je vas s tim nazorem vic.

.

Re:Typový system versus unittesty
« Odpověď #955 kdy: 31. 10. 2018, 01:19:45 »
Mel bys priklad? Zajimal by me ten nesvar u perlu nebo pythonu... jak to vypada.
Než jsem stačil odpovědět, tak jsou tady příklady. Pokud vezmu uvedený příklad
Kód: [Vybrat]
import sys

h, m = {}, 0
for l in sys.stdin:
    h[l] = h[l] + 1 if l in h else 1
    if  m < h[l]:
        m = h[l]
print len(h), m
tak řádek
Kód: [Vybrat]
h[l] = h[l] + 1 if l in h else 1 má významně vyšší hustotu informací než ostatní řádky. Neříkám, že je špatně, v Pythonu je to celkem idiomatická konstrukce, jen to vypichuju jako ten příklad.

Imho nemá vyšší informační hustotu, než třeba ve většině jazyků běžný for( ; ; ), takže se to ničemu běžnému nevymyká. Zajímavé je, že tě nezaujalo hůře čitelné 'max = max > h[l] and max or h[l]' u jazyku Lua, který dáváš za vzor jazyka, který má údajně hustotu rovnoměrnou. Pokud je řádek krátký a dobře čitelný, není jednořádkový if na škodu, právě naopak, dělá program přehlednější a pro složitější podmínky má python if klasický, nezatížený vatou prázdných řádků se závorkou, jak je ostatně vidět o řádek níž.
Nic jsi nepochopil.
1. Jestli to nevidíš, tak jsi prostě slepý.
2. Argumentovat výrazem, který ve všech těch jazycích bude vypadat zhruba stejně je další nesmysl. Bavíme se o konstrukcích jazyka, ne o tom, jak kdo dokáže znepřehlednit program složitými výrazy.
3. Já nebojuji žádnou válku proti Pythonu, tak se uklidni. Dal jsem k dispozici (podle mne) zajímavý názor, pokud se ti nezamlouvá, tak si řekni, že je to kokotina a klidně to tu napiš. Ale z toho co jsi sem napsal to spíš vypadá, že máš pocit, že jsme ti sebrali lopatičky a tvé argumenty se snaží vyvrátit něco, s čím nikdo nepolemizuje.
4. Poznámka o for cyklu je dobrá.

Petr

Re:Typový system versus unittesty
« Odpověď #956 kdy: 31. 10. 2018, 07:27:49 »
Mel bys priklad? Zajimal by me ten nesvar u perlu nebo pythonu... jak to vypada.
Než jsem stačil odpovědět, tak jsou tady příklady. Pokud vezmu uvedený příklad
Kód: [Vybrat]
import sys

h, m = {}, 0
for l in sys.stdin:
    h[l] = h[l] + 1 if l in h else 1
    if  m < h[l]:
        m = h[l]
print len(h), m
tak řádek
Kód: [Vybrat]
h[l] = h[l] + 1 if l in h else 1 má významně vyšší hustotu informací než ostatní řádky. Neříkám, že je špatně, v Pythonu je to celkem idiomatická konstrukce, jen to vypichuju jako ten příklad.

Imho nemá vyšší informační hustotu, než třeba ve většině jazyků běžný for( ; ; ), takže se to ničemu běžnému nevymyká. Zajímavé je, že tě nezaujalo hůře čitelné 'max = max > h[l] and max or h[l]' u jazyku Lua, který dáváš za vzor jazyka, který má údajně hustotu rovnoměrnou. Pokud je řádek krátký a dobře čitelný, není jednořádkový if na škodu, právě naopak, dělá program přehlednější a pro složitější podmínky má python if klasický, nezatížený vatou prázdných řádků se závorkou, jak je ostatně vidět o řádek níž.
Nic jsi nepochopil.
1. Jestli to nevidíš, tak jsi prostě slepý.
2. Argumentovat výrazem, který ve všech těch jazycích bude vypadat zhruba stejně je další nesmysl. Bavíme se o konstrukcích jazyka, ne o tom, jak kdo dokáže znepřehlednit program složitými výrazy.
3. Já nebojuji žádnou válku proti Pythonu, tak se uklidni. Dal jsem k dispozici (podle mne) zajímavý názor, pokud se ti nezamlouvá, tak si řekni, že je to kokotina a klidně to tu napiš. Ale z toho co jsi sem napsal to spíš vypadá, že máš pocit, že jsme ti sebrali lopatičky a tvé argumenty se snaží vyvrátit něco, s čím nikdo nepolemizuje.
4. Poznámka o for cyklu je dobrá.
Nezlob se, ale ublizene mi znis ty sam.
ad 0) jak muzu mit dobrou poznamku o for, kdyz jsem nic nepochopil?
ad 1) neni jasne o cem mluvis
ad 2) neni to nesmysl, je to dukaz toho, ze lua ti nebrani psat informacne ruzne huste radky, neni to totiz jen vec jazyka, ale i programatora, viz ty dalsi ukazky javy, ktere to řadne 'vylepsily' a jejich autori jsou dokonce presvedceni ze je to tak lepsi
ad 3) jsem klidny, jen poukazuji na tvuj omyl, python se informacni homogenitou nevymyka standardu, naopak je v tom spise nadprumerne lepsi, protoze ma malo syntakticke vaty. Obecne si nemyslim ze je to kokotina, byt jsi to napsal spatne, ma to racionalni zaklad. Zakladni problem neni informacni nehomogenita, zakladni problem jsou slozite vyrazy na jednom radku u kterych se pri cteni kodu zadrhnes a chvili trva, nez je pochopis. Kdyz ten zapis udelas informacne homogenni tak, ze vsechny radky budou huste a zadrhnes se u vsech, tak to bude porad spatne. Takze a) je potreba mit informacni hustotu takovou, aby zapis byl snadno a rychle pochopitelny a to je spis vec programatora nez jazyka a b) je potreba se zbavit vaty, coz je predevsim vec jazyka.

v

Re:Typový system versus unittesty
« Odpověď #957 kdy: 08. 11. 2018, 18:59:53 »
co je "typ"?

Re:Typový system versus unittesty
« Odpověď #958 kdy: 08. 11. 2018, 19:13:02 »
co je "typ"?
metadata k hodnote?

An

Re:Typový system versus unittesty
« Odpověď #959 kdy: 09. 11. 2018, 00:19:17 »
co je "typ"?
metadata k hodnote?

metadata to je neco vagniho, to muze byt treba cas vytvoreni.

Datovy typ je spis dvojice: mnozina hodnot a mnozina operaci, ne?