Citace od: Mirek Prýmek kdy 31. 03. 2016, 12:38:38
Citace od: Ivan Nový kdy 31. 03. 2016, 12:28:29
Ale dá. Co je podstatou deklarativního programování, nevytváříte postup výpočtu, ale soubor pravidel, kterými se výpočet má řidit, takže musíte být schopen poznat pohledem na ten soubor pravidel, že výsledek po jejich aplikaci, bude odpovídat požadavkům. Přičemž nejste ani schopen predikovat, jak velké změny výsledku vyvolá malá změna pravidel. A pak stojíte před problémem, jak poznat, zda výsledek odpovídá zadání.
U imperativního stylu ten výsledek ověřujete po částech jak konstruujete výpočet. Pouze vylučujete co neodpovídá očekávaní, při přechodu z jednoho stavu do druhého, což můžete snadněji předvídat, dá se určit do kterého kroku je výsledek správně, nemůžete však zaručit, že je to zcela správně za všech okolností. Jisté je, že se časem objeví další chyby.
Učebnicová poučka neodpovídající realitě. O kousek výš jsem použil příklad
toInt rawString `andThen` toValidMonth
což je úplně to samé jako imperativní
toValidMonth(toInt(rawString))
I v natolik "deklarativním" jazyce jako je Prolog, se reálně píše tak, že člověk rozdělí problém na kroky, kterými se má výpočet ubírat. A pokud chce, může si zkontrolovat, že po jednotlivých krocích dostává ten výsledek, který očekává.
Ano, a pak přidá jedno pravidlo a výsledek bude prázdná tabulka. Najít proč, znamená zkoušet různé kombinace všech pravidel a hledat s kterým se nově přidané pravidlo vylučuje. Co prolog, stačí CSS a mnohdy je docela oříšek nalézt pravidlo, které vám brání v posunutí obrázku na správné místo. Jen pohledem na vyrenderovaný výsledek a porovnámím se zdrojovými soubory nemáte šanci na to vůbec přijít. Musíte si vypsat, jaká pravidla a v jakém pořadí je renderovací jádro použilo.