SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
EcmaScript 6 in action
Что JS новый нам готовит
Юрий Трухин)
cloud computing expert @infoboxcloud
trukhinyuri@infoboxcloud.com
twitter.com/trukhinyuri
Обо мне
• В InfoboxCloud с 2013 года
• Отвечаю за счастье гиков в
облаках
• Думаю о будущем и
воплощаю его
• Адвокат пользователей
• Пишу код и рассказываю об
этом
Многое в вебе улучшалось в последнее
время…
Многое в вебе улучшалось в последнее
время…
но не основа EcmaScript
Наступает счастье EcmaScript 6
Наступает счастье EcmaScript 6
релиз стандарта запланирован на конец 2014
Что такое Harmony?
Набор идей, не вошедших в EcmaScript 5 (3.1)
Цель:
сложные приложения
переход к тестируемой спецификации
адаптация стандартов дефакто где возможно
сохранение версионирования простым
поддержка статической типизации где необходимо
библиотеки
кодогенераторы
Предложения
улучшения функций
генераторы и итераторы
модульность
улучшения api
полная поддержка UTF-16
scoping binding, callingколлекции
arrow functions =>
Стрелочные функции обеспечивают лексическое
связывание. this, super и arguments определяются не тем,
как функции были вызваны, а тем - как были созданы.
!
this, super и arguments не изменяются на протяжении
всего цикла жизни функции.
!
Стрелочные функции не могут быть использованы как
конструктор - при использовании new будет ошибка.
!
Собственное значение arguments недоступно.
arrow functions =>
var fun = (x) => x;
Синтаксис
Объявление всегда начинается со списка аргументов, далее
стрелка и тело функции.
1 параметр
var result = value => value;
var result = function (value) { return value; };
Скобки не обязательны.
В теле функции фигурные скобки и return не обязательны.
несколько параметров
var sum = (arg1, arg2) => arg1 + arg2;
var sum = function (arg1, arg2) { return arg1 + arg2; };
arrow functions =>
Синтаксис
без парамеров
var sum = () => 1 + 2;
var sum = function () { return 1 + 2; };
Если тело функции содержит более одного выражения -
нужно использовать.
традиционный синтаксис
var sum = (arg1, arg2) => { return arg1 + arg2; };
var sum = function (arg1, arg2) { return 1 + 2; };
arrow functions =>
var item = id => ({ id: id, name: “Name”});
var item = function(id) {return {id: id, name: “Name”} };
Если тело функции не содержит фигурных скобок и просто
возвращает литерал объекта - должно быть в круглых
скобках.
переменное число параметров
var item = (…rest) => rest;
var item = function () { return [].slice.apply(arguments) };
литерал объекта
используем rest паттерн из шаблонов деструктуризации
для любых шаблонов деструктуризации как единственного
параметра функции наличие круглых скобок обязательно
Function to String
conversion
Если вызван Function.prototype.toString.call(fn), to eval по
результату должен вызвать ту же функцию в том же
лексическом контексте:
!
- должны сработать биндинги к переменным в этом scope
!
- если исполняется внутри use strict; – может быть
нарушена строгость оригинального контекста.
Function Name property
У каждой функции есть свойство name типа String.
Автоматически выводит имена для синтезированных
функций (get, set, bind).
Позволяет штатно изменять имя функции.
Свойство name не поменяет Function.prototype.toString();
Block scoping bindings
let, const, block functions разрешаются для всей
программы, тела функции или блока. Разница с ES5 Strict
mode – не позволял определение в блоке.
let – новый var, но с block scope
const – неизменяемый let
block functions – функции в let
Destructing
Позволяет деструктурировать данные при присваивании.
Перемена мест
[a, b] = [b, a]
function f() { return [1,2]; }
var a,b;
[a, b] = f();
Действует только слева от =.
Возврат нескольких значений из функции
Игнорирование некоторых значений при возврате
function f() { return [1,2,3]; }
var [a, , b] = f();
Destructing
Погружение в массив
[a,,[b,,[c]]] = f();
Деструктуризация объекта
var {op: a, lhs: b, rhs: c} = getASTNode();
Погружение в объект
var {op: a, lhs: {op: b}, rhs: c} = getASTNode();
Цикл по объекту
for (let [name, value] in obj)
print (name, value);
Цикл по значениям в объекте
for each ( let { name: n, family: {father: f} } in obj)
print (n, f)
Destructing
Погружение в массив
[a,,[b,,[c]]] = f();
Деструктуризация объекта
var {op: a, lhs: b, rhs: c} = getASTNode();
Погружение в объект
var {op: a, lhs: {op: b}, rhs: c} = getASTNode();
Цикл по объекту
for (let [name, value] in obj)
print (name, value);
Цикл по значениям в объекте
for each ( let { name: n, family: {father: f} } in obj)
print (n, f)
Destructing refutable
patterns
Несоответствие паттерну вызывает исключение
let ?[x, y, z] = [1, 2] //x =1, y = 2, z = undefined
let {?a: x} = {} // x = undefined
let {a: x} = {} // throw
Parameter default values
Возможность использования опциональных параметров без
проверки их задания.
function add (x = 0, y = 0) {
return x + y;
};
Rest parameters
Возможность передавать различное количество
параметров, позволяя определять устаревшие и т.д.
function simpleApply (func, …args) {
return func.apply(undefined, args);
};
Rest parameters
Возможность передавать различное количество
параметров, позволяя определять устаревшие и т.д.
function simpleApply (func, …args) {
return func.apply(undefined, args);
};
Direct Proxies
Конструирование proxy объекта:
var proxy = Proxy(target, handler);
target и handler – Objects.
Объект, для которого разработчик должен определить свое
поведение.
var p = Proxy.create({
get: function (proxy, name) {
return “Hello”, name;
}
});
document.write (p.World);
handler – обработчик мета уровня.
name – прототип прокси-объекта.
Proxy.createFunction (handler,
call, construct);
Generators: yield
Вычисляют следующее значение функции только при
обращении к нему.
Бесконечные потоки
function* fibonacci () {
var a = 0, b = 1, c = 0;
while (true) {
yield a;
c = a;
a = b;
b = c + b;
}
}
!
function run() {
var seq = fibonacci();
console.log(seq.next().value); //0
console.log(seq.next().value); //1
}
Modules
module A {
export function fa() {…}
export function fb(i) {…}
}
!
A.fa();
import A.*;
fb(5);
!
Возможность разработки изолированных модулей.
Поддерживается загрузка из внешнего пути.
Финальная семантика еще не определена.
Это далеко не все, что войдет в EcmaScript 6,
но готовиться нужно уже сейчас!
Вопросы?
Проверить поддержку EcmaScript 6:
http://kangax.github.io/es5-compat-table/es6/
Google Traceur Compiler
https://github.com/google/traceur-compiler
trukhinyuri@infoboxcloud.com
Пишите мне по любым вопросам!

