Ponořte se do TypeScriptu a defenzivního PHP

Michal Gritzbach   24. 10. 2016


Zatímco organizace WebExpa 2016 si zaslouží palec dolů, řečníci a jejich přednášky byly velmi dobré. Na dvě nejlepší z nich se proto podíváme detailněji. Pokud se nebojíte supersetů v JavaScriptu nebo imutabilních objektů v PHP, pokračujte ve čtení!

Před začátkem letošního WebExpa jsme na našem blogu připomněli několik přednášek z loňského ročníku. Měsíc poté nastal ideální čas zaměřit se i na rok 2016. Z téměř všech přednášek, na kterých jsem letos byl, jsem si zapisoval poznámky. Zdaleka nejvíce mě ale zaujaly přednášky Javascript + Java = Typescript od Tomasze DucinaExtremely Defensive PHP od Marca Pivetty. Začněme proto tím příjemnějším a nevydařenou organizaci nechme až na závěr.

Úvod do TypeScriptu

Tomasz uvedl svojí skvělou angličtinou posluchače do TypeScriptu, tedy do jakéhosi hybrida mezi statickou Javou a dynamickým JavaScriptem, který si bere to nejlepší z obou světů.

Typescript je supersetem JavaScriptu. Podobně jako dnes již mrtvý CoffeeScript se totiž překládá do čistého JavaScriptu. Zároveň nám nabízí to skvělé z Javy: systém tříd (třídy, rozhraní, moduly, generiky) a hlídání typů během kompilace kódu. To s sebou přináší další výhody, kdy se jako vývojář například můžu spolehnout na to, že daná entita bude mít vždycky jasně daný datový typ a nemusím se tak starat o jeho testování.

Tím se ostatně blížíme k důvodu, proč Tomasz používá Typescript. Nejde přitom pouze o samotný systém tříd, který najdeme v omezenější podobě i v nastupujícím standardu ES6, nebo o přítomnost datových typů. Je to především fakt, že díky neustálé kontrole, při kompilaci i za běhu, může odsunout část své zodpovědnosti na samotnou platformu, tedy TypeScript.

Nezapomněl se ovšem zodpovědně zmínit i o potenciálních problémech, které přechod na TypeScript zahrnuje. Z mého pohledu se jedná zejména o možnou nekompatibilitu některých JavaScriptových knihoven třetích stran, přestože mám pocit, že ty větší knihovny již dávno s TypeScriptem počítají.

Mezi nevýhodami či potenciálními problémy mluvil Tomasz i o zodpovědnosti, kterou má každý z nás, jestliže se rozhodneme „přinutit“ kolegy k adopci této technologie v práci. To se však podle mě obecně týká čehokoliv nového, ne konkrétně pouze TypeScriptu.

Tomasz přiblížil plnému kinu Lucerna skvěle vypadající technologii, která tu s námi sice již nějaký ten pátek je a bude určitě i nadále, protože se jí dostává podpory z Microsoftu a Googlu, nicméně až po tomto výborně podaném a uceleném úvodu mám velkou chuť se ponořit do světa TypeScriptu a pokud možno začít jej používat i na našich klientských projektech. Projděte si jeho prezentaci.

PHP opatrně

Marco hned na začátku své přednášky ve velkém sále srazil hřebínky všem „mistrům světa v PHP vývoji“. Nejprve padla obligátní poznámka, že „všichni píšou chybový, špatný kód”, a následovala dobře míněná rada, ať poznáme své limity. Ale co ti, kteří své limity znát nechtějí? Jsou podle něj nejhloupější ze všech.

Poté začal Marco procházet několik dobrých postupů a patřičně je také odůvodnil. Například jak je důležité psát kód tak, aby šel použít právě a pouze jedním způsobem. Zde použil hezké přirovnání ke koncovkám RJ45 versus USB. Další Marcovy myšlenky představím v bodech, protože každé jeho sdělení bylo stručné a přímo k věci:

  • V praxi se nedá napsat dobrý, znovupoužitelný kód.
  • Kód musí řešit pouze a jenom náš problém, ne „všechny problémy světa“.
  • Je důležité udržovat imutabilní stav kvůli konzistenci dat i výkonnosti.
  • Konstruktor je jediné místo určené k nastavování vlastností objektu. Settery jsou bezvýznamné „přesouvače dat“.
  • Vytvořením prázdných tříd, respektive rozhraní se můžeme zbavit spousty podmínek v kódu a přitom nevytvořit logickou díru, kdybychom například chtěli logovat zprávy neexistujícím loggerem.
  • Tento příklad Marco přímo ukázal a případný nepředaný Logger v konstruktoru rovnou nahradil FakeLoggerem.
  • Veškeré předané objekty si metoda musí buď klonovat, nebo přijímat už imutabilní.
  • Value objects vhodně zapouzdřují stavy hodnot.
  • Pokud je logika metody taková, že by mohla vracet různé typy hodnot, je nejlepším řešením vracet právě value object.
  • Každá třída by měla být deklarována jako finální, pokud k opaku nemáme opravdu pádný důvod. Případné podědění, nebo rozšíření už je jiný use-case a netýká se našeho aktuálního problému.

Naprostá většina bodů, které za přednášku Marco stihnul ukázat, mi přišla skvělá a relevantní. Bohužel mu nezbyl čas na úplně všechny. Tak jako Tomasz vnesl nový směr do mého uvažování nad psaním JavaScriptu, podařilo se něco velmi podobného i Marcovi v PHP. Díky za to.

Krok zpět

S kolegy jsme se shodli, že přesun celé konference do Lucerny byla chyba. Hned s prvními pátečními přednáškami vyšlo najevo, jak moc velký nedostatek to je. Pokud jsme něco chtěli mít z přednášky ve velkém sále, bylo nezbytné sedět vpředu a ideálně na straně před reproduktorem. S každým posunem o řadu vzad narůstal hluk jak od partnerských stánků a občerstvení, tak od „relaxačních“ stolů v prvním patře velkého sálu. Největší gól pak byl fotbálek ve druhém patře, který se mnozí neštítili hrát ani během přednášek.

Po oba dny jsme bojovali s umístěním přednášek. Ne snad že by tři prostory v Lucerně nevyhovovaly, ale na nejednu vývojářskou přednášku se do nejmenšího Lucerna Music Baru narvaly i čtyři stovky lidí. Naproti tomu jsem viděl obsazených jen několik řad ve velkém sálu s mnohem větší kapacitou.

Letos jsem v byl v kině jen asi na pěti, šesti přednáškách a naštěstí jsem nepocítil (na rozdíl od ostatních) problémy s nedostatečným větráním. Co mě však v první den přednášek vytáčelo, bylo chování návštěvníků po jejich skočení. S otevřením dveří se do sálu nahrnuli lidé dychtící po místě, přitom však nebrali ohled na ty odcházející.

Velmi pozitivně ale hodnotím, jak organizátoři na tyto problémy druhý den zareagovali. Začali do kina vpouštět až v momentě, kdy byli všichni, co chtěli odejít, venku. Mnohem raději jsem si vystál kontrolovanou frontu před kinem, než být chtě nechtě součástí davu tlačícího se chaoticky do ještě plného sálu.

Jakkoliv to z posledních odstavců může vyznívat negativně, letošní WebExpo rozhodně nebylo špatné. Co se týče obsahu, bylo dokonce velmi dobré. Nakonec jsme odjížděli nadšení téměř stejně jako loni a už teď se těšíme na WebExpo 2017. Příště snad již bez zvuku oslav vstřeleného gólu ve fotbálku.