středa 21. listopadu 2012

Komunismus vs. demokracie. Nebo komunismus+demokracie?

Pan Okamura označil komunismus za asi nejdemokratičtější systém, který svět poznal. Jak se vlastně k sobě má komunismus a demokracie? Jsou to dva neslučitelné systémy, nebo mají mnoho společného?

Jistěže komunismus je velmi demokratický. Když půjdeme do extrému, demokraticky se rozhodne, kdo dostane jakou práci a kdo musí pracovat kolik hodin. Demokraticky se rozhodne, kdo z toho bude co mít. Demokraticky určíme, kdo bude mít jakou pracovní dobu. Když se půjde do hospody, demokraticky se odhlasuje, že bude platit „tamten pán u okna”. (Pokud teda rovnou nezrušíme peníze.)

Komunismus má s demokracií mnohé společné. Ale já asi nejsem moc demokrat. Nechci dělat referendum o barvě sousedových bot. Brzy by mohlo dojít i na moje boty.

Druhá věc je, že ve chvíli, kdy se moc příliš koncentruje, což je i případ silných demokratických států (moc se soustředí přinejmenším v procesu voleb), nastane velká motivace tuto moc získat jen pro sebe. Ať už jde o lehký tuning hlasovacích zařízení, zavedení D'Hondtovy metody nebo kompletní zfalšování voleb. Z části jde navíc o přirozený jev, kdy se rozhoduje o mnoha věcech současně, ale volič má jen velmi malý hlas, takže se mu příliš nevyplatí investovat čas do správného výběru. Dopad správného rozhodnutí na něj bude malý, dopad špatného rozhodnutí též. (Mimochodem, doporučuji Schiffův komentář k prezidentským volbám v USA.) Aniž bych choval odpor k bohatým lidem, právě ti dostávají moc (pokud chtějí) v demokracii. A to zvláště v silném státě, kde je moci hodně na jednom místě.

To nás přivádí k důvodu, proč se období Československa od 1948 do 1989 často nazývá nedemokratické. Ono vycházelo z demokratických principů voleb. Ale moc státu byla tak velká, že se vyplatilo investovat různé prostředky do jejího získání. Ať už šlo o ovládnutí médií pro vytvoření „vůle lidu”, nebo nátlak u voleb.

Podstatné ale je, základním nedostatkem komunismu není absence demokracie. Tím je nerespektování svobody.

pondělí 8. října 2012

Proč je zboží na černém trhu častěji nekvalitní?

Setkáváme se s tím, že zboží z černého trhu je pochybné kvality. Drogy jsou ředěné, alkohol vyroben z denaturovaného lihu. Aspoň se to říká, lvastní výzkum jsem neprováděl. Ale věřme tomu. (A Silk Road nechme na chvilku stranou.) Proč tomu tak je? Je za tím nedostatek regulací či státní kontroly, nebo naopak za to mohou samotné regulace?

Ano, oficiální trh je regulován a státem kontrolován. Máme na to různé úřady, například SZPI. Nabízí se tedy myšlenka, že státní kontrola má na kvalitu blahodárný účinek. Že zákazník je člověk neuvěřitelně hloupý a nechtěl by při absenci SZPI (a dalších úřadů) nezávislý certifikát kvality. (Ten mimochodem platíme už teď z daní. Ale nemůžeme si moc vybírat, úřady mají prakticky monopol. A hlavně privilegium.) Nebo že zákazník kvalitu neřeší a koupí jen to nejlevnější. (Kdy jste si naposledy kupovali potraviny značky Euroshopper?)

Černý trh = volný trh?

Na první pohled se opravdu může zdát, že černý trh nezná regulace a je na nich nezávislý. To je ale chyba. Na černý trh mají regulace přímo zásadní vliv. Bez nich by tento velmi specifický trh (jak si brzy ukážeme) ani nemohl existovat.

Určitý druh privilegií

Je určitě pravda, že se černý trh snaží působení regulací vyhnout. Umí to ale každý? Troufli byste si na to?

Zatímco na skutečně volném trhu by o tom, kdo může co vyrábět, prodávat a distribuovat rozhodovaly zejména schopnosti co možná nejlevněji vyrobit/dopravit/nakoupit co nejžádanější (a tedy i dostatečně kvalitní) výrobek, na černém trhu tyto schopnosti jsou více či méně upozaděny. Vyrábět, prodávat a distribuovat mohou ti, kteří si na to troufnou. Ti, kteří se nebojí kontrolních orgánů. Ti, kteří umí výrobu utajit. Mafiánské zázemí výhodou. To je ale teprve to menší privilegium.

Korupce kontrolních orgánů

Kontrolní orgány mají velkou moc. Pokud se jim člověk neumí vyhnout, mohou mu jeho podnikání zastavit nebo aspoň znepříjemnit. Koncentrace moci ale není obvykle nic dobrého. Lidé jsou úplatní a kontrolní orgán není až tak závislý na tom, jestli ho chce někdo (kromě vlády) financovat. A jaké morální zábrany mohou mít lidé, kteří se nebojí jiným říkat, co je pro ně dobré, a tento názor vynucovat silou?

Korupce typu „nechte nás být” by sama o sobě nevadila. Ta pouze snižuje účinnost restrikcí. Problém je zatím „jen” v tom, že bez této korupce je obtížné se na trh dostat. Jak ale upozornil Murray Rothbard, nabízí se zde i jiné možnosti. Kontrolní orgán má moc udělovat privilegia. Bude přehlížet jednoho výrobce, ale o to víc půjde po ostatních. A když se to dobře podá, lid mu za to ještě zatleská.

Nutnost utajení

Jaké značky marihuany znáte? Kterou byste mi doporučili, když ještě nemám zkušenost? Která značka je dostatečně kvalitní, ale ne zbytečně drahá? Dočtu se tuto informaci na diskusním fóru? Kde tuto značku marihuany nakoupím?

Jak je patrné, zákazník chce jisté informace. Zvlášť pokud chce kvalitu. Ale tytéž informace zajímají i policii, která by mohla začít konat. Takže informace buď jsou dobře dostupné a výrobce navštíví policie (a moc dlouho na trhu nezůstane), nebo jsou špatně dostupné. Obojí zákazníkovi škodí, pokud chce kvalitní zboží.

Dokonce může nastat snaha vystupovat pod cizí značkou. To se asi nebude týkat marihuany, která je postihována jako taková. Ale alkoholu ano. Vystupování pod cizí značkou je zavrženíhodné a jde o klamání zákazníka. Prostor je pro to vždy. Ale na černém trhu se to může stát nutností, protože vlastní značka by budila pozornost například finančního úřadu. Paradoxně tak cizí značka může představovat nižší riziko než vlastní či žádná značka. Na zavrženíhodnosti se tím nic nemění, ale na motivaci ano.