Contenu connexe

Tendances

Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковSergey Platonov
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотекPyNSK
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPython Meetup
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Sergey Schetinin
 
Сладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и ZephirСладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и ZephirCodeFest
 
Python&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.byPython&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.byPython Meetup
 
Haskell
HaskellHaskell
HaskellDevDay
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
 
Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаAlexander Kucherenko
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Yauheni Akhotnikau
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonPython Meetup
 
Как программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногуКак программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногуAndreyGeonya
 
Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Alexander Granin
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаAnton Arhipov
 
парадигмы программирования и шаблоны проектирования
парадигмы программирования и шаблоны проектированияпарадигмы программирования и шаблоны проектирования
парадигмы программирования и шаблоны проектированияmoldovaictsummit2016
 

Tendances (20)

msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
 
Clojure #1
Clojure #1Clojure #1
Clojure #1
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
 
Clojure #2 (2014)
Clojure #2 (2014)Clojure #2 (2014)
Clojure #2 (2014)
 
Сладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и ZephirСладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и Zephir
 
Python&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.byPython&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.by
 
Funny JS #2
Funny JS #2Funny JS #2
Funny JS #2
 
Haskell
HaskellHaskell
Haskell
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языка
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
 
Как программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногуКак программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногу
 
Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчика
 
парадигмы программирования и шаблоны проектирования
парадигмы программирования и шаблоны проектированияпарадигмы программирования и шаблоны проектирования
парадигмы программирования и шаблоны проектирования
 

En vedette

DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6Dmitry Soshnikov
 
