[python] (ne)logičnost .join() ?
Radek
radek.hnilica na gmail.com
Pátek Březen 31 13:31:50 CEST 2017
On 23 ún, 08:08, "Petr Přikryl" <prik... na atlas.cz> wrote:
> Každý má jiný pohled na věc a jiná očekávání. Podle mého názoru
> je přístup typu ','.join(kontejner) možná na první pohled nezvyklý,
> ale na druhý pohled je velmi logický. Jde o to, že dokáže spojit
> zadaným řetězcem prvky dodané jakýmkoliv kontejnerem,
> který podporuje iteraci a který vrací řetězcové prvky.
Zajisté, pro implemetátora má smysl to definovat na jednom místě.
Takže by byl dobrý mixin nebo třída která implementuje metody nad
iterabilními kontejnery, a ty iterabilní kontejnery podědí nebo si ty
metody mixnou.
Ale když pracujete tak chcete psat něco jako
neco.jeho_kolekce.transform.sort.jeste_transform.join
a nemáte chuť psát
join(neco.jeho_kolekce.transform.sort.jeste_transform)
obzvláště když ten řetězec chcete na tečce dále zpracovávat.
neco.jeho_kolekce.transform.sort.jeste_transform.join.strip.jiny_transform.split
když to pak přepíšete do závorkové notace, tak je to nečitelné,
protože v závorkové notaci se píše doleva a v tečkové doprava. Pár
takových závorek v tečkovaném výrazu a nevyzná se v tom ani zvíře
které to má v popisu práce.
A nebo jinak. Kolikrát v životě jste potřebovali aplikovat join na
řetězec v tečce?
Já si nepamatuju jediný případ.
> A co se týká "volně rozhozených built-in funkcí", ono jich zase
> tak strašně moc není. Nezvyklé je to hlavně pro lidi, kteří
> pracovali v čistě OO jazyce, který funkce nepodporuje
jo, asi tak nějak. Teď by bodl dokument: "Jak zobjektit Python v
místech kde se tomu brání, resp. kde to ještě nikdo neudělal."
To je asi to nejtrefnější: Přesně v místech kdy Python nesleduje
objektové principy to bolí, a strašně.
Další informace o konferenci Python