Absurdní způsoby výroby

Ve výrobě alkoholu se až tak nevyznám, ale něco je jasné: Vyrobit alkohol, přidat do toho sajrajty (aby se to nedalo pít) a následně z toho ty sajrajty jinými sajrajty dostávat ven (aby se to dalo pít) je dost neefektivní proces a na skutečně svobodném trhu by v konkurenci kvalitnějšího alkoholu s nižšími výrobními náklady těžko obstál. Přesto se to na černém trhu vyplatí. Nejspíš je přímá výroba alkoholu příliš dobře odhalitelná. Náročná asi není (to jen odhaduji), ale teoreticky i to by mohlo být vysvětlení, protože na černém trhu není odbornost při výrobě to nejdůležitější.

A nemusíme zůstávat jen u alkoholu. Jistě jste již někdy slyšeli o pokoutním domácím vaření pervitinu a možná i o nějakém výbuchu. Nechci hájit ohrožení okolí výbuchem. Ptám se ale: docházelo by k tomu, kdyby na výrobě pervitinu nebylo co skrývat a mohli jej vyrábět specialisté v továrnách?

Kdo z toho profituje a komu to škodí?

Ačkoli jde snad výhradně o regulace výrobců, právě ti na tom mohou profitovat. Ale jen někteří – zejména ti na černém trhu. Mají totiž dost redukovanou konkurenci. A i pokud existuje legální konkurence (třeba u alkoholu), stát ji háže klacky pod nohy. Díky tomu si mohou i za nezdaněný alkohol účtovat cenu jako za zdaněný. Nižší cena by byla podezřelá. Už v roce 2010 se to prý týkalo skoro poloviny trhu s alkoholem.

Ačkoli zákazník není regulován (nebo jen málo), právě on je jednoznačně těmito regulacemi poškozen, protože platí vyšší cenu za nižší kvalitu na málo konkurenčním trhu. Poškozeni jsou i případní legální výrobci. A také všichni, kdo chtěli uspokojovat přání zákazníků svými kvalitními výrobky, ale neměli odvahu či schopnost restrikcím či zákazu vzdorovat. Práci jim sebrali méně odborní, kteří by se na skutečně svobodném trhu v této oblasti neuchytili.

Silk Road: zázrak na černém trhu?

Možná mi někdo bude oponovat tržnicí Silk Road. Tam údajně lze nakoupit kvalitní nelegální zboží. (Nezkoušel jsem.) Ale právě Silk Roadu se povedlo (aspoň prozatím) překonat některé (ne všechny) zmíněné problémy. Například dostat se k fyzické identitě prodejce sice není snadné, ale přitom si prodejce buduje reputaci a má svůj nick (obdoba značky). Stále to není ideální, protože v případě podvodu nelze použít soud ani podobnou instituci, ale patrně i samotná reputace je pro prodejce velmi důležitá, když 98 % hodnocení je kladných. Regulační úřady zde zřejmě nefungují, ale nejspíš tu až tak nechybí.

Není jasné, jestli nenastane nějaké větší sledování pošty, ale zatím to asi vychází. Silk Road nevyřešil přímo restrikce, ale je možno vyrábět ve velmi odlehlých oblastech, kde jsou restrikce minimální (nebo není tak těžké je obcházet), soustředit se na kvalitní výrobu a distribuci nechat na prostředníkovi. Silk Road tak umožnil černý trh přiblížit podmínkám skutečně svobodného trhu, aspoň prozatím. A nese to své ovoce. Buďme rádi. Kéž by k takovéto transformaci došlo na větší části černého trhu. Alkohol k pití jsem na Silk Roadu zatím nenašel. Pokud se objeví, možná to bude brzy bezpečnější než nákup alkoholu v samoobsluze v ČR. Zvlášť pokud Heger prosadí další zvýšení spotřební daně z alkoholu.

Jsou výrobci/prodejci/distributoři na černém trhu špatní?

Je pravda, že černý trh zvýhodňuje mafii a podobné. Ale na druhou stranu bych neodsuzoval všechny. Věřím, že někteří se prostě jen umí skrýt a využívají situace, která nastala nezávisle na nich. Bez nich by to pro zákazníka bylo ještě horší – ještě méně konkurence, ještě menší výběr, ještě vyšší ceny apod. Neodsuzoval bych paušálně.

Pár slov závěr

Pokud se někdo bude tvářit, že ví, co lidi chtějí, lépe než oni sami, je na místě přemýšlet. Nejspíš jako řešení nabídne nějakou regulaci či další speciální daň. Odhlédnu-li od té odvahy rozhodovat za někoho proti jeho vůli (a bez jeho souhlasu), výsledný účinek může být jiný než slibovaný. Přemýšlejme v souvislostech – komu se to hodí, komu to uškodí, kdo a jak se přizpůsobí a co si kdo promítne do ceny. Pokud něco nesedí, nebojme se na to upozornit okolí. A podle mých zkušeností často něco nesedí.

čtvrtek 9. srpna 2012

Stát vs. rodina: Kdy komunismus ani socialismus nebude fungovat

Ačkoli si to možná nepřiznáváme, s komunismem se většina (i z nás mladších) setkala a dokonce i mnohdy fungoval. Bylo to v rodině. Proč může fungovat v rodině, ale fatálně selhává na úrovni státu? Čím se rodina od státu tak zásadně liší?

Kdy komunismus může fungovat?

Aby komunismus mohl fungovat, musejí být splněny určité podmínky:

  1. Členové musejí mít chuť a morální sílu myslet na druhé, pomáhat jim a nezneužívat svých možností. Pár poznámek k tomu:
    • Tuto podmínku nejde dobře splnit bez dobrovolnosti. Pokud jsem k něčemu druhými nucen, budu to provádět spíš tak, aby se neřeklo. Bez nadšení pro věc.
    • Také je těžké tuto podmínku splnit bez možnosti trestu v nějaké podobě.
    • Pro čisté příjemce může být trestem i odchod dárců. Možnost odchodu dárců je negativní motivace i pro příživníky z povolání a zároveň podmínka dlouhodobé dobrovolnosti. (Teoreticky by člověk mohl dát jednou pro vždy dobrovolný souhlas, ale pokud si to časem rozmyslí, nebude se jako dobrovolník chovat.)
  2. Musí být nějakým způsobem pokud možno všem co nejlépe zřejmé, co chtějí druzí, aby se tomu mohli přizpůsobit.

Možná tyto dvě podmínky jsou i postačující, můžete se k tomu vyjádřit v diskuzi. Každopádně se rodina od státu dost zásadně liší v tom, jak jsou tyto podmínky splněny.

Situace v rodině

Po založení rodiny