JavaScript. Асинхронное программирование. Promise & Deferred
JavaScript. Асинхронное программирование. Promise & DeferredJavaScript. Асинхронное программирование. Promise & Deferred
JavaScript. Асинхронное программирование. Promise & Deferreddokhrimenko
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
AddConf. Дмитрий Сошников - Будущее ECMAScript
AddConf. Дмитрий Сошников  - Будущее ECMAScriptAddConf. Дмитрий Сошников  - Будущее ECMAScript
AddConf. Дмитрий Сошников - Будущее ECMAScriptDmitry Soshnikov
 
"Готовим промисы правильно", Андрей Яманов, MoscowJS 24
"Готовим промисы правильно", Андрей Яманов, MoscowJS 24"Готовим промисы правильно", Андрей Яманов, MoscowJS 24
"Готовим промисы правильно", Андрей Яманов, MoscowJS 24MoscowJS
 
Обзор ES2015(ES6)
Обзор ES2015(ES6)Обзор ES2015(ES6)
Обзор ES2015(ES6)Alex Filatov
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"oelifantiev
 
"Как написать компилятор за 15 минут", Андрей Гершун, MoscowJS 24
"Как написать компилятор за 15 минут", Андрей Гершун, MoscowJS 24"Как написать компилятор за 15 минут", Андрей Гершун, MoscowJS 24
"Как написать компилятор за 15 минут", Андрей Гершун, MoscowJS 24MoscowJS
 
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6Dmitry Soshnikov
 
Дэвид Флэнаган — Javascript (5 издание)
Дэвид Флэнаган — Javascript (5 издание)Дэвид Флэнаган — Javascript (5 издание)
Дэвид Флэнаган — Javascript (5 издание)mlatushko
 
Кружок по робототехнике. Занятие #4. Программируем датчики касания и звука
Кружок по робототехнике. Занятие #4. Программируем датчики касания и звукаКружок по робототехнике. Занятие #4. Программируем датчики касания и звука
Кружок по робототехнике. Занятие #4. Программируем датчики касания и звукаAlexander Kolotov
 
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)Ontico
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)Ontico
 
ECMAScript 6: A Better JavaScript for the Ambient Computing Era
ECMAScript 6: A Better JavaScript for the Ambient Computing EraECMAScript 6: A Better JavaScript for the Ambient Computing Era
ECMAScript 6: A Better JavaScript for the Ambient Computing EraAllen Wirfs-Brock
 
Александр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionАлександр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionMoscowJS
 
ES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern JavascriptES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern JavascriptWojciech Dzikowski
 

En vedette (18)

DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
 
JavaScript. Асинхронное программирование. Promise & Deferred
JavaScript. Асинхронное программирование. Promise & DeferredJavaScript. Асинхронное программирование. Promise & Deferred
JavaScript. Асинхронное программирование. Promise & Deferred
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
AddConf. Дмитрий Сошников - Будущее ECMAScript
AddConf. Дмитрий Сошников  - Будущее ECMAScriptAddConf. Дмитрий Сошников  - Будущее ECMAScript
AddConf. Дмитрий Сошников - Будущее ECMAScript
 
доклад
докладдоклад
доклад
 
"Готовим промисы правильно", Андрей Яманов, MoscowJS 24
"Готовим промисы правильно", Андрей Яманов, MoscowJS 24"Готовим промисы правильно", Андрей Яманов, MoscowJS 24
"Готовим промисы правильно", Андрей Яманов, MoscowJS 24
 
Обзор ES2015(ES6)
Обзор ES2015(ES6)Обзор ES2015(ES6)
Обзор ES2015(ES6)
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
"Как написать компилятор за 15 минут", Андрей Гершун, MoscowJS 24
"Как написать компилятор за 15 минут", Андрей Гершун, MoscowJS 24"Как написать компилятор за 15 минут", Андрей Гершун, MoscowJS 24
"Как написать компилятор за 15 минут", Андрей Гершун, MoscowJS 24
 
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
 
Дэвид Флэнаган — Javascript (5 издание)
Дэвид Флэнаган — Javascript (5 издание)Дэвид Флэнаган — Javascript (5 издание)
Дэвид Флэнаган — Javascript (5 издание)
 
