Re: Typické použití funktorů?
Pavel Hudeček
edizon na seznam.cz
Neděle Březen 5 22:08:42 CET 2023
Zajímavé je, kromě obsahu, i to, proč právě tahle zpráva byla ve
spamech. Od Vás tam nikdy nic nebylo.
PH
Dne 02.03.2023 v 10:35 Miroslav Mraz napsal(a):
> No tak dobře, chvíli tomu věnovat můžu. Google na mne vyplivl jako
> první tohle
> https://www.geeksforgeeks.org/functors-in-cpp/
> Z toho vyplývá, že jako funktor zde označují třídu, která má přetížený
> operátor (). Já tomu říkám "volatelný" (callable) objekt. Fakticky je
> to příklad funkcionálního programování, kde místo toho abyste říkal
> _jak_ se to má udělat, říkáte jen _co_ se má udělat - tedy provést
> jakousi transformaci transform(), která jako poslední parametr
> akceptuje ukazatel na funkci, functor a zřejmě i lambdu. V takto
> jednoduchém příkladu byste asi napsal místo transform()
> for (int & e: arr) e += increment;
> bez toho balastu okolo ale to už není správně funkcionální.
> Já už jsem starší člověk, tyhle finty mi připadají, že mládež už je
> líná se něco naučit a hledá způsoby, jak si práci usnadnit. Nebyli
> jsme jiní. A funkcionální zápis vypadá, že to nějak půjde - proč sakra
> vysvětlovat překladači, jak přesně má algoritmus fungovat, když stačí
> popsat mu to nějakým jednoduchým (matematickým) výrazem a ať si to
> překladač nějak přebere. A nakonec se objevily vícejádrové procesory a
> bylo potřeba nějak je zkrotit a funkcionální zápis se jeví jako dobrá
> cesta.
> Co se týká té Wikipedie našel jsem
> https://cs.wikipedia.org/wiki/Funktor
> První věta se odkazuje na teorii kategorií a co jsem pochopil z
> diskusí na root.cz, lidi co se tím zabývají jsou něco jako sekta,
> která dovnitř nikoho jen tak nepustí. A ostatní si z toho začínají
> dělat srandu
> https://cs.wikipedia.org/wiki/Abstraktn%C3%AD_nesmysl
> Možná někdo, kdo to chápe časem zpřístupní tuto část matematiky i
> normálním lidem tak jak to dělá třeba prof. Kulhánek, patrně je ještě
> brzy.
> Takže moje odpověď na otázku jak správně používat funktory je nijak.
> Ne, že bych to nikdy nepoužil, ale uvědomte si, že kód po vás bude
> možná číst i někdo jiný a bude chtít tomu rozumět. Přetěžování
> operátorů je hezká věc, ale snažím se tomu pokud možno vyhnout. V
> bare-metal se dají použít lambda výrazy, novější syntaxe for(),
> šablony, constexpr výrazy a asi i jiné vychytávky. Ale vše se musí
> používat rozumně. Psát všechno v šablonách jen proto, že kdosi
> dokázal, že jsou Turingovsky kompletní je blbost.
>
> Mrazík
>
> On 02. 03. 23 0:11, Pavel Hudeček wrote:
>> Zrovna z tohoto směru jsem očekával nějaké povídání v obou významech:-)
>>
>> Funktor v C++ je příbuzný lambda funkcí a jedná se v podstatě o
>> přetížení operátoru (). Typická divná věc, která má nepochopitelné
>> použití, ... až do "Aha okamžiku" náhodného setkání se situací, kde
>> se to hodí.
>>
>> Pak má ještě matematický význam ale můj závěr je, že CZ wiki v tomto
>> případě hovoří cizím jazykem:-)
Další informace o konferenci Hw-list