Rodina začíná dobrovolným svazkem muže a ženy. (Nebudu teď řešit, jestli je ten svazek stvrzen úřadem, církví, smlouvou či třeba kmenovým náčelníkem – to je tady nepodstatné.) Tento svazek vzniká dobrovolně. I přes určité možné komplikace může v některých případech zaniknout. (Za určitých podmínek se to týká i křesťanských svazků, jen tak na okraj.) Do tohoto svazku zřejmě obvykle dobrovolně vstupují jen lidé, kteří se už do jisté míry znají, mají se rádi apod. Splnit obě podmínky není v této chvíli problém. Aspoň většinou.

Malé děti

Po čase se přidávají děti. Ty zde do určitého věku představují v mnoha ohledech čisté příjemce. I když si samy nevybraly rodinu, do které se narodí, mají přinejmenším motivaci zůstat. Viděli jste už malé dítě, kterému maminka pohrozila, že ho tedy nechá být a odejde? Už takto malé dítě má do jisté míry ekonomický styl myšlení a vidí, že by ztratilo více, než by získalo. (V ekonomii nejde zdaleka jen o peníze.) Dítě sice v této chvíli nemá možná moc dobrou představu, po čem touží maminka a tatínek, ale stejně je zpočátku spíše příjemcem.

I rodiče v tom jsou značnou měrou dobrovolně. Dítě si nechali, ačkoli mohli udělat radost některému bezdětnému páru. Ano, dál je už té dobrovolnosti méně (nepočítáme-li krajní možnost – opustit dítě a ponechat jej svému osudu), ale mají pro případ zlobení k dispozici celou škálu trestů, kdyby nic jiného. To neznamená, že musí všechny využít. Někdy stačí pohrozit. I přesto ale bývá mezi rodiči a dětmi dobrý vztah. Lidé, kteří mají hrůzu z malých dětí, zřejmě využijí v dostatečné míře antikoncepci a děti mít nebudou.

Dospívající děti

Časem se situace pochopitelně mění a děti dospívají. Stávají se samostatnějšími. Na jednu stranu možná odpadávají z různých důvodů tradiční tresty, ale možnosti tu pořád jsou, pokud si nevydělává. Pokud si už vydělává víc než symbolicky, jsme ve stádiu, kdy může jít z domu, nebude-li soužití vítáno. Teď je celkem jedno, kdo se tak rozhodne – jestli rodiče, či děti. (Často k tomu ale nakonec nedochází kvůli špatným vztahům, ale třeba kvůli založení vlastní rodiny. To můžeme brát jako dobrý výsledek.)

Jen tak na okraj

Můžete namítnout, že i v rodině mohou fungovat například oddělené finance. Nic proti tomu. Splnění těch dvou podmínek neznamená, že komunistické principy budou nevyhnutelné. Pokud manželé chtějí, mohou si mezi sebou třeba účtovat úplně všechno. Pokud jim to bude tak vyhovovat, budu ten poslední, kdo jim v tom bude bránit. A pokud jim to nevyhovuje, proč by to dělali?

Situace ve státě nebo ve velké oblasti

Stát je celkem velké území. Jeho obyvatelé jsou relativně různorodí. (Klidně všichni mohou být třeba černoši, i pak budou nejspíš dostatečně různorodí v charakteru.) Každý zná sice své nejbližší okolí (ne nutně geograficky), ale ostatní většinou vůbec. Lidé mají různé názory a ne každý bude chtít komunismus. (Například já nechci komunismus na úrovni státu.) Nepůjde to tedy asi udělat moc dobrovolně, z čehož plynou další problémy. Zcela určitě se v takovém množství lidí navíc najde někdo nečestný, kdo situace bude zneužívat. Přinejmenším je tu lákavá možnost se stát free riderem.

Situace bez centrální autority

Pokud bychom uvažovali nad nějakou společností bez centrální autority, nejspíš by v komunistické formě dlouho nevydržela. Jak by přibývalo free riderů, ubývala by motivace. A protože by nebyla nějaká moc, která by společnost mohla při komunismu udržet, lidé by začínali komunismus postupně opouštět. Motivace udržet komunismus by se vytratila asi jako u tohoto příběhu o přerozdělování známek. Teď není podstatné, jestli ten příběh je pravý, nebo smyšlený. Tady bych ale věřil ve šťastný konec v podobě přechodu na tržní hospodářství.

Situace s centrální autoritou – centrální plánování

Druhá možnost je, že máme nějakou centrální autoritu, která provádí centrální plánování. To všechny problémy ještě zvětšuje. Centrální plánovač má velkou moc, ale často schází brzdné mechanismy. Zneužití moci, která mu byla přidělena, je často lákavé, a o moc se často zajímají především grázlové. Můžeme ostatně nahlédnout před rok 1989. Člověk se sice nedoslechl o korupci v novinách, ale spíš proto, že si to tam nikdo nedovolil napsat, když už se to dozvěděl.

I kdyby ale všichni lidé byli čestní, centrální plánování nebude fungovat dobře. Na rozdíl od trhu zde nejsou signály, které by říkaly, co si lidé přejí a co ne. Není tu informace (natož motivace) v podobně možného zisku či možné ztráty. Omyl na trhu je prostor pro konkurenci, která to udělá lépe, nebo pro spekulanty či překupníky, kteří pomohou s optimální cenou. Naproti tomu omyl v centrálním plánování nemá snadné řešení, zvlášť pokud si centrální plánovač není schopen svůj omyl připustit. Může mít ale velké následky. To, že si centrální autorita není ochotna připustit svůj omyl, nemusí nutně být projevem nečestnosti ani ješitnosti. To může ostatně být problém i ve velkých firmách jako třeba Nokia a pramenit to může i jen z nepochopení. V případě firem to ale řeší konkurence, v případě státu nikdo.

Závěr

Závěr z toho mi vychází celkem jasně: Až někdo bude říkat, že komunistické principy fungují v mnoha rodinách a tedy mohou fungovat i na úrovni státu, nenechte ze zmýlit. V rodinách sice můžeme mnohdy narazit přinejmenším na prvky blízké komunismu, ale situace v rodině se od státu zásadně liší.

pondělí 23. července 2012

Zvyšují prostředníci ceny?

Nedávno jsem četl článek Žijeme ve světě digitálních prostředníků, který kritizoval prostředníky. Začal tím, že v Řecku se zemědělci zbavili prostředníků v obchodu s některými potravinami a tím došlo ke zlevnění. Potom pokračoval situací u hudby a placení přes internet. Autor sice nenapsal explicitně, že by každý prostředník nutně jen zdražoval, ale vyzval k provozu vlastních mesh sítí. Článek to byl inspirující, ačkoli s ním nesouhlasím. Přiměl mě k k zamyšlení, které vyústilo v napsání tohoto článku.

Já jsem za prostředníka rád!


