Co si myslíte o OOP?

Kit

Re:Co si myslíte o OOP?
« Odpověď #540 kdy: 06. 01. 2019, 04:04:35 »
Pokud se liší typem parametru, tak ano. Ovšem sin(π/6) má reálný parametr, ale racionální výsledek. Také jsem zvědav, jak to staticky natypují.
racionální implikuje reálný, sám sis odpověděl, co je rozhraním

V uvedeném případě je to naopak - z reálného čísla se stává racionální.


BaldSlattery

Re:Co si myslíte o OOP?
« Odpověď #541 kdy: 06. 01. 2019, 04:44:25 »
Pokud se liší typem parametru, tak ano. Ovšem sin(π/6) má reálný parametr, ale racionální výsledek. Také jsem zvědav, jak to staticky natypují.
racionální implikuje reálný, sám sis odpověděl, co je rozhraním

V uvedeném případě je to naopak - z reálného čísla se stává racionální.
On nechtěl racionální čísla, ale zlomky, to sis tam přimyslel. pi/6 je zlomek.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #542 kdy: 06. 01. 2019, 05:01:39 »
Na tom příkladu se sinusem bych chtěl vidět jednu věc: chci, aby parametrem mohl být i zlomek, nejen float...
A výsledek chci mít možnost obojí, podle toho, jak to vyjde, abych neztratil přesnost výpočtu. Ha?
To je triviální, prostě rozhraním.
Díky, člověk rychle zapomene, že je něco takového ve statických jazycích potřeba...

Ve statických jazycích je nutné ho i implementovat nějakou přetíženou metodou.
Kite, Kite. Ty kdyby si tomu aspoň rozuměl, co?

Kód: [Vybrat]
type RatioNum = RatioNum Num
          |  RatioNumFract Num Num
          deriving show

sin :: RatioNum -> RatioNum
sin RatioNum num = ...
sin RatioNumFract num denom = ...

print $ sin (RatioNum 5)
print $ sin (RatioNumFract 5 2)
« Poslední změna: 06. 01. 2019, 05:03:59 od BoneFlute »

Re:Co si myslíte o OOP?
« Odpověď #543 kdy: 06. 01. 2019, 09:33:17 »
Na tom příkladu se sinusem bych chtěl vidět jednu věc: chci, aby parametrem mohl být i zlomek, nejen float...
A výsledek chci mít možnost obojí, podle toho, jak to vyjde, abych neztratil přesnost výpočtu. Ha?

Spolecne rozhrani. Nebo implicitni konerze. Nebo typova trida...

Kit

Re:Co si myslíte o OOP?
« Odpověď #544 kdy: 06. 01. 2019, 09:57:35 »
Na tom příkladu se sinusem bych chtěl vidět jednu věc: chci, aby parametrem mohl být i zlomek, nejen float...
A výsledek chci mít možnost obojí, podle toho, jak to vyjde, abych neztratil přesnost výpočtu. Ha?
To je triviální, prostě rozhraním.
Díky, člověk rychle zapomene, že je něco takového ve statických jazycích potřeba...

Ve statických jazycích je nutné ho i implementovat nějakou přetíženou metodou.
Kite, Kite. Ty kdyby si tomu aspoň rozuměl, co?

Kód: [Vybrat]
type RatioNum = RatioNum Num
          |  RatioNumFract Num Num
          deriving show

sin :: RatioNum -> RatioNum
sin RatioNum num = ...
sin RatioNumFract num denom = ...

print $ sin (RatioNum 5)
print $ sin (RatioNumFract 5 2)

Bavíme se o objektových jazycích. Patří mezi ně i Haskell?


Re:Co si myslíte o OOP?
« Odpověď #545 kdy: 06. 01. 2019, 10:22:21 »
Na tom příkladu se sinusem bych chtěl vidět jednu věc: chci, aby parametrem mohl být i zlomek, nejen float...
A výsledek chci mít možnost obojí, podle toho, jak to vyjde, abych neztratil přesnost výpočtu. Ha?
To je triviální, prostě rozhraním.
Díky, člověk rychle zapomene, že je něco takového ve statických jazycích potřeba...

Ve statických jazycích je nutné ho i implementovat nějakou přetíženou metodou.
Kite, Kite. Ty kdyby si tomu aspoň rozuměl, co?

Kód: [Vybrat]
type RatioNum = RatioNum Num
          |  RatioNumFract Num Num
          deriving show

sin :: RatioNum -> RatioNum
sin RatioNum num = ...
sin RatioNumFract num denom = ...

print $ sin (RatioNum 5)
print $ sin (RatioNumFract 5 2)

Bavíme se o objektových jazycích. Patří mezi ně i Haskell?

Tak si to prepis do Scaly.

O

Re:Co si myslíte o OOP?
« Odpověď #546 kdy: 06. 01. 2019, 13:55:35 »

A já se přitom nemusím bát, že se z nějakého podivného důvodu do nějaké pomocné funkce, která normálně dostává řetězce a volá na ně clear(), dostane jako parametr handle k databázi :)

Jestli potřebuješ staticky typovaný jazyk, aby sis byl jistý, že tvůj kód omylem nepromázne databázi, tak bys měl změnit obor. Nebo si alespoň pořídit hodně kvalitní pojistku na blbost.

Já už jsem ve svém programátorském životě viděl příliš mnoho chyb, které jsem buď sám udělal, nebo jsem je musel opravit, o nichž jsem byl přesvědčený, že nemohou nastat... :)

