1321
Vývoj / Re:Násobení matic a automatické přetypování
« kdy: 18. 09. 2015, 10:22:27 »Diskuse se zase zvrtla, tak to shrňme. Jsou tři možnosti:
Vsechny tri moznosti jsou pretypovani, tam ci onde (ta treti je pretypovani po navratu z nasobeni matice). Jediny rozdil je, ze programatori treba v Pythonu chapou jeho typy jako navzajem ruzne, zatimco typovi teoretici to (nekdy) vnimaji jako jeden typ. Jak rikam, typy maji v programovani asi 3 ruzne vyznamy:
- Umoznuji statickou typovou kontrolu
- Indikuji zpusob polymorfismu
- Definuji zpusob ulozeni dat v pameti
V tom tvem tretim pripade jenom kombinujes vyznam slova "typ" 1 a 2, coz je v poradku (protoze slovo typ je zavadejici), ale neni to zadna revoluce. V Haskellu se slovo typ pouziva pro 1. vyznam, v Pythonu pro 2. vyznam, v C pro 3. vyznam (prevazne). Ve vetsine modernejsich jazyku lze kontrolovat vsechny tri vyznamy pomoci ruznych mechanismu (napr. Haskell - typove tridy umoznuji delat vyznam 2).
(I kdyz co umoznuje delat v Haskellu vyznam 3 mi neni jasne. V dobre typovanych jazycich je vyznam 3 neco jako dependency injection, prijde mi, ze je tam nejaka dualita mezi vyznamem 2 a 3 - v podstate dualita mezi typovymi tridami a daty, nebo dualita mezi interfacem a implementaci.)
Takže když mám
Kód: [Vybrat]
func f()->SquareMattix { ...; return SquareMatrix(...) }tak je někde přetypování? Kde přesně? Možná jen přetypováním myslíme každý něco jiného. Pro mě je přetypování něco ve stylu
Kód: [Vybrat]
let m=Matrix(...); return SquareMatrix(matrix)nebo
Kód: [Vybrat]
let m:Matrix=...; return m as? SquareMatrixV prvním případě ale vzniká nový objekt a v tom druhém může vzniknout nil.
) to nejsou schopni pochopit. Je fakt, že příklad by šel asi vymyslet lepší.