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

Co je nového v Gitu 2.55.0

Git 2.55.0 přináší šest zajímavých novinek – od dlouho očekávané podpory fsmonitoru na Linuxu, přes zjednodušení úprav historie commitů pomocí nového příkazu git history fixup, až po další krok v postupné integraci jazyka Rust do jádra Gitu. Přidává se i možnost pushovat do skupiny vzdálených repozitářů, omezit šířku grafu u git log --graph a zrychlit git grep a git cherry v částečných klonech.

Od statických stránek k edge computingu: Historie webových technologií za 30 let

Třicet let. Tak dlouho už web existuje v podobě, kterou bychom dnes alespoň zhruba poznali — od prvních statických dokumentů přes éru aplikací běžících v prohlížeči až po kód, který se spouští na stovkách míst po celém světě jen pár milisekund od uživatele. Tenhle příběh ale není jen suchým výčtem technologií a verzí. Je to příběh jednoho kyvadla, které se celé tři dekády houpe mezi serverem a klientem — a které právě teď nachází nový bod rovnováhy někde uprostřed, na okraji sítě.