Кружок по робототехнике. Занятие #4. Программируем датчики касания и звука
Кружок по робототехнике. Занятие #4. Программируем датчики касания и звукаКружок по робототехнике. Занятие #4. Программируем датчики касания и звука
Кружок по робототехнике. Занятие #4. Программируем датчики касания и звука
 
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
 
ECMAScript 6: A Better JavaScript for the Ambient Computing Era
ECMAScript 6: A Better JavaScript for the Ambient Computing EraECMAScript 6: A Better JavaScript for the Ambient Computing Era
ECMAScript 6: A Better JavaScript for the Ambient Computing Era
 
Александр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionАлександр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in action
 
ES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern JavascriptES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern Javascript
 
ES6: The Awesome Parts
ES6: The Awesome PartsES6: The Awesome Parts
ES6: The Awesome Parts
 

Similaire à Ecma script 6 in action

Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияYandex
 
Объектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptОбъектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptDenis Latushkin
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияYandex
 
Михаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxМихаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxYandex
 
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...Sigma Software
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentAnton Kirillov
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному кодуVasiliy Deynega
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agencyit-people
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 
Михаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияМихаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияYandex
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
 

Similaire à Ecma script 6 in action (20)

Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знания
 
Объектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptОбъектное и прототипное программирование в Javascript
Объектное и прототипное программирование в Javascript
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
course js day 2
course js day 2course js day 2
course js day 2
 
Bytecode
BytecodeBytecode
Bytecode
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знания
 
Михаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxМихаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajax
 
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application Development
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
In the sun.misc.Unsafe bowels
In the sun.misc.Unsafe bowelsIn the sun.misc.Unsafe bowels
In the sun.misc.Unsafe bowels
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
Михаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияМихаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знания
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 

