SlideShare a Scribd company logo
1 of 80
Download to read offline
Будущее JavaScript

Алексей Симоненко
технический директор Serenity
2013
Раньше
Сейчас
12 лет между последними большими изменениями
спецификации JavaScript
Новые методы базовых объектов

Object
String
Array
Number
Math
Новые методы базовых объектов
String
String.fromCodePoint
String.prototype.contains
String.prototype.startsWith
String.prototype.endsWith
String.prototype.repeat
String.prototype.codePointAt
String.prototype.toArray
Новые методы базовых объектов
String

18

'too much'.contains('too');
// true
'too much'.startsWith('t');
// true

es6-shim
ECMAScrip
t-6

'too much'.endsWith('t');
// false
Новые методы базовых объектов
Object
Object.is
Object.assign
Object.mixin
Object.getOwnPropertyDescriptors
Object.getPropertyDescriptor
Object.getPropertyNames
Object.setPrototypeOf
Новые методы базовых объектов
Object

23
19

Object.is(NaN, NaN);
// true

15

es6-shim
ECMAScrip
t-6
Новые методы базовых объектов
Object

23
19

Object.is(NaN, NaN);
// true

15

Object.assign({a: 1, b: 3}, {b: 2, c: 3});
// {a: 1, b: 2, c: 3}
es6-shim
ECMAScrip
t-6
Новые методы базовых объектов
Array
Array.from
Array.of
Array.prototype.find
Array.prototype.findIndex
Array.prototype.fill
Новые методы базовых объектов
Array

25
30

[1, 3, 15, 7, 15, 23].find(function(item) {
return item / 3 === 5;
});
// 15
[1, 3, 15, 7, 15, 23].findIndex(function(item) {
return item / 3 === 5;
});
// 2

es6-shim
Новые методы базовых объектов
Array

Нет метода
Array.prototype.unique()
Новые методы базовых объектов
Number
Number.isNaN
Number.isFinite
Number.isInteger
Number.toInteger
Number.prototype.clz
Новые методы базовых объектов
Math
Math.sign
Math.imul
Math.log1p
Math.log2
Math.log10
Math.expm1
Math.fround
Math.hypot

Math.trunc
Math.cosh
Math.sinh
Math.tanh
Math.acosh
Math.asinh
Math.atanh
Область видимости
Область видимости

11

let

18
24

var tag = '#wstdays';
if (true) {
let tag = '#404fest';
}

google
traceur
es6ify
Область видимости

11

let

18
24

var tag = '#wstdays';
if (true) {
let tag = '#404fest';
console.log(tag); // "#404fest"
}
console.log(tag); // "#wstdays"

google
traceur
es6ify
Область видимости

11

const

18
24

const a = 10;

12
6

google
traceur
Область видимости

11

const

18
24

const a = 10;
a = 15;

12
6

// SyntaxError: Assignment to constant variable.
google
traceur
Область видимости

11

const

18
24

const a = 10;
a = 15;

12
6

// SyntaxError: Assignment to constant variable.

var a = 15;
// SyntaxError: Variable 'a' has already been declared

google
traceur
Область видимости

11

const

18
24

var a = 15;
if (true) {
const a = 10;
console.log(a); // 10
}
console.log(a); // 15

12
6

google
traceur
Коллекции
Коллекции

11

Map

18

let data = new Map();

29

data.set('key', 100);
data.set(666, true);
data.set(undefined, 'some text');

es6-shim
ECMAScrip
t-6
harmonycollections
Коллекции

11

Map

18

let data = new Map();

29

data.set('key', 100);
data.set(666, true);
data.set(undefined, 'some text');
let fn = function() { console.log('inside?'); }
data.set(fn, 'function key');

es6-shim
ECMAScrip
t-6
harmonycollections
Коллекции

11

Map

18

let data = new Map();

29

data.set('key', 100);
data.set(666, true);
data.set(undefined, 'some text');
let fn = function() { console.log('inside?'); }
data.set(fn, 'function key');
data.has('keys'); // false
data.has(undefined); // true

es6-shim
ECMAScrip
t-6
harmonycollections
Коллекции

11

Map

18

let data = new Map();

29

data.set('key', 100);
data.set(666, true);
data.set(undefined, 'some text');
let fn = function() { console.log('inside?'); }
data.set(fn, 'function key');
data.has('keys'); // false
data.has(undefined); // true
data.delete(undefined);
data.has(undefined); // false

es6-shim
ECMAScrip
t-6
harmonycollections
Коллекции

11

Map

18

let data = new Map();

29