S trochou nadsázky - programátoři se dělí do několika podmnožin:
  • Ti, kteří dělají chyby, a nevědí, co s tím.
  • Ti, kteří dělají chyby, ale snaží se z nich poučit a snaží se používat nástroje, které jim pomohou chyby lépe odhalovat a odstraňovat.
  • Ti, kteří nedělají chyby.

Programátoři z první podmnožiny potřebují nabrat zkušenosti nebo, když toho nejsou schopni, najít si jiný obor. Programátoři z druhé podmnožiny dávají přednost staticky typovaným jazykům, protože jim pomáhají diagnostikovat chyby. Pro programátory ze třetí podmnožiny jsou lepší dynamicky typované jazyky, protože je nebrzdí v tvůrčím rozletu. Drobný problém je, že třetí podmnožina je prázdná.

Kecy. Sebedokonalejší typový systém za tebe kvalitní kód nevyrobí, prasit se dá v čemkoli. Mnohem více záleží na znalostech, zkušenosti a disciplíně(!) programátora. Sám jsem sice ve své víc než dvacetileté profesní praxi vždy pracoval převážně se staticky typovanými jazyky, ale nevidím ve statickém typování nijak velký přínos, co se týká bezpečnosti a vůbec kvality kódu. Způsob typování představuje jen jeden střípek ve škále vlastností jazyka a v praxi je to nakonec stejně hlavně o člověku, jeho schopnostech a přístupu, ne o nástroji. Nástroj je jen tak dobrý, jak dobrý je jeho uživatel. Kromě toho je zjevné, že dynamické a dynamicky typované jazyky si našly svou niku, ve které se prosadily, a je známkou arogance (nebo hlouposti či nezkušenosti) je jen tak spatra shazovat jako jazyky pro fušery. Ale když černobílé uvažování je tak pohodlné, že?

Inkvizitor

Re:Co si myslíte o OOP?
« Odpověď #547 kdy: 06. 01. 2019, 14:23:44 »
Je to ošetřený a rozhodnutý v době překladu. To je to co mě zajímá.
Nevím, jestli jsme si tady rozuměli. V době překladu víš jenom to, že
1. z externího zdroje dostaneš posloupnost bajtů (vstup uživatele nebo síťový packet)
2. víš, že bys chtěl, aby ta posloupnost bajtů byl nějaký typ (např. integer zakódovaný jako string)

Jestli se tvoje "compile time přání" v run time splní nebo ne - to není nic jiného než dynamické typování.

To zase prrr. Máme 3 funkce, read_int(), print_int() a main(). Napíšu to v pseudokódu volně inspirovaném Rustem:


func read_int(s: stream) -> Result<int, str> {
  buf = stream.read();
  if len(buf) == 8
    Ok(buf.to_integer())
  else
    Err("Invalid size, cannot convert to integer")
}

func print_int(i: int) {
  print("Valid integer {}", i)
}

func main() {
  s = open_stream();
  match read_int(s) {
    case Ok(i) print_int(i)
    case Err(s) print("Error on input: {}", s)
  }
}


Tam nikde žádný dynamický typ není - validace vstupu je ošetřena algebraickým datovým typem. S tímhle se dá pracovat donekonečna. Možnost invalidního/variabilního vstupu zesložiťuje logiku, ale pokud tam nemáme dynamickou deserializaci, která umožňuje načíst zcela libovolné typy ze streamu, statické typování není ohroženo.

Re:Co si myslíte o OOP?
« Odpověď #548 kdy: 06. 01. 2019, 14:52:03 »
Tam nikde žádný dynamický typ není
A proč to žere jenom osmibajtové vstupy?!

Inkvizitor

Re:Co si myslíte o OOP?
« Odpověď #549 kdy: 06. 01. 2019, 14:55:50 »
Tam nikde žádný dynamický typ není
A proč to žere jenom osmibajtové vstupy?!

Ale nežere. Zná dva druhy vstupu, int a noise. Co nemá 8 bajtů, je noise. Způsob ošetření lze samozřejmě zvolit libovolně.

Kit

Re:Co si myslíte o OOP?
« Odpověď #550 kdy: 06. 01. 2019, 15:04:08 »
Tam nikde žádný dynamický typ není
A proč to žere jenom osmibajtové vstupy?!
Ale nežere. Zná dva druhy vstupu, int a noise. Co nemá 8 bajtů, je noise. Způsob ošetření lze samozřejmě zvolit libovolně.

Jak to vyhodnotí vstup "12nazdar"? Jako int nebo noise?

Re:Co si myslíte o OOP?
« Odpověď #551 kdy: 06. 01. 2019, 15:20:20 »
Zná dva druhy vstupu, int a noise. Co nemá 8 bajtů, je noise.
No a dynamicky (až za běhu) rozhoduje o typu => je to dynamické typování.

v

Re:Co si myslíte o OOP?
« Odpověď #552 kdy: 06. 01. 2019, 15:30:33 »
Zná dva druhy vstupu, int a noise. Co nemá 8 bajtů, je noise.
No a dynamicky (až za běhu) rozhoduje o typu => je to dynamické typování.
součtové typy => dynamické typování?

Re:Co si myslíte o OOP?
« Odpověď #553 kdy: 06. 01. 2019, 15:33:56 »
součtové typy => dynamické typování?
rozhodování o typu za běhu => dynamické typování

Kit

Re:Co si myslíte o OOP?
« Odpověď #554 kdy: 06. 01. 2019, 15:40:54 »
Pokud by mnou uvedený string "12nazdar" znamenal číslo 3545017221638283634 nebo prostě osmibajtový string "12nazdar" a tento typ by byl součástí aplikace, jednalo by se o statické typování. Typ noise se nepřipouští.