Když dělám někomu web, využívám prostředníka. Nesháním si zákazníky sám, nejednám přímo o smlouvách. Někdy sice se zákazníkem komunikuji přímo, ale ne vždy. Grafika jsem nesehnal já. A proč to takto dělám? Nebylo by výhodnější si všechno vyřešit sám a vykašlat se na prostředníky, kteří to jen prodražují?

Ne tak docela. Pokud si představím, že bych toto všechno měl řešit sám, nevím, jak bych to zvládal. Asi nějak ano. Místo programování bych z části řešil i tyto záležitosti. V těch bych ale asi nedosahoval až takových výsledků. Proto je pro mě nejspíš lepší tyto záležitosti nechat na někom jiném a nějak ho (de facto) zaplatit. (Formálně šéf platí mě. Ale ve skutečnosti je jeho výdělek provizí z toho, co vydělám já, grafik a další.) Paradoxně tak můžu vydělat víc peněz - kdybych dělal i to, co mi nejde až tak dobře, a nenechal to na nějakém šéfovi, strávil bych zbytečně mnoho času činností, ve které já nejsem příliš produktivní.

Co je špatného na zmíněných příkladech?


Řekněme si především jednu věc: neříkám, že každý prostředník musí být užitečný. Nemusí. Ale jsou případy, kdy užitečný je. Možná jsou to dokonce všechny tři případy zmíněné ve článku.

Řečtí zemědělci

Ano, je fakt, že někteří zemědělci dříve prostředníka používali a dnes již ne. Starý prostředník byl příliš nákladný, tak se zemědělci rozhodli ho vynechat. To je naprosto vpořádku, použití prostředníka není dogma. Je to pořád ale jen statický pohled, kdy se díváme na současnou situaci, kde vynechání prostředníka je výhodnější. Zítra mohou najít lepšího prostředníka. Jestli najdou? Nevím, nejsem zemědělec a nevím, jaký je zde prostor. To už nechám na nich. Je přece i v jejich zájmu to vyřešit co nejlépe.

Možná se ptáte, proč to muselo trvat tak dlouho. Odpověď se v případě zemědělství nabízí: jde o velmi dotovanou oblast. Zjednodušeně řečeno, pokud je možno více peněz získat lepším vyplněním žádostí o dotace než zefektivněním výroby a distribuce, přijdou na řadu prioritně ty dotace. Na ostatní se řada taky (snad) dostane - pokud dotace vyschnou nebo pokud zde už není moc prostoru pro zlepšení.

Hubda


Tady si propůjčím pár vět od Víta Kučíka ze článku iMarxism Now! – bitva o svobodu a autorská práva.

Každá část tohoto řetězce má svou důležitost, která je dána momentální situací na trhu a technologickým stavem společnosti. V minulosti byl problém cokoliv produkovat, primární výrobci byli vzácní, proto také shrábli většinu hodnoty výsledného produktu. Distribuční kanály byly neduživé, pokud nějaké existovaly. Dnes není problém levně produkovat - svět je přeplněn zbožím, ovšem problémem je ho prodat, tj. najít cestu k zákazníkovi, který jej umí ocenit. Proto dnes získávají větší váhu různí obchodníci a distributoři (tj. majitelé distribučních kanálů), protože schopnost prodat je vzácnější než schopnost vyrobit. Když to vztáhneme na hudební průmysl, tak složit zajímavou píseň umí ve svých garážích miliony kapel. Umět je prodat milionům fanoušků však umí jen několik málo distribučních firem. Je tedy logické, že tito distributoři budou mít na ceně výsledného CD větší podíl, než samotný autor a tento „poměr sil“ se promítne také do vzájemných smluv o autorských právech.

Má to svou logiku. Hudebníci mají možnost prodávat bez prostředníka. Proč ji tedy nevyužívají, když by měla být výhodnější? Ano, nejspíš protože by výhodnější nebyla.

Platby na internetu

Platba jako taková není úplně triviální proces. Ano, mohli bychom používat BitCoin. Ale ani tady si nejsem jist, že by to šlo zcela bez prostředníků. Navíc té méně můžeme něco vytknout. Mnohým dnes bude ještě vadit, že nemá svoji fyzickou podobu. (Ne, zlaté mince, které měly danou cenu v době výroby, nepovažuji za fyzický BitCoin.) Ta by vlastně mohla existovat asi jen ve formě poukázky na skutečný BitCoin. Ale na vydávání těchto poukázek bychom potřebovali... bychom potřebovali prostředníka.

Na jednu stranu má BitCoin zajímavé vlastnosti, na druhou stranu má i svoje nedostatky. Zastánci centrálního plánování by mu vytkli nemožnost měnové politiky. Já to považuji spíše za výhodu, ale zase si říkám, že ta měna není kryta zlatem či jinou komoditou. Z principu nemůže být. Není možné nějak určit pevný směnný poměr mezi zlatem a BitCoinem. Pro vytvoření BTC není potřeba zlato nikam složit.

Pokud opustíme BitCoin, je nám asi jasné, že bez prostředníků to nejde, maji-li platby proběhnout rychle, pohodlně a bezpečně. Druhá strana potřebuje nějakou záruku, že peníze dostane, ale nemáme možnost jí je snadno fyzicky doručit. Tady se prostředník důvěryhodný pro obě strany hodí - sice si něco vezme, ale je asi pořád levnější a rychlejší než platba v hotovosti.

Když už jsme u té hotovosti, ani platby u obchodníka nemusejí být nevýhodné. Hotovost je nutné počítat, ověřovat falešné bankovky, řešit bezpečné skladování (trezor?) a bezpečný přenos (obrněný vůz?). Netroufám si odhadovat, ale někdy mohou tyto režijní naklady vyjít dráž než poplatek prostředníkovi za platbu kartou. Každopádně, až tak nevýhodné to nebude, pokud obchod běžně tuto možnost nabídne koncovému zákazníkovi bez příplatku. Nekaretní zákazníci ty karetní asi nedotují, pak by totiž šlo zrušením podpory karet zvýšit zisk. Naopak tomu asi taky nebude, pak by stačilo nepřijímat hotovost.

Kdy se prostředníci vyplatí?

Napadají mě tři případy, kdy se prostředníci mohou vyplatit.:

  • Prostředník něco umí lépe než já
  • Prostředník spojí více úkolů a bude tak efektivnější – například doprava malého balíku z Brna do Prahy by byla zbytečně drahá (časová náročnost, benzín, ...). Pokud to nespěchá, je pro mě lepší použít nějakého dopravce, který na této trase poveze kupu balíků a může si dovolit nižší cenu.
  • Prostředník něco umí sice hůř než já, ale jeho práce je levnější. Pro lepší vysvětlení přidám citát ze článku The Freeman: Společenská spolupráce: Klíčové jsou totiž náklady obětované příležitosti. Právník, který si účtuje 500 dolarů za hodinu a zároveň je to nejrychlejší písař na světě, si radši na psaní někoho najme. Proč? Protože každou hodinu, kterou onen právník obětuje psaní, se nemůže věnovat právničině, což ho stojí právě 500 dolarů mínus mzdu, kterou by zaplatil písaři. Písař takové náklady obětované příležitosti nemá, takže jak právník, tak písař na spolupráci získají

