No je to opět otázka míry. Pokud někdo vymyslí v dnešní době jazyk, v němž jeden číselný typ sčítáme pomocí infixového operátoru a u druhého se musí použít funkce typu add() protože proto, je to IMO dost podivné, to se dá těžko okecat nějakou ortogonalitou, když trpí konzistence.
To ale nemluvis o Go, ne? Nepamatuju se, ze bych potkal funkci add().
Go ma bambilion problemu, o tom me vubec nemusis presvedcovat, sam si u nej casto rvu vlasy. Treba reseni enumu pres iota a neschopnost kompileru zkontrolovat vycerpavajicnost jejich zpracovani, to je vylozene na pet let na tvrdo Jak rikam, Rust je mi sympatictejsi.
Koukám třeba sem:
https://golang.org/pkg/math/big/#pkg-examples - konkrétně u příkladu Fibonacci:
// Compute the next Fibonacci number, storing it in a.
a.Add(a, b)
Dobré psycho. Ale to není všechno, z jiného příkladu:
return term.Add(term, frac)
Abych si mohl sečíst 2 čísla typu BigNum, musím si:
1. Vytvořit obě čísla pomocí new()
2. Naplnit si je nějakou Set* metodou
3. Sečíst si je in-place do nějaké proměnné
Když tuhle operaci chci udělat ve funkci a ty dvě čísla si tam pošlu jako parametry a vrátit výsledek, mám dvě možnosti:
a) Použít jako "receiver" jeden z parametrů - pak se ale nejenom vrátí jeho hodnota, nýbrž se změní i obsah proměnné, kterou jsem si poslal přes parametr
b) Vyrobit si ve volané funkci dočasnou proměnnou, použít ji jako "receiver" a vrátit tu
No a když to spletu (když ta funkce je netriviální), chyba je na světě. Určitě je ale možné, že něco přehlížím a že existuje idiomatický způsob, jak to napsat hezky a bez rizika podobných chyb.