JavaScript pro lenochy efektivně
Transkript
JavaScript pro lenochy efektivně
Underscore.js JavaScript pro lenochy efektivně Jan Bednařík - @janbednarik Lekce ze základní školy „Matematik či programátor musí být líný a přesný.“ líný přístup = řešit problémy efektivně přesnost = pište testy! (Ne)vhodné nástroje „Když jediný nástroj který máte je kladivo, všechno vypadá jako hřebík.“ JavaScript Underscore.js Underscore.js Knihovna nástrojů pro funkcionální programování v JavaScriptu. http://underscorejs.org autor Jeremy Ashkenas (CoffeeScript, Backbone.js, ...) Lekce z vysoké školy Existují různá programovací paradigmata: procedurální, objektově orientované, funkcionální, logické, ... Žádné paradigma neřeší všechny problémy tou nejsnadnější a nejefektivnější cestou. Každé paradigma řeší určitou skupinu problémů extrémně jednoduše a efektivně. příklad z praxe (poslední hodnoty) Práce s kolekcemi _.map([1, 2, 3], function(num){ return num * 3; }); => [3, 6, 9] _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }); => [2, 4, 6] _.reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0); => 6 Práce s kolekcemi _.max({Joe: 10, Mark: 22, Elen: 17}); => 22 _.min({Joe: 10, Mark: 22, Elen: 17}); => 10 _.each({Joe: 10, Mark: 22, Elen: 17}, function(age){ console.log(age); }); => 10 => 22 => 17 Práce s kolekcemi _.every([true, 1, null, 'yes']); => false _.all([true, 1, null, 'yes']); => false _.some([null, 0, 'yes', false]); => true _.any([null, 0, 'yes', false]); => true Práce s poli _.first([5, 4, 3, 2, 1]); => 5 _.last([5, 4, 3, 2, 1], 2); => [2, 1] _.compact([0, 1, false, 2, '', 3]); => [1, 2, 3] Práce s poli _.union([1, 2, 3], [101, 2, 1, 10], [2, 1]); => [1, 2, 3, 101, 10] _.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]); => [1, 2] _.difference([1, 2, 3, 4, 5], [5, 2, 10]); => [1, 3, 4] Práce s poli _.zip(['moe', 'larry', 'curly'], [30, 40, 50]); => [['moe', 30], ['larry', 40], ['curly', 50]] _.object([['moe', 30], ['larry', 40], ['curly', 50]]); => {moe: 30, larry: 40, curly: 50} _.object(['moe', 'larry', 'curly'], [30, 40, 50]); => {moe: 30, larry: 40, curly: 50} příklad z praxe (datumy) Práce s objekty _.keys({one: 1, two: 2, three: 3}); => ["one", "two", "three"] _.values({one: 1, two: 2, three: 3}); => [1, 2, 3] _.pairs({one: 1, two: 2, three: 3}); => [["one", 1], ["two", 2], ["three", 3]] _.has({a: 1, b: 2, c: 3}, "b"); => true Práce s objekty var fun = function(kwargs) { _.defaults(kwargs, {width: 50, height: 50}); return kwargs; } fun({width: 100, cool: true}); => {width: 100, height: 50, cool: true} Práce s funkcemi log("WARNING", "Došly červené pilulky."); log("CRITICAL", "Došly koblihy!"); log("ERROR", "Pokazilo se to."); log("WARNING", "Proč furt musím psát ten první argument???"); var logWarning = _.partial(log, "WARNING"); var logError = _.partial(log, "ERROR"); var logCritical = _.partial(log, "CRITICAL"); logError("Stejně je to pořát rozbitý!"); Práce s funkcemi _.map(_.map(_.map(_.map(foo, a), b), c), d); _.map(foo, _.compose(d, c, b, a)); var initialize = _.once(function(){ console.log("Ready!") }); initialize(); => Ready! initialize(); initialize(); Utilitky _.range(10); => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] _.range(1, 11); => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] _.range(0, 30, 5); => [0, 5, 10, 15, 20, 25] _.range(0, -10, -1); => [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] Utilitky _.random(5, 10); => 8 _.random(100); => 42 Objektový zápis _.keys({one: 1, two: 2, three: 3}); => ["one", "two", "three"] _({one: 1, two: 2, three: 3}).keys(); => ["one", "two", "three"] _.values({one: 1, two: 2, three: 3}); => [1, 2, 3] _({one: 1, two: 2, three: 3}).values(); => [1, 2, 3] Řetězení _.chain([1, 2, 3]); => // chained object _.chain([1, 2, 3]).map(_.identity); => // chained object _.chain([1, 2, 3]).map(_.identity).value(); => [1, 2, 3] příklad z praxe (datumy - objektově) Linky na závěr Underscore.php Underscore.lua Underscore-perl Underscore.m ... Děkuji za pozornost
Podobné dokumenty
Implementace ICMP Pingu v PHP
Samozřejmě že moje implementace je velice primitivní a obsahuje opravdu jen to nejnutnější, nicméně pro někoho toto může být
dostatečné, případně může být návodem jak dál postupovat a funkci zlepši...
Číslo hodiny Označení materiálu 1. Unit 1
U5 Slovní zásoba L5/A,B - test (Vocabulary L5/A,B)
U5 Slovní zásoba L5/C - procvičování - spoj obrázek a text (Vocabulary L5/C practice - match the picture and the text)