1801
/dev/null / Re:Těžké OOP problémy
« kdy: 13. 11. 2019, 09:49:34 »Tak ono to není nic světoborného. Ale uvedu jeden důležitý případ. Řekněme, že mám objektovou databázi a k ní metodu fetch<T>(T->bool)->[T], která mi má vrátit seznam instancí T, které splňují podmínku danou λ-výrazem, což může být například \person -> person.age >= 18 && person.children.count > 0, prostě libovolný výraz pracující s daty objektu. A teď si představme databázi, kde je objektů chtěného typu miliarda. Asi je zřejmé, že je blbost načítat je z databáze všechny a vyhodnocovat. Takže buď můžu podmínku zapsat jako řetězec a někde bokem rozparsovat (jako s SQL, ale pak překlepy a absence typové kontroly) a použít index, nebo použít nějaký preprocesor, který volání fetch nějak něčím nahradí. Přitom by nebyl problém mít v rámci introspekce (“reflexe”) přístup nejen k datům objektů (to tady taky potřebuju, aby šly objekty uložit do databáze a pak zase poskládat), ale i k ASTu toho výrazu, který mě zajímá. Pak můžu mít přímo v kódu databáze analýzu toho λ-výrazu a použít index, s plnou typovou kontrolou, v rámci jednoho jazyka, bez preprocesorů a skákání na jinou - méně intuitivní - syntax. Když je výraz hodně složitý, může index seznam předfiltrovat a pak se projde a výraz se vyhodnotí (“aspoň něco”). Takto by to bylo plně transparentní a nikdo by se nemusel učit SQL/OQL apod.Jsou ovšem vlastnosti, které jazykům trestuhodně chybí, osobně mám seznam konstrukcí (čistě z praxe)Nenech se ukecávat!