data.set('key', 100);
data.set(666, true);
data.set(undefined, 'some text');
let fn = function() { console.log('inside?'); }
data.set(fn, 'function key');
data.has('keys'); // false
data.has(undefined); // true
data.delete(undefined);
data.has(undefined); // false
data.get(fn); // "function key"

es6-shim
ECMAScrip
t-6
harmonycollections
Коллекции

11

Set

24

let data = new Set([1, 3, 5, 3]);

29

es6-shim
ECMAScrip
t-6
harmonycollections
Коллекции

11

Set

24

let data = new Set([1, 3, 5, 3]);

29

data.add(3);
data.add(7);
es6-shim
ECMAScrip
t-6
harmonycollections
Коллекции

11

Set

24

let data = new Set([1, 3, 5, 3]);

29

data.add(3);
data.add(7);
data.has(3); // true
data.has(9); // false

es6-shim
ECMAScrip
t-6
harmonycollections
Коллекции

11

Set

24

let data = new Set([1, 3, 5, 3]);

29

data.add(3);
data.add(7);
data.has(3); // true
data.has(9); // false
data.delete(3);
data.has(3); // false

es6-shim
ECMAScrip
t-6
harmonycollections
Коллекции
for-of

13

let tags = ['#404fest', '#wstdays', '#dconf'];
for (let tag in tags) {
console.log(tag);
}
// 0, 1, 2

google
traceur
es6ify
Коллекции
for-of

13

let tags = ['#404fest', '#wstdays', '#dconf'];
for (let tag in tags) {
console.log(tag);
}
// 0, 1, 2
for (let tag of tags) {
console.log(tag);
}
// "#404fest", "#wstdays", "#dconf"

google
traceur
es6ify
Коллекции
for-of
let tags = new Set([
'#404fest',
'#wstdays',
'#404fest',
'#dconf'
]);
for (let tag of tags) {
console.log(tag);
}
// "#404fest", "#wstdays", "#dconf"

24

google
traceur
es6ify
Коллекции
for-of

18

let data = new Map();
data.set('404fest', {'involve': true, 'speaker': true});
data.set('wstdays', {'involve': false, 'speaker': false});
data.set('dconf',
{'involve': true, 'speaker': false});
for (let conf of data) {
console.log(conf);
}

google
traceur
es6ify

// ["404fest", {"involve": true, "speaker": true}]
// ["wstdays", {"involve": false, "speaker": false}]
// ["dconf",
{"involve": true, "speaker": false}]
Коллекции

11

WeakMap

23
29

let data = new WeakMap();
let element = document.querySelector('footer');
data.set(element, 'some text');
harmonycollections
Коллекции

11

WeakMap

23
29

let data = new WeakMap();
let element = document.querySelector('footer');
data.set(element, 'some text');
data.has(element); // true
data.get(element); // "some text"

harmonycollections
Коллекции

11

WeakMap

23
29

let data = new WeakMap();
let element = document.querySelector('footer');
data.set(element, 'some text');
data.has(element); // true
data.get(element); // "some text"
element = null;
data.has(element); // false

harmonycollections
Странные конструкции
Странные конструкции
Destructuring assignment

12

let data = [10, 20, 30];
let [a, b, c] = data;
// a = 10, b = 20, c = 30

google
traceur
es6ify
Странные конструкции
Destructuring assignment

12

let data = [10, 20, 30];
let [a, b, c] = data;
// a = 10, b = 20, c = 30
let a = 10;
let b = 20;
[a, b] = [b, a];
// a = 20, b = 10

google
traceur
es6ify
Странные конструкции
Destructuring assignment

12

let [a, [[b], c]] = [10, [[20], 30]];
// a = 10, b = 20, c = 30

google
traceur
es6ify
Странные конструкции
Destructuring assignment

12

let [a, [[b], c]] = [10, [[20], 30]];
// a = 10, b = 20, c = 30
[, month, day, year] = Date().split(' ');
// month = "Oct", day = "13", year = "2013"

google
traceur
es6ify
Странные конструкции
Destructuring assignment

12

let data = {a: 10, b: 20, c: 30};
let {a, b, c} = data;
// a = 10, b = 20, c = 30
google
traceur
es6ify
Странные конструкции
Destructuring assignment

12

let data = {a: 10, b: 20, c: 30};
let {a, b, c} = data;
// a = 10, b = 20, c = 30
let {parse, stringify} = JSON;

google
traceur
es6ify
Странные конструкции
Destructuring assignment
function today() {
return {
d: 13,
m: 9,
y: 2013
};
}
let {m: month, y: year} = today();
// month = 9, year = 2013

12

