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