Nejlepší způsob, jak to rozhodnout, je svobodná volba – každý použije prostředníka jen tehdy, když je to pro něj výhodnější.


úterý 24. ledna 2012

Pirátství: právo, nebo krádež?

Začal jsem psát názor ke článku Hudba se začala krást s jánošíkovskými úmysly, říká zpěvák Dan Bárta, ale přišlo by mi škoda ho nepublikovat i sem.

Když si chci koupit software nebo hudbu, může po mě autor nebo obchodník chtít různé podmínky. Já s nimi mohu souhlasit, nebo je odmítnout. Pokud po mě bude chtít, abych to dílo nešířil dál, a já mu to odsouhlasím, je zcela legitimní to vymáhat.

Na druhou stranu, pirátství je určité podnikatelské riziko. Když jdu do banky pro úvěr (ponechám stranou podporu ze strany ČNB), banka si do úroků taky započítá určité riziko. Autorské poplatky, PIPA a SOPA tedy u mě nejsou legitimní jakožto presumpce viny a přílišný zásah státu. Také nesouhlasím se zavřením Megauploadu, aspoň za těch podmínek, za kterých proběhlo.

Pak by například banky mohly chtít, aby byly vybírány „preventivní neplatičské poplatky” z nemovitostí nebo dokonce všeho zboží nad určitou cenu. Zvlášť u služeb a věcí rychle ztrácejících hodnotu a u věcí určených k rychlé spotřebě. Tak je pčece riziko, že na to budu mít úvěr, který pak nebudu schopen splatit! Vznikl by OSB (Ochranný svaz bank), kterému by se všechny tyto poplatky platily a který by nějakým způsobem (snad) rozděloval poplatky mezi banky. Absurdní? Ale podobně absurdní jsou autorské poplatky pro OSA. (Teď doufám, že jsem někoho neinspiroval pro novou daň.)

Co se týče DRM, opět jsem pro smluvní svobodu. Osobně jsem rád, že DRM není státem zakázané. Řeknu to názorně: Když jsem kupoval nějaké aplikace pro Android, byly vpodstatě taky chráněné pomocí DRM. Já to mohl buď přijmout, nebo odmítnout. Přijal jsem to, protože DRM bylo pro mě minimální omezení, které mi za to stálo. A kdyby bylo DRM státem zakázené? Pak bychom zřejmě neměli k v ČR dispozici placené aplikace v Android Marketu. Komu by to prospělo?

U hudby je mírně odlišná situace. Máme velké množství různých přehrávačů a DRM je pro mě (a asi i pro mnohé jiné) příliš velké omezení. Ale tady věřím, že to trh DRMistům vysvětlí. To ostatně naznačuje například Supraphon, který otevřel obchod s hudbou bez DRM.

Principiálně se tedy k tomu i u hudby stavím stejně – ponechat smluvní svobodu. Jen si myslím, že smluvní svoboda si u hudby může vyžádat něco jiného než u software.

středa 23. listopadu 2011

Kdo zaplatí státní dluh?

Když vidím současné předlužené státy jako Řecko a Itálii (nicméně Česká Republika je taky zadlužená...), musím se ptát: opravdu to muselo dojít až tak daleko? Kdo to umožnil?

Jak se státy mohly takto zadlužit?

Někdo jim to musel umožnit. Tím, že jim půjčil. V případě bankrotu přijde zkrátka. Ale proč to muselo zajít až tak daleko?

On bankrot přichází ve chvíli, kdy by dlužník měl splácet, ale nemá z čeho. Mohl by si zase půjčit, ale v takové situaci už asi nenajde věřitele. Nenajde se totiž takový věřitel, který by dostatečně věřil, že půjčené peníze dostane zpět.

To ale není něco, co by se nedalo předem odhadnout. Dlužník už nějakou dobu před bankrotem vypadá nedůvěryhodně, takže ti poslední to mohli dobře tušit. Kdyby mu nepůjčili, ušetřili by a bankrot by přišel o něco dříve (s menšími škodami). Zpětná vazba ke špatnému hospodaření nastane dříve.

Tím ale přijde zkrátka jiná část věřitelů. (Dopouštím se zde malé nepřesnosti - předpokládám, že mu pokaždé půjčil někdo jiný. Chci se vyhnout složité formulaci.) Dohromady půjde o méně peněz (bankrot nastane již při menším dluhu) a možná i o menší počet věřitelů, ale objeví se tu část půjček, které by byly zaplaceny, kdyby k bankrotu došlo později. Ale ono to vlastně už u této části půjček šlo předpovědět...

Zvýšení obezřetnosti věřitelů tedy vede k dalšímu zvýšení obezřetnosti věřitelů. Nevěřím, že to bude fungovat až do nekonečna, ale je zřejmé, že i relativně malé zvýšení obezřetnosti věřitelů na začátku může ve výsledku vést k velkému uspíšení bankrotu. To není špatně - takový rychlý bankrot bude mít relativně malé následky a brzkou zpětnou vazbu. (V informatice tomu říkáme fail fast). Jakmile by se doba od začátku zadlužování k bankrotu snížila blízko k délce volebního období (i dvě nebo tři volební období je celkem krátká doba), důsledky rozhazování politiků by bylo mnohem lépe vidět. Ti by si to rozmysleli. A pokud ne, rozmysleli by si to voliči.

Jak se měří důvěra a obezřetnost?

Důvěra může na první pohled být těžko uchopitelný pojem. Obecně asi ano, ale v případě úvěrů to tak těžké není. Věřitelé to vyjadřují z velké části dokonce číslem.

Čím méně věřím, že mi dlužník vrátí peníze zpět, tím vyšší riziko zde vidím. A to riziko musím nějak vyvážit. Kromě vymahatelnosti a záruk (například v případě nesplacení přijdete o dům) se dá zvyšovat úrok.

Kdo udělal chybu?

Ale pořád nejsme u jádra problému. Víme, že někdo státům půjčil příliš a že ten to odnese. Otázkou zůstává:

  • Kdo to byl?
  • Proč to udělal? (Když si přece následky ponese sám, nemá důvod půjčovat...)
  • Odneseme to nějak i my?
  • Přispěli jsme na to i my sami?

Na tyto otázky se pokusím odpovědět. Podle mnohých článků vypadá odpověď na první otázku celkem jednoduše - banky. (Celkem blbě se to ověřuje nebo vyvrací - vyžaduje to rozsáhlejší analýzu. Na tu se neodvážím, ale možnost, že jde o banky zní celkem rozumně. Banky mají celkem dost peněz a chtějí je někam investovat.)

