Co si myslíte o OOP?

Kit

Re:Co si myslíte o OOP?
« Odpověď #750 kdy: 08. 01. 2019, 21:41:43 »
Taky si to myslím. Typový systém nahradit testy jde.
Nahraď mi prosím typy za testy u tohoto příkladu:
Kód: [Vybrat]
inc (x: Int) = x + 1Každopádně problém místních je v tom, že si nečtou argumenty. Takže za mě končím.
Testy se nedělají na jeden řádek kódu, ale na funkční celek, třeba funkci. Jak typem zkontroluješ, že jsi omylem nenapsal 2 místo 1?
třeba
Kód: [Vybrat]
inc :: Nat n -> Nat (S n)

To vypadá jako kruhová definice. Skutečně to odhalí chybu, když místo čísla 5 tam dám omylem číslo 7?


Sunar

Re:Co si myslíte o OOP?
« Odpověď #751 kdy: 08. 01. 2019, 21:44:36 »
Taky si to myslím. Typový systém nahradit testy jde.
Nahraď mi prosím typy za testy u tohoto příkladu:
Kód: [Vybrat]
inc (x: Int) = x + 1Každopádně problém místních je v tom, že si nečtou argumenty. Takže za mě končím.
Testy se nedělají na jeden řádek kódu, ale na funkční celek, třeba funkci. Jak typem zkontroluješ, že jsi omylem nenapsal 2 místo 1?
třeba
Kód: [Vybrat]
inc :: Nat n -> Nat (S n)
Co je to za jazyk, není to srozumitelné? Dokáže to zajistit to, že hodnota tohoto typu v jedné funkci může být zvýšena právě o jedna, v jiné právě o dva a v třetí může být změněna v závislosti na jiné hodnotě jiného typu a tim zkontrolovat funkčnost funkce? Co v případě, že funkce vrací jiný typ, než je parametr. Je kontrola správnosti funkce součástí vstupního nebo výstupního typu?

BoneFlute

  • *****
  • 2 043
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #752 kdy: 08. 01. 2019, 21:45:18 »
Taky si to myslím. Typový systém nahradit testy jde.
Nahraď mi prosím typy za testy u tohoto příkladu:
Kód: [Vybrat]
inc (x: Int) = x + 1Každopádně problém místních je v tom, že si nečtou argumenty. Takže za mě končím.
Testy se nedělají na jeden řádek kódu, ale na funkční celek, třeba funkci. Jak typem zkontroluješ, že jsi omylem nenapsal 2 místo 1?
inc je funkce.
Otázka nezní zda lze typem zcela nahradit testy, ale vaše opačné tvrzení, že typy lze nahradit testy.

Kit

Re:Co si myslíte o OOP?
« Odpověď #753 kdy: 08. 01. 2019, 21:47:01 »
inc je funkce.
Otázka nezní zda lze typem zcela nahradit testy, ale vaše opačné tvrzení, že typy lze nahradit testy.

V OOP se nebavíme o funkcích, ale o metodách.

v

Re:Co si myslíte o OOP?
« Odpověď #754 kdy: 08. 01. 2019, 21:51:23 »
Taky si to myslím. Typový systém nahradit testy jde.
Nahraď mi prosím typy za testy u tohoto příkladu:
Kód: [Vybrat]
inc (x: Int) = x + 1Každopádně problém místních je v tom, že si nečtou argumenty. Takže za mě končím.
Testy se nedělají na jeden řádek kódu, ale na funkční celek, třeba funkci. Jak typem zkontroluješ, že jsi omylem nenapsal 2 místo 1?
třeba
Kód: [Vybrat]
inc :: Nat n -> Nat (S n)

To vypadá jako kruhová definice. Skutečně to odhalí chybu, když místo čísla 5 tam dám omylem číslo 7?
jasně, tady je kód, přeju příjemnou zábavu
Kód: [Vybrat]
{-# LANGUAGE GADTs, TypeInType #-}

import Data.Kind

data Nat :: Type where
Z :: Nat
S :: !Nat -> Nat

data Nat' :: Nat -> Type where
Z' :: Nat' Z
S' :: !(Nat' n) -> Nat' (S n)

inc :: Nat' n -> Nat' (S n)
inc = S'


v

