Přejít k navigační liště

Zdroják » Zprávičky » Přednáška o metaprogramování ve Swiftu

Přednáška o metaprogramování ve Swiftu

Zprávičky Různé

Určitě jste již zažili error “Unexpectedly found nil while unwrapping an Optional value”, když jste se pokoušeli inicializovat UIImage pomocí názvu obrázku, ve kterém jste měli překlep. Nebylo by fajn mít statickou množinu názvů a přitom využívat autocomplete Xcode-u? Určitě ano, představte si ale, že už nikdy nebudete muset psát nudný boilerplate kód. V následujících odstavcích se vám pokusím ukázat jak je možné využít metaprogramování v každodenním životě iOS developera.

Před tím, než se budeme věnovat této technice ve Swiftu, bylo by dobré vědět, co to vlastně metaprogramování obecně je.

Definice z Wikipedie je poměrně srozumitelná:

“Metaprogramování je skupinou programovacích technik, které umožňují psaní programů, které vytváří další programy nebo s nimi nakládají jako se svými daty. Případně se může jednat o programy, které při svém běhu mohou dělat činnosti, které by jinak musely provádět již při kompilaci.”

Volně by se dalo říci, že metaprogramování je jednoduše tvorba kódu, jehož výsledkem je další kód. Už z definice vyplívá rozdělení na “compile time” a “runtime”.

Do skupiny metaprogramů patří například:

  • Parsery
  • Doménově specifické jazyky (DSLs)
  • Kompilátory
  • Interpretery

Tak a teď k věci, jak je možné využít metaprogramování v každodenním životě iOS vývojáře? Je obecně známo, že momentální stav Swift runtimu toho neumožňuje hodně, proto zůstává použití “compile time” technik. V úvodu jsem zmínil, že by bylo fajn mít statickou množinu obrázků. Přesně na tento účel je určena aplikace SwiftGen, která automaticky potřebný kód generuje a to nejen pro obrázky ale i pro fonty, lokalizované texty a podobně. SwiftGen je pěkný příklad metaprogramu.

Ještě donedávna byla implementace Hashable a Equatable protokolů další každodenní nepříjemnost iOS developera. Od nové verze Xcode-u je sice tento problém automaticky vyřešený (metaprogramování at it’s best), ale je to jen špička ledovce.

Když Apple vytvořil Swift, potřeboval, aby ho podporoval Xcode. Přesně proto vznikl SourceKit, který umožnil parsování zdrojového kódu, zvýraznění syntaxe, odsazení kódu, autocomplete, generování hlaviček a podobně. Existence SourceKitu umožnila vznik několika zajímavých nástrojů, mezi nimi i aplikace Sourcery.

Sourcery je aplikace, která použitím SourceKit-u skenuje zdrojový kód, nabytá data jsou potom dostupná v šablonách, díky tomu je možné generovat libovolné řešení. Šablony mohou být napsané v jazycích Swift, Stencil nebo JavaScript. Stencil je jednoduchý šablonový jazyk, který je jako stvořený pro tvorbu jednoduchých šablon. V šablonách psaných v jazyku Swift je možné využít takřka všechny jeho funkce, nevýhodou je však jeho rychlost.

Chtěli byste vědět jak vytvořit podobné šablony ve Swiftu a nebo v Stencilu? Přijďte si poslechnout můj talk na #blueberryMeetUp nazvaný Three iOS related talks 14. 5. od 19.00 hodin do Blueberry.

Komentáře

Odebírat
Upozornit na
guest
0 Komentářů
Nejstarší
Nejnovější Most Voted

TypeScript 7 v Go: rychlejší buildy, chybějící API

Betaverze TypeScriptu 7.0 ukazuje víc než rychlejší tsc. Microsoft převádí kompilátor a jazykovou službu z původní kódové základny psané v TypeScriptu a běžící jako JavaScript do Go, přidává paralelní typovou kontrolu a připravuje novou editorovou část postavenou na LSP. Pro část nástrojů ale nepůjde o prostou výměnu binárky: TypeScript 7 zatím nemá stabilní náhradu dnešního Compiler API.

Prolog nezmizel. Jen dnes žije v jiných nástrojích

Prolog nezmizel. Jeho hlavní myšlenku dnes potkáváme v nástrojích, které se Prologu na první pohled nepodobají: v CodeQL pro analýzu kódu, v Rego pro policy-as-code, v Z3 pro práci s omezeními a v Leanu pro formální důkazy. Každý řeší jiný problém, ale všechny připomínají totéž: někdy je lepší popsat vztahy, pravidla, omezení nebo tvrzení než vrstvit další if.