Odpovědět na souvislost s námi je taky zřejmá - v bance má mnoho z nás svoje peníze a dostanou-li se banky do problémů, zaplatíme to. Otázkou tu zůstává, proč se banky takto chovají a proč je podporujeme.

(Tak mě napadá představa, kdy si dáme peníze do banky a stát nám za tyto peníze dá dárek, za který mu poděkujeme. Se slovy "darovanému koni na zuby nehleď". Nedivme se pak, že ty peníze tu nejsou. Tuto představu ale neberte úplně doslova.)

Co bere bankám a lidem obezřetnost?

Ale banky přece nemají zájem zkrachovat a lidé nemají zájem přijít o své peníze! Bankéři by se měli chovat nanejvýš opatrně, aby banky byly solventní, to je přece v jejich zájmu, ne?

Možná ne tak docela. Tady do toho vstupuje ještě stát se svými psanými a nepsanými zárukami. O čem je řeč?

První věc je, že většina bankovních vkladů je státem pojištěná. V takovémto případě se lidé nebudou až tolik zajímat o to, jak banka hospodaří. Banky budou motivovány k riziku, protože riskantní investice typicky vynášejí více. Pokud risk vyjde, zisk dostanou především bankéři. (Dobře, podělí se o něj v úrocích, haha.) Ve chvíli, kdy risk nevyjde (v případě dluhopisů to asi nebude hned), zaplatí to všichni z daní. Pokud by to platili jen klienti té banky, pak by to platili jen ti, kdo uvěřili jejím slibům. Lidé by byli motivováni si vybírat dobře hospodařící banky, které neriskují příliš.

Druhá věc je ještě horší - problémová banka může být zachráněna se vším všudy. Bankéřům, kteří riskovali, zůstává práce a mohou riskovat za peníze jiných dál. (Ovšem ve chvíli, kdy se risk vyplatí, shrábnou zisk sami.) Pokud si dobře pamatuji, dělo se to v USA s argumentem, že jsou too big to fail. (Tak je podepřeme a časem necháme udělat ještě větší fail...). A hlavně se to zřejmě plánuje v EU - jak jinak mám pochopit rekapitalizaci bank?

Celkem dobře to shrnuje pojmenování soukromý zisk a veřejné ztráty. To není zrovna podle kapitalismu, kde je soukromý nejen zisk, ale i ztráty.

Ručí stát sám za sebe?

Pokud by stát prodával dluhopisy pouze svým bankám (a ty by je dál neprodávaly a nesjednávaly by si k nim pojištění jinde), pak by stát svoji případnou platební neschopnost jistil svým pojištěním vkladů. Bylo by jasné, že státní pojištění vkladů bude v případě jeho bankrotu pouze iluzí, protože by stejně neměl z čeho to pojištění platit. Ono je to trošku (ale ne o moc) složitější.

Velmi křehký systém

Státy totiž dluží dost v zahraničí. Zbankrotuje-li Řecko, nejen řecké banky se mohou dostat do potíží. A pokud některá z nich zkrachuje a je státem pojištěná, může do problémů dostat stát. Pokud ten zbankrotuje, může dostat do problémů další banky... Je tu vidět, jak se všichni vzájemně opírají o všechny. (Řecko zřejmě nebude až takový problém. Ledaže by byl použit 'Euroval' a s Řeckem padla i Itálie... Tady se přiznám, že neznám dostatečně dobře aktuální stav, nicméně doufám, že 'Euroval' bude zahrabán.)

Mimochodem, toto domino už někdo popisoval. Je prostě jasné, že ony záruky nemohou fungovat donekonečna.

Abych to upřesnil, v extrémním případě by stát mohl zatlačit na centrální banku, která by vytiskla libovolné množství peněz a za ně nakoupila třeba státní dluhopisy. To je ale vpodstatě jen jiná forma daní - inflace. Velká inflace je možná i horší alternativa k bankrotu. Lehce odlišná je situace v zemích eurozóny, které by musely pro inflaci ovlivňovat ECB. Na druhou stranu si myslím, že je tady ještě větší motivace se na to spoléhat. Ale to by bylo na samostatný článek.

Přidat státní zásah? Ne, odebrat!

Možná si někteří říkají, že je potřeba na banky státem lépe dohlédnout. Je skutečně možné, že takové snahy nastanou. Ale co by se tím vyřešilo? Kdo z úředníků má skutečnou motivaci správně rozhodnout za jiné? Nebude zde mít větší sílu úplatek nebo (v tomto případě) tlak od politiků, kteří chtějí rozhazovat a kupovat si voliče z cizích daní?

Nejspíš bude. A komu takový státní dozor prospěje?

V této souvislosti jsem si vzpomněl na snahu politiků zavést novou daň a udělat pro jejich dluhopisy výjimku. Myslíte si, že by to zde dopadlo jinak?

Ne, tudy cesta opravdu nevede. Záruky za banky musí zmizet, třeba i postupně. Pak občané budou mít motivaci si banky hlídat (nebo na ně a jejich mizivé úroky kašlat, taky cesta - trh to taky ovlivní) a banky budou mít motivaci k méně riskantním investicím.

Je nutná změna ve všech státech?

Když jsem nakousl ono propletení mezi státy, nastává otázka, zda by nám mělo stačit zrušení záruk v České Republice, nebo jestli je musí zrušit i okolní státy, aby to mělo účinek. Na první pohled to bez spolupráce ostatních států nemá pro nás smysl. Náš stát se bude moci dál zadlužovat.

Ale naše banky by to nepodporovaly a my bychom to riziko nenesli. A ostatní státy by měly motivaci se k nám přidat. A pokud by nám "jen" znevýhodnily půjčky nějakou regulací, pro nás by to v důsledku bylo jen více či méně obdoba téhož. Nebylo by to sice ideální (řídili by to politici, ne trh), ale byla by to taky možnost.

Jaký má smysl běžný účet?

Tak svůj smysl určitě má - na placení přes internet apod. se určitě hodí. Ale nepřijde mi vhodné na něj dávat všechny svoje úspory. Co z toho? Úročení je obvykle směšné a riziko zbytečně vysoké. Že to rozložíte na více bank? Fajn, ale v případě problémů např. se státními dluhopisy na tom banky budou podobně a může jich padnout více prakticky zároveň.

Něco jiného jsou spořicí účty, termínované vklady, podílové fondy a podobně. To už může stát za zvážení. O úročení se již dá mluvit. Dá se už přemýšlet o tom, jestli je větší riziko, nebo výnos. To si moc netroufám odhadovat a obecně to asi nelze říct.

pondělí 5. září 2011

