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

curriculum vitae

curriculum vitae CURRICULUM VITAE Osobní údaje: Jméno a příjmení:

Více

JavaScript, který se dá číst. I psát.

JavaScript, který se dá číst. I psát. Hej! Tam patří dvě rovnítka ==

Více

Implementace ICMP Pingu v PHP

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...

Více

Číslo hodiny Označení materiálu 1. Unit 1

Čí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)

Více