Re:Co si myslíte o OOP?
« Odpověď #755 kdy: 08. 01. 2019, 21:54:46 »
Taky si to myslím. Typový systém nahradit testy jde.
Nahraď mi prosím typy za testy u tohoto příkladu:
Kód: [Vybrat]
inc (x: Int) = x + 1Každopádně problém místních je v tom, že si nečtou argumenty. Takže za mě končím.
Testy se nedělají na jeden řádek kódu, ale na funkční celek, třeba funkci. Jak typem zkontroluješ, že jsi omylem nenapsal 2 místo 1?
třeba
Kód: [Vybrat]
inc :: Nat n -> Nat (S n)
Co je to za jazyk, není to srozumitelné? Dokáže to zajistit to, že hodnota tohoto typu v jedné funkci může být zvýšena právě o jedna, v jiné právě o dva a v třetí může být změněna v závislosti na jiné hodnotě jiného typu a tim zkontrolovat funkčnost funkce? Co v případě, že funkce vrací jiný typ, než je parametr. Je kontrola správnosti funkce součástí vstupního nebo výstupního typu?
haskell, viz výše, je to typ funkce, která inkrementuje přirozené číslo, pokud by měla dělat něco jiného, měla by jiný typ

Sunar

Re:Co si myslíte o OOP?
« Odpověď #756 kdy: 08. 01. 2019, 22:01:14 »
Taky si to myslím. Typový systém nahradit testy jde.
Nahraď mi prosím typy za testy u tohoto příkladu:
Kód: [Vybrat]
inc (x: Int) = x + 1Každopádně problém místních je v tom, že si nečtou argumenty. Takže za mě končím.
Testy se nedělají na jeden řádek kódu, ale na funkční celek, třeba funkci. Jak typem zkontroluješ, že jsi omylem nenapsal 2 místo 1?
inc je funkce.
Otázka nezní zda lze typem zcela nahradit testy, ale vaše opačné tvrzení, že typy lze nahradit testy.
Nečetl jsem poctivě celou diskusi, ale předpokládám, že takové tvrzení tu nezaznělo. Diskuse běží na téma potřebnosti statických typů k ověření bezchybnosti programu, nikoliv nahrazení typů.

BoneFlute

  • *****
  • 2 043
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #757 kdy: 08. 01. 2019, 22:09:17 »
Taky si to myslím. Typový systém nahradit testy jde.
Nahraď mi prosím typy za testy u tohoto příkladu:
Kód: [Vybrat]
inc (x: Int) = x + 1Každopádně problém místních je v tom, že si nečtou argumenty. Takže za mě končím.
Testy se nedělají na jeden řádek kódu, ale na funkční celek, třeba funkci. Jak typem zkontroluješ, že jsi omylem nenapsal 2 místo 1?
inc je funkce.
Otázka nezní zda lze typem zcela nahradit testy, ale vaše opačné tvrzení, že typy lze nahradit testy.
Nečetl jsem poctivě celou diskusi, ale předpokládám, že takové tvrzení tu nezaznělo. Diskuse běží na téma potřebnosti statických typů k ověření bezchybnosti programu, nikoliv nahrazení typů.

Sunar

Re:Co si myslíte o OOP?
« Odpověď #758 kdy: 08. 01. 2019, 22:17:48 »
Taky si to myslím. Typový systém nahradit testy jde.
Nahraď mi prosím typy za testy u tohoto příkladu:
Kód: [Vybrat]
inc (x: Int) = x + 1Každopádně problém místních je v tom, že si nečtou argumenty. Takže za mě končím.
Testy se nedělají na jeden řádek kódu, ale na funkční celek, třeba funkci. Jak typem zkontroluješ, že jsi omylem nenapsal 2 místo 1?
třeba
Kód: [Vybrat]
inc :: Nat n -> Nat (S n)
Co je to za jazyk, není to srozumitelné? Dokáže to zajistit to, že hodnota tohoto typu v jedné funkci může být zvýšena právě o jedna, v jiné právě o dva a v třetí může být změněna v závislosti na jiné hodnotě jiného typu a tim zkontrolovat funkčnost funkce? Co v případě, že funkce vrací jiný typ, než je parametr. Je kontrola správnosti funkce součástí vstupního nebo výstupního typu?
haskell, viz výše, je to typ funkce, která inkrementuje přirozené číslo, pokud by měla dělat něco jiného, měla by jiný typ
Takze to je tohle? Tedy neco jako preddefinovany test?

Sunar

Re:Co si myslíte o OOP?
« Odpověď #759 kdy: 08. 01. 2019, 22:20:12 »

Sunar

Re:Co si myslíte o OOP?
« Odpověď #760 kdy: 08. 01. 2019, 22:22:14 »
Taky si to myslím. Typový systém nahradit testy jde.
Nahraď mi prosím typy za testy u tohoto příkladu:
Kód: [Vybrat]
inc (x: Int) = x + 1Každopádně problém místních je v tom, že si nečtou argumenty. Takže za mě končím.
Testy se nedělají na jeden řádek kódu, ale na funkční celek, třeba funkci. Jak typem zkontroluješ, že jsi omylem nenapsal 2 místo 1?
inc je funkce.
Otázka nezní zda lze typem zcela nahradit testy, ale vaše opačné tvrzení, že typy lze nahradit testy.
Nečetl jsem poctivě celou diskusi, ale předpokládám, že takové tvrzení tu nezaznělo. Diskuse běží na téma potřebnosti statických typů k ověření bezchybnosti programu, nikoliv nahrazení typů.
Aha, tak to je nesmysl, i testy se opiraji o typovy system.