Dědičnost u case classes

Case classes jsou ve Scale jednoduchým nástrojem, který slouží zhruba ke stejnému účalu jako struktury v Cčku nebo entitní třídy v Javě - seskupují data, která patří k sobě. Vše je velmi jednoduché, než se sem vloží dědičnost. Pak je potřeba trochu přemýšlet, protože se situace trochu komplikuje. Ale jen trochu...


Budu postupovat po malých krocích, takže článek vypadá dlouze. Přidaný nebo změněný kód se snažím zvýrazňovat.


Terminologická odbočka

  • field - datový atribut třídy, který by měl být podle zásad zapouzdření pokud možno private. Napíšete-li v Javě ve třídě třeba private String foo = null;, vytvořili jste field.
  • vlastnost (vlastnost třídy) - data, která mají vztah ke třídě a která lze zjistit zavoláním getteru a případně nastavit zavoláním setteru. Data lze číst z fieldu (a případně zapisovat do něj), ale obecně to není nutné.

Co nám case classes nabízejí?

Když už víme, kdy zvažovat jejich použití, přejděme k tomu, co od nich dostaneme.

  • Metody pro porovnávání - equals a hashCode. Díky tomu nebudou instance té třídy ve výchozím stavu porovnávány podle identity, ale podle ekvivalence jejich členů.
  • Parametry třídy jsou defaultně veřejně viditelné, takže nemusíte psát val. (Generují se fieldy a gettery k nim.)
  • Metodu toString pro převod na čitelný řetězec.
  • Metodu apply ("statickou" metodu) pro konstrukci objektu bez klíčového slova new.
  • Metodu unapply ("statickou" metodu) pro pattern matching

Podle článku o case classes z FAQ by to mělo být již vše.

Úkol

Určeme si nějaký úkol s dědičností. Navrhuji použít elipsu a kružnici (jako její speciální případ). Každý tvar bude mít i barvu. (Možná budu za tu barvu kritizován, ale zkuste navrhnout příklad, který je co nejjednodušší, nejnázornější a nemá znaky něčeho umělého...)

Nápad s case classes

Možná vás jako první napadne toto:

package com.v6ak.example.geometry

case class Shape(color: String)

case class Ellipse(color: String, a: Int, b: Int) extends Shape(color)

case class Circle(color: String, r: Int) extends Ellipse(color, r, r)

Zkuste si to. Kompilátor řve? No dobře, tudy cesta asi nevede.

Problém

Kompilátor nám vlastně řval, že se snažíme znovu přidávat vlastnost (vlastně jen getter), která již existuje díky rodiči. A je plně implementovaná. (Onen getter není v rodiči abstraktní.) Což o to, přidáním override val k vlastnosti color bychom kompilátor umlčeli. (On by stále řval, že se to tak dělat nemá, ale bylo by to jen varování.)

U Shape jsme definovali i to, jak se barva získává. V Javě by tomu totiž odpovídal privátní field s getterem. Možná si myslíte, že budou následovat nějaké "kecy o zapouzdření". To ne, u kružnice a elipsy máme zajímavější situaci. Elipsa má hlavní a vedlejší poloosu a ve speciálním případě (pokud si jsou obě poloosy rovny) jde o kružnici. U kružnice ale máme tři vlastnosti, které nesou tu stejnou hodnotu - jednou jako hlavní poloosu, podruhé jako vedlejší poloosu a potřetí jako poloměr. Jedna hodnota by tedy byla v jedné instanci kružnice uložena třikrát! To vypadá už trošku divně, ne? No ano, ale když jsme si takto implementovali elipsu, tak to jinak nepůjde. Elipsa prostě je implementovaná tak, že má dva fieldy a k nim dva gettery pro hlavní a vedlejší poloosu. A kružnice k nim takto přidává třetí. Fieldy odebírat prostě nejdou. A i kdyby to šlo, byla by to celkem úzká vazba na implementaci v rodičovi.

Varianta s abstraktními třídami

Můžeme to ale řešit jinak:

  • Každá case class bude finální.
  • Všichni předci case classes budou abstraktní. (Pro úplnost: třídu AnyRef teď vynechávám.)
  • Díky tomu se nám nestane, že by jedna case class dědila z druhé. Třídy si tedy nebudou lézt do zelí (fieldů).

První verze

Tato verze je záměrně velmi podobná verzi plné case classes a přízpůsobil jsem tomu i styl odsazování.

package com.v6ak.example.geometry

abstract class Shape{def color: String}

abstract class Ellipse extends Shape {def a: Int; def b: Int}

final case class Circle(color: String, r: Int) extends Ellipse {def a=r; def b=r}

No, už to vypadá lépe a kompilátor to vezme. Kružnice má jen jeden field pro poloměr, ne tři stejné. Ale co elipsa? Jak vytvořím elipsu? Asi to chce ještě něco trošku přidat.

Přidáváme konkrétní elipsu

package com.v6ak.example.geometry

abstract class Shape{def color: String}

abstract class Ellipse extends Shape {def a: Int; def b: Int}

final case class GeneralEllipse(color: String, a: Int, b: Int) extends Ellipse

final case class Circle(color: String, r: Int) extends Ellipse {def a=r; def b=r}

Teď již není problém vytvořit konkrétní elipsu. Používá se ale "škaredé" GeneralEllipse, které "ční" ven. Třídu radši skryjeme a vytvoříme jí továrnu.

Skrýváme GeneralEllipse

package com.v6ak.example.geometry

abstract class Shape{def color: String}

abstract class Ellipse extends Shape {def a: Int; def b: Int}

private[geometry] final case class GeneralEllipse(color: String, a: Int, b: Int) extends Ellipse

final case class Circle(color: String, r: Int) extends Ellipse {def a=r; def b=r}

object Ellipse {

 def apply(color: String, a: Int, b: Int) = GeneralEllipse(color, a, b)

}

Už je to celkem použitelné, ale pořád se dá vylepšovat. Ellipse nemá pattern matching.

Doplňujeme pattern matching

package com.v6ak.example.geometry

abstract class Shape{def color: String}

abstract class Ellipse extends Shape {def a: Int; def b: Int}

private[geometry] final case class GeneralEllipse(color: String, a: Int, b: Int) extends Ellipse

final case class Circle(color: String, r: Int) extends Ellipse {def a=r; def b=r}

object Ellipse {

 def apply(color: String, a: Int, b: Int) = GeneralEllipse(color, a, b)
 
 def unapply(e: Ellipse) = Option(e).map(e => (e.color, e.a, e.b))

}

Toto si už zaslouží menší komentář. Jednodušší verze by nebyla odolná null hodnotám:

def unapply(e: Ellipse) = Some((e.color, e.a, e.b)) // vrací přímo uspořádanou trojici, ale selže u null hodnot