Ecma script 6 in action

  • 1. EcmaScript 6 in action Что JS новый нам готовит Юрий Трухин) cloud computing expert @infoboxcloud trukhinyuri@infoboxcloud.com twitter.com/trukhinyuri
  • 2. Обо мне • В InfoboxCloud с 2013 года • Отвечаю за счастье гиков в облаках • Думаю о будущем и воплощаю его • Адвокат пользователей • Пишу код и рассказываю об этом
  • 3. Многое в вебе улучшалось в последнее время…
  • 4. Многое в вебе улучшалось в последнее время… но не основа EcmaScript
  • 6. Наступает счастье EcmaScript 6 релиз стандарта запланирован на конец 2014
  • 7. Что такое Harmony? Набор идей, не вошедших в EcmaScript 5 (3.1) Цель: сложные приложения переход к тестируемой спецификации адаптация стандартов дефакто где возможно сохранение версионирования простым поддержка статической типизации где необходимо библиотеки кодогенераторы
  • 8. Предложения улучшения функций генераторы и итераторы модульность улучшения api полная поддержка UTF-16 scoping binding, callingколлекции
  • 9. arrow functions => Стрелочные функции обеспечивают лексическое связывание. this, super и arguments определяются не тем, как функции были вызваны, а тем - как были созданы. ! this, super и arguments не изменяются на протяжении всего цикла жизни функции. ! Стрелочные функции не могут быть использованы как конструктор - при использовании new будет ошибка. ! Собственное значение arguments недоступно.
  • 10. arrow functions => var fun = (x) => x; Синтаксис Объявление всегда начинается со списка аргументов, далее стрелка и тело функции. 1 параметр var result = value => value; var result = function (value) { return value; }; Скобки не обязательны. В теле функции фигурные скобки и return не обязательны. несколько параметров var sum = (arg1, arg2) => arg1 + arg2; var sum = function (arg1, arg2) { return arg1 + arg2; };
  • 11. arrow functions => Синтаксис без парамеров var sum = () => 1 + 2; var sum = function () { return 1 + 2; }; Если тело функции содержит более одного выражения - нужно использовать. традиционный синтаксис var sum = (arg1, arg2) => { return arg1 + arg2; }; var sum = function (arg1, arg2) { return 1 + 2; };
  • 12. arrow functions => var item = id => ({ id: id, name: “Name”}); var item = function(id) {return {id: id, name: “Name”} }; Если тело функции не содержит фигурных скобок и просто возвращает литерал объекта - должно быть в круглых скобках. переменное число параметров var item = (…rest) => rest; var item = function () { return [].slice.apply(arguments) }; литерал объекта используем rest паттерн из шаблонов деструктуризации для любых шаблонов деструктуризации как единственного параметра функции наличие круглых скобок обязательно
  • 13. Function to String conversion Если вызван Function.prototype.toString.call(fn), to eval по результату должен вызвать ту же функцию в том же лексическом контексте: ! - должны сработать биндинги к переменным в этом scope ! - если исполняется внутри use strict; – может быть нарушена строгость оригинального контекста.
  • 14. Function Name property У каждой функции есть свойство name типа String. Автоматически выводит имена для синтезированных функций (get, set, bind). Позволяет штатно изменять имя функции. Свойство name не поменяет Function.prototype.toString();
  • 15. Block scoping bindings let, const, block functions разрешаются для всей программы, тела функции или блока. Разница с ES5 Strict mode – не позволял определение в блоке. let – новый var, но с block scope const – неизменяемый let block functions – функции в let
  • 16. Destructing Позволяет деструктурировать данные при присваивании. Перемена мест [a, b] = [b, a] function f() { return [1,2]; } var a,b; [a, b] = f(); Действует только слева от =. Возврат нескольких значений из функции Игнорирование некоторых значений при возврате function f() { return [1,2,3]; } var [a, , b] = f();
  • 17. Destructing Погружение в массив [a,,[b,,[c]]] = f(); Деструктуризация объекта var {op: a, lhs: b, rhs: c} = getASTNode(); Погружение в объект var {op: a, lhs: {op: b}, rhs: c} = getASTNode(); Цикл по объекту for (let [name, value] in obj) print (name, value); Цикл по значениям в объекте for each ( let { name: n, family: {father: f} } in obj) print (n, f)
  • 18. Destructing Погружение в массив [a,,[b,,[c]]] = f(); Деструктуризация объекта var {op: a, lhs: b, rhs: c} = getASTNode(); Погружение в объект var {op: a, lhs: {op: b}, rhs: c} = getASTNode(); Цикл по объекту for (let [name, value] in obj) print (name, value); Цикл по значениям в объекте for each ( let { name: n, family: {father: f} } in obj) print (n, f)
  • 19. Destructing refutable patterns Несоответствие паттерну вызывает исключение let ?[x, y, z] = [1, 2] //x =1, y = 2, z = undefined let {?a: x} = {} // x = undefined let {a: x} = {} // throw
  • 20. Parameter default values Возможность использования опциональных параметров без проверки их задания. function add (x = 0, y = 0) { return x + y; };
  • 21. Rest parameters Возможность передавать различное количество параметров, позволяя определять устаревшие и т.д. function simpleApply (func, …args) { return func.apply(undefined, args); };
  • 22. Rest parameters Возможность передавать различное количество параметров, позволяя определять устаревшие и т.д. function simpleApply (func, …args) { return func.apply(undefined, args); };
  • 23. Direct Proxies Конструирование proxy объекта: var proxy = Proxy(target, handler); target и handler – Objects. Объект, для которого разработчик должен определить свое поведение. var p = Proxy.create({ get: function (proxy, name) { return “Hello”, name; } }); document.write (p.World); handler – обработчик мета уровня. name – прототип прокси-объекта. Proxy.createFunction (handler, call, construct);
  • 24. Generators: yield Вычисляют следующее значение функции только при обращении к нему. Бесконечные потоки function* fibonacci () { var a = 0, b = 1, c = 0; while (true) { yield a; c = a; a = b; b = c + b; } } ! function run() { var seq = fibonacci(); console.log(seq.next().value); //0 console.log(seq.next().value); //1 }
  • 25. Modules module A { export function fa() {…} export function fb(i) {…} } ! A.fa(); import A.*; fb(5); ! Возможность разработки изолированных модулей. Поддерживается загрузка из внешнего пути. Финальная семантика еще не определена.
  • 26. Это далеко не все, что войдет в EcmaScript 6, но готовиться нужно уже сейчас! Вопросы? Проверить поддержку EcmaScript 6: http://kangax.github.io/es5-compat-table/es6/ Google Traceur Compiler https://github.com/google/traceur-compiler trukhinyuri@infoboxcloud.com Пишите мне по любым вопросам!