Kit

Re:Co si myslíte o OOP?
« Odpověď #761 kdy: 08. 01. 2019, 22:29:17 »
Co je to za jazyk, není to srozumitelné? Dokáže to zajistit to, že hodnota tohoto typu v jedné funkci může být zvýšena právě o jedna, v jiné právě o dva a v třetí může být změněna v závislosti na jiné hodnotě jiného typu a tim zkontrolovat funkčnost funkce? Co v případě, že funkce vrací jiný typ, než je parametr. Je kontrola správnosti funkce součástí vstupního nebo výstupního typu?
haskell, viz výše, je to typ funkce, která inkrementuje přirozené číslo, pokud by měla dělat něco jiného, měla by jiný typ

Co takhle použít nějaký objektovější jazyk, třeba Scalu?

BoneFlute

  • *****
  • 2 043
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #762 kdy: 08. 01. 2019, 22:34:32 »
Aha, tak to je nesmysl, i testy se opiraji o typovy system.

Pokud bych tě mohl požádat; začal jsem tento svůj offtopic narážkou na tvrzení, že dynamické typování má nějakou zásadní výhodu proti statickému typování. Zajímalo by mě o jakou jde. Zatím zde žádný z příznivců to nebyl schopen srozumitelně vypíchnout.

Já, jako fanatik do statického typování uznávám dvě(tři) situace:
1. Erlang dokáže za chodu opravovat/upravovat kód. Někde jsem četl (ale možná je to kec), že tam typy nedali, protože se jim nepovedlo vymyslet jak na to.
2. Někdy se hodí, zejména na prototypování, když jsou typy volitelné, a následně to při refactoringu upřesňovat. Protože ze začátku člověk třeba nemá jasno, jak to má vypadat, a tak samozřejmě dost dobře nemůže ty typy určit. V Haskellu například všechno je přísně otypováno, jako kdyby to šlo na produkci. Což může být nepohodlné.
3. Jazyk, nebo člověk neumí typy a nechce se je učit.

Napadá tě něco?

Děkuji.

v

Re:Co si myslíte o OOP?
« Odpověď #763 kdy: 08. 01. 2019, 22:51:03 »
Taky si to myslím. Typový systém nahradit testy jde.
Nahraď mi prosím typy za testy u tohoto příkladu:
Kód: [Vybrat]
inc (x: Int) = x + 1Každopádně problém místních je v tom, že si nečtou argumenty. Takže za mě končím.
Testy se nedělají na jeden řádek kódu, ale na funkční celek, třeba funkci. Jak typem zkontroluješ, že jsi omylem nenapsal 2 místo 1?
třeba
Kód: [Vybrat]
inc :: Nat n -> Nat (S n)
Co je to za jazyk, není to srozumitelné? Dokáže to zajistit to, že hodnota tohoto typu v jedné funkci může být zvýšena právě o jedna, v jiné právě o dva a v třetí může být změněna v závislosti na jiné hodnotě jiného typu a tim zkontrolovat funkčnost funkce? Co v případě, že funkce vrací jiný typ, než je parametr. Je kontrola správnosti funkce součástí vstupního nebo výstupního typu?
haskell, viz výše, je to typ funkce, která inkrementuje přirozené číslo, pokud by měla dělat něco jiného, měla by jiný typ
Takze to je tohle? Tedy neco jako preddefinovany test?
využití expresivního typového systému (GADT, zobecněné algebraické typy)

v

Re:Co si myslíte o OOP?
« Odpověď #764 kdy: 08. 01. 2019, 23:03:53 »
Co je to za jazyk, není to srozumitelné? Dokáže to zajistit to, že hodnota tohoto typu v jedné funkci může být zvýšena právě o jedna, v jiné právě o dva a v třetí může být změněna v závislosti na jiné hodnotě jiného typu a tim zkontrolovat funkčnost funkce? Co v případě, že funkce vrací jiný typ, než je parametr. Je kontrola správnosti funkce součástí vstupního nebo výstupního typu?
haskell, viz výše, je to typ funkce, která inkrementuje přirozené číslo, pokud by měla dělat něco jiného, měla by jiný typ

Co takhle použít nějaký objektovější jazyk, třeba Scalu?
nijak mě to neláká