Proto pomocí Option(e) konvertujeme na Option, což je vpodstatě kolekce o nejvýše jednom prvku. Pro null dostáváme prázdnou kolekci (tj. None), pro jinou hodnotu dostáváme kolekci o právě jednom prvku (tj. Some(e)). A nakonec pomocí metody map konvertujeme případný obsah na uspořádanou trojici. Pro null tedy dostáváme None, protože to není elipsa, pro ostatní dostáváme rozloženou elipsu na uspořádanou trojici prvků, že kterých byla vytvořena. Narozdíl od GeneralEllipse toto funguje i pro kružnice.

K čemu to unapply využijeme?

Zde trošku odbočím. Možná si říkáte, k čemu je tu to podivínské unapply. Díky němu totiž můžete psát toto:

shape match {
 case Circle(c, r) => "kružnice o poloměru "+r
 case Ellipse(c, a, b) => "elipsa (...)"
 case _ => "neznámé"
}

Možná to nepotřebujete, pak to můžete vynechat.

Vylaďujeme detaily (někdy podstatné)

Každá kružnice je Circle

Pokud nyní vytvoříme Ellipse("yellow", 5, 5), dostaneme tím něco jiného než Circle("yellow", 5). Sice se to bude chovat podobně, ale podle == si rovny nebudou. (Metoda/"operátor" == porovnává podle metody equals a řeší null hodnoty.) Navíc Ellipse(5, 5) nebude instancí třídy Circle. Proto trošku upravíme továrnu:

package com.v6ak.example.geometry

abstract class Shape{def color: String}

abstract class Ellipse extends Shape {def a: Int; def b: Int}

private[geometry] final case class GeneralEllipse(color: String, a: Int, b: Int) extends Ellipse

final case class Circle(color: String, r: Int) extends Ellipse {def a=r; def b=r}

object Ellipse {

 def apply(color: String, a: Int, b: Int) = if(a == b){
  Circle(color, a)
 }else{
  GeneralEllipse(color, a, b)
 }
 
 def unapply(e: Ellipse) = Option(e).map(e => (e.color, e.a, e.b))

}

Stylystická: Použijeme match místo podmínek

Toto je otázka spíše stylu, ale přijde mi hezčí použít match než if. Fungovat by to mělo naprosto stejně.

package com.v6ak.example.geometry

abstract class Shape{def color: String}

abstract class Ellipse extends Shape {def a: Int; def b: Int}

private[geometry] final case class GeneralEllipse(color: String, a: Int, b: Int) extends Ellipse

final case class Circle(color: String, r: Int) extends Ellipse {def a=r; def b=r}

object Ellipse {

 def apply(color: String, a: Int, b: Int) = a match {
  case `b` => Circle(color, a)
  case _ => GeneralEllipse(color, a, b)
 }
 
 def unapply(e: Ellipse) = Option(e).map(e => (e.color, e.a, e.b))

}

Uzavíráme okruh tříd

Můžeme chtít, aby nám Shape neimplementoval někdo jiný. První možnost je dát jeho konstruktoru viditelnost jen pro balíček, ve kterém je:

abstract class Shape private[geometry]() {def color: String}

Máme tu ale možnost vše mít v jednom souboru a použít modifikátor sealed. Díky tomu nebude možné dělat potomky Shape v jiném souboru a navíc dostaneme u pattern matchingu varování při nevhodném použití. Modifikátor dostanou všechny veřejné abstraktní třídy.

package com.v6ak.example.geometry

abstract sealed class Shape{def color: String}

abstract sealed class Ellipse extends Shape {def a: Int; def b: Int}

private[geometry] final case class GeneralEllipse(color: String, a: Int, b: Int) extends Ellipse

final case class Circle(color: String, r: Int) extends Ellipse {def a=r; def b=r}

object Ellipse {

 def apply(color: String, a: Int, b: Int) = a match {
  case `b` => Circle(color, a)
  case _ => GeneralEllipse(color, a, b)
 }
 
 def unapply(e: Ellipse) = Option(e).map(e => (e.color, e.a, e.b))

}

Vylepšujeme toString u elips

Pokud nechceme při převodu elipsy na řetězec dostávat GeneralEllipse(...), uvedeme, co chceme místo toho:

package com.v6ak.example.geometry

abstract sealed class Shape{def color: String}

abstract sealed class Ellipse extends Shape {
 def a: Int
 def b: Int
}

private[geometry] final case class GeneralEllipse(color: String, a: Int, b: Int) extends Ellipse{
 override def productPrefix = "Ellipse"
}

final case class Circle(color: String, r: Int) extends Ellipse {def a=r; def b=r}

object Ellipse {

 def apply(color: String, a: Int, b: Int) = a match {
  case `b` => Circle(color, a)
  case _ => GeneralEllipse(color, a, b)
 }
 
 def unapply(e: Ellipse) = Option(e).map(e => (e.color, e.a, e.b))

}

A nakonec trosku whitespace

Při prvních úpravách jsem pro pocit podobnosti použil trošku nekonvenční pravidla pro odsazování apod., tak to teď napravím.

package com.v6ak.example.geometry

abstract sealed class Shape{
 def color: String
}

abstract sealed class Ellipse extends Shape {
 def a: Int
 def b: Int
}

private[geometry] final case class GeneralEllipse(color: String, a: Int, b: Int) extends Ellipse{
 override def productPrefix = "Ellipse"
}

final case class Circle(color: String, r: Int) extends Ellipse {
 def a=r
 def b=r
}

object Ellipse {

 def apply(color: String, a: Int, b: Int) = a match {
  case `b` => Circle(color, a)
  case _ => GeneralEllipse(color, a, b)
 }
 
 def unapply(e: Ellipse) = Option(e).map(e => (e.color, e.a, e.b))

}

Vyzkoušíme si

Nedělali jsme unit testy, ale aspoň si napíšeme jednoduchý kód, který demonstruje funkčnost:

package com.v6ak.example.geometry

object Demo extends Application{ // use App instead of Application in Scala <= 2.9
 val a = Circle("yellow", 5)
 val b = Ellipse("yellow", 5, 5)
 val c = Ellipse("yellow", 4, 5)
 println(a + " is equal to " + b + ": " + (a == b) + " (should be true)")
 println(a + " is equal to " + c + ": " + (a == c) + " (should be false)")
}

Nyní můžeme uložit poslední verzi tříd třeba do classes.scala a tuto ukázku do demo.scala, zkompilovat příkazem fsc *.scala a spustit příkazem scala com.v6ak.example.geometry.Demo. Měli bychom dostat toto:

Circle(yellow,5) is equal to Circle(yellow,5): true (should be true)
Circle(yellow,5) is equal to Ellipse(yellow,4,5): false (should be false)

Konečnou verzi zdrojáků spolu s demem si můžete stáhnout z Githubu,