google
traceur
es6ify
Странные конструкции
Object literal property value shorthand
let name = 'Alena';
let email = 'alena@serenity.su';
let profile = {'name': name, 'email': email};

google
traceur
Странные конструкции
Object literal property value shorthand
let name = 'Alena';
let email = 'alena@serenity.su';
let profile = {'name': name, 'email': email};
let profile = {name, email};
// {"name": "Alena", "email": "alena@serenity.su"}

google
traceur
Странные конструкции
let data = new Map();
data.set('404fest', {'involve': true, 'speaker': true});
data.set('wstdays', {'involve': false, 'speaker': false});
data.set('dconf',
{'involve': true, 'speaker': false});
for (let [name, {involve}] of data) {
console.log(name, involve);
}
// "404fest", true
// "wstdays", false
// "dconf",
true
Странные конструкции
Spread operator

16

let params = [2013, 9, 13, 15, 30];
let date = new Date(...params);
// Sun Oct 13 2013 15:30:00 GMT+0400 (MSK)

google
traceur
es6ify
Странные конструкции
Spread operator

16

let params = [2013, 9, 13, 15, 30];
let date = new Date(...params);
// Sun Oct 13 2013 15:30:00 GMT+0400 (MSK)
let speak = ['#404fest', '#dconf'];
let tags = ['#fronteers13', ...speak, '#wstdays'];
// ["#fronteers13", "#404fest", "#dconf", "#wstdays"]

google
traceur
es6ify
Странные конструкции
Rest parameter

16

function elastic(key, ...items) {
console.log(items);
}
elastic('tags', '#404fest', '#dconf', '#wstdays');
// ["#404fest", "#dconf", "#wstdays"]

google
traceur
es6ify
Странные конструкции

Нет метода
Array.prototype.unique()?
Сделаем его сами
Странные конструкции
let data = [
10, 20, 10, 35, 'S',
'Y', 'S', 35, 10, 'S'
];
let unique = [...new Set(data)];
// [10, 20, 35, "S", "Y"]
Функции

6 000 000 °
Функции
Default argument

16

function fn(a, b = false, c = 'world') {
console.log(a, b, c);
}
fn(10);
// a = 10, b = false, c = "world"
google
traceur
es6ify
Функции
Default argument

16

function fn(a, b = false, c = 'world') {
console.log(a, b, c);
}
fn(10);
// a = 10, b = false, c = "world"
fn(10, 'world', null);
// a = 10, b = "world", c = null

google
traceur
es6ify
Функции
Default argument

16

function fn(a, b = false, c = 'world') {
console.log(a, b, c);
}
fn(10);
// a = 10, b = false, c = "world"
fn(10, 'world', null);
// a = 10, b = "world", c = null
fn(10, 'world', undefined);
// a = 10, b = "world", c = "world"

google
traceur
es6ify
Функции
Default argument
function fn(that = this) {
setTimeout(function() {
console.log(that);
}, 100);
}

16

google
traceur
es6ify
Функции
Arrow function

23

[1, 3, 15, 7, 15, 23].find(function(item) {
return item / 3 === 5;
});

es6ify
harmonizr
Функции
Arrow function

23

[1, 3, 15, 7, 15, 23].find(function(item) {
return item / 3 === 5;
});
[1, 3, 15, 7, 15, 23].find(item => item / 3 === 5);
es6ify
harmonizr
Функции
Arrow function

23

[1, 3, 15, 7, 15, 23].find(function(item) {
return item / 3 === 5;
});
[1, 3, 15, 7, 15, 23].find(item => item / 3 === 5);
[1, 3, 15, 7, 15, 23].find(item => {
let test = item / 3;
return test === 5;
});

es6ify
harmonizr
Генераторы
Генераторы
26

function* compute(degree, max) {
var a = 1;

29

for (let i = 0; i < max; i++) {
yield a;
a = a * degree;
}
}
let gen = compute(2, 3);

google
traceur
es6ify
Генераторы
26

function* compute(degree, max) {
var a = 1;

29

for (let i = 0; i < max; i++) {
yield a;
a = a * degree;
}
}
let gen = compute(2, 3);

google
traceur
es6ify

gen.next(); // { value: 1, done: false }
gen.next(); // { value: 2, done: false }
gen.next(); // { value: 4, done: false }
Генераторы
26

function* compute(degree, max) {
var a = 1;

29

for (let i = 0; i < max; i++) {
yield a;
a = a * degree;
}
}
let gen = compute(2, 3);

google
traceur
es6ify

gen.next(); // { value: 1, done: false }
gen.next(); // { value: 2, done: false }
gen.next(); // { value: 4, done: false }
gen.next(); // { value: undefined, done: true }
Генераторы
26

function* compute(degree, max) {
var a = 1;

29

for (let i = 0; i < max; i++) {
yield a;
a = a * degree;
}
}
for (let degree of compute(2, 5)) {
console.log(degree);
}
// 1, 2, 4, 8, 16

google
traceur
es6ify
Генераторы
26

function* seq(a) {
yield a + 5;

29

let b = yield null;
return a + b;
}
let gen = seq(5);

google
traceur
es6ify
Генераторы
26

function* seq(a) {
yield a + 5;

29

let b = yield null;
return a + b;
}
let gen = seq(5);

google
traceur

gen.next().value; // 10

es6ify
Генераторы
26

function* seq(a) {
yield a + 5;

29

let b = yield null;
return a + b;
}
let gen = seq(5);

google
traceur

gen.next().value; // 10

es6ify

gen.next().value; // null
Генераторы
26

function* seq(a) {
yield a + 5;

29

let b = yield null;
return a + b;
}
let gen = seq(5);

google
traceur

gen.next().value; // 10

es6ify

gen.next().value; // null
gen.next(8).value; // 13
Классы
Классы
class Employee {
constructor(title) {
this.title = title;
}
who() {
console.log(this.title);
}
}

google
traceur
es6ify
harmonizr
Классы
class Employee {
constructor(title) {
this.title = title;
}
who() {
console.log(this.title);
}
}

google
traceur
es6ify

let ryan = new Employee('Райан Стоун');
ryan.who();
// Райан Стоун

harmonizr
Классы
class Chief extends Employee {
constructor(firstname, surname, role) {
super(firstname + ' ' + surname);
this.role = role;
}
fire(person) {
person.dismiss();
}
}

google
traceur
es6ify
harmonizr
Классы
class Chief extends Employee {
constructor(firstname, surname, role) {
super(firstname + ' ' + surname);
this.role = role;
}
fire(person) {
person.dismiss();
}
}
let mat = new Chief('Мэтт', 'Ковальски', 'owner');
mat.who();
// Мэтт Ковальски

google
traceur
es6ify
harmonizr
Ответственный за поддержку стандартов
let
const
Map
Set
WeakMap
Спасибо.

simonenko

simonenko

simonenko.su

More Related Content

What's hot

Быть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря GroovyБыть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря Groovy
Evgeny Kompaniyets
 
CC HackQuest 2010 Full Disclosure (мастер-класс)
CC HackQuest 2010 Full Disclosure (мастер-класс)CC HackQuest 2010 Full Disclosure (мастер-класс)
CC HackQuest 2010 Full Disclosure (мастер-класс)
Dmitry Evteev
 
вадим макишвили Errare
вадим макишвили Errareвадим макишвили Errare
вадим макишвили Errare
rit2010
 
Денис Чистяков: DOM, jQuery и все, все, все
Денис Чистяков: DOM, jQuery и все, все, всеДенис Чистяков: DOM, jQuery и все, все, все
Денис Чистяков: DOM, jQuery и все, все, все
Yandex
 
Лекция 5: Словари. Бинарные деревья поиска
Лекция 5: Словари. Бинарные деревья поискаЛекция 5: Словари. Бинарные деревья поиска
Лекция 5: Словари. Бинарные деревья поиска
Mikhail Kurnosov
 

What's hot (20)

Очень вкусный фрукт Guava
Очень вкусный фрукт GuavaОчень вкусный фрукт Guava
Очень вкусный фрукт Guava
 
Функциональное программирование - Александр Алексеев
Функциональное программирование - Александр АлексеевФункциональное программирование - Александр Алексеев
Функциональное программирование - Александр Алексеев
 
Progr labrab-4-2013-c++
Progr labrab-4-2013-c++Progr labrab-4-2013-c++
Progr labrab-4-2013-c++
 
Быть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря GroovyБыть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря Groovy
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
 
CC HackQuest 2010 Full Disclosure (мастер-класс)
CC HackQuest 2010 Full Disclosure (мастер-класс)CC HackQuest 2010 Full Disclosure (мастер-класс)
CC HackQuest 2010 Full Disclosure (мастер-класс)
 
msumobi2. Лекция 2
msumobi2. Лекция 2msumobi2. Лекция 2
msumobi2. Лекция 2
 
Перевод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в UnicodeПеревод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в Unicode
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности Python
 
вадим макишвили Errare
вадим макишвили Errareвадим макишвили Errare
вадим макишвили Errare
 
Работа с БД в Drupal 7
Работа с БД в Drupal 7Работа с БД в Drupal 7
Работа с БД в Drupal 7
 
Денис Чистяков: DOM, jQuery и все, все, все
Денис Чистяков: DOM, jQuery и все, все, всеДенис Чистяков: DOM, jQuery и все, все, все
Денис Чистяков: DOM, jQuery и все, все, все
 
Лекция 5: Словари. Бинарные деревья поиска
Лекция 5: Словари. Бинарные деревья поискаЛекция 5: Словари. Бинарные деревья поиска
Лекция 5: Словари. Бинарные деревья поиска
 
User Defined Materials in LS-DYNA
User Defined Materials in LS-DYNAUser Defined Materials in LS-DYNA
User Defined Materials in LS-DYNA
 
Отладка в Erlang, trace/dbg
Отладка в Erlang, trace/dbgОтладка в Erlang, trace/dbg
Отладка в Erlang, trace/dbg
 
SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...
SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...
SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...
 
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)
 
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
Правильная организация клиент-карточного взаимодействия — Антон КорзуновПравильная организация клиент-карточного взаимодействия — Антон Корзунов
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
 
Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?
 
QA Fest 2017. Иван Цыганов. Не смешите мой coverage
QA Fest 2017. Иван Цыганов. Не смешите мой coverageQA Fest 2017. Иван Цыганов. Не смешите мой coverage
QA Fest 2017. Иван Цыганов. Не смешите мой coverage
 

Similar to ECMAScript 6 — будущее JavaScript

AddConf. Дмитрий Сошников - Будущее ECMAScript
AddConf. Дмитрий Сошников  - Будущее ECMAScriptAddConf. Дмитрий Сошников  - Будущее ECMAScript
AddConf. Дмитрий Сошников - Будущее ECMAScript
Dmitry Soshnikov
 
Как программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногуКак программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногу
AndreyGeonya
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Глеб Тарасов
 
пабсаб презентейшн
пабсаб презентейшнпабсаб презентейшн
пабсаб презентейшн
Alexey Osipenko
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
Technopark
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в Magento
Magecom Ukraine
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.
DrupalCampDN
 
Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.
MageCloud
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
Dmitry Soshnikov
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкета
student_kai
 

Similar to ECMAScript 6 — будущее JavaScript (20)

Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
AddConf. Дмитрий Сошников - Будущее ECMAScript
AddConf. Дмитрий Сошников  - Будущее ECMAScriptAddConf. Дмитрий Сошников  - Будущее ECMAScript
AddConf. Дмитрий Сошников - Будущее ECMAScript
 
Как программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногуКак программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногу
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
пабсаб презентейшн
пабсаб презентейшнпабсаб презентейшн
пабсаб презентейшн
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
Архитектура корпоративных систем
Архитектура корпоративных системАрхитектура корпоративных систем
Архитектура корпоративных систем
 
Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур
 Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур  Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур
Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в Magento
 
XML Magic
XML MagicXML Magic
XML Magic
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.
 
Разработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительностьРазработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительность
 
Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
 
Kotlin
KotlinKotlin
Kotlin
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибок
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкета
 

More from Alexey Simonenko

Node.js для начинающих
Node.js для начинающихNode.js для начинающих
Node.js для начинающих
Alexey Simonenko
 

More from Alexey Simonenko (9)

Автоматизация разработки курсов: путь от рутины к игре
Автоматизация разработки курсов: путь от рутины к игреАвтоматизация разработки курсов: путь от рутины к игре
Автоматизация разработки курсов: путь от рутины к игре
 
Ликбез по веб-технологиям
Ликбез по веб-технологиямЛикбез по веб-технологиям
Ликбез по веб-технологиям
 
10 игровых механик в HTML Academy
10 игровых механик в HTML Academy10 игровых механик в HTML Academy
10 игровых механик в HTML Academy
 
Веб-дизайнер не художник
Веб-дизайнер не художникВеб-дизайнер не художник
Веб-дизайнер не художник
 
«TIME» — автоматизация агентства
«TIME» — автоматизация агентства«TIME» — автоматизация агентства
«TIME» — автоматизация агентства
 
Адаптивный веб-дизайн
Адаптивный веб-дизайнАдаптивный веб-дизайн
Адаптивный веб-дизайн
 
PR с помощью большого мероприятия
PR с помощью большого мероприятияPR с помощью большого мероприятия
PR с помощью большого мероприятия
 
Facebook для бизнеса
Facebook для бизнесаFacebook для бизнеса
Facebook для бизнеса
 
Node.js для начинающих
Node.js для начинающихNode.js для начинающих
Node.js для начинающих
 

ECMAScript 6 — будущее JavaScript