Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
В докладе рассмотрены подходы к созданию надежных юнит-тестов, которые просты в поддержке и модернизации, а также принципы создания кода пригодного для покрытия автотестами. Приведены два способа внедрения зависимости: с использованием конструктора тестируемого объекта, а также с использованием подхода "выделить и переопределить". Каждый из способов разобран на примере, демонстрирующем особенности его реализации и применения. Приведен ряд практических советов, нацеленных на создание надежных юнит-тестов. Использование на практике приведенных подходов и принципов позволяет упростить процесс поддержки и модификации существующего кода, а также дает уверенность в надежности работы добавляемого нового функционала. В конечном итоге это приводит к повышению качества разрабатываемого продукта.
Функциональное программирование в примерах.
Язык Haskell: характеристики, история, сильные и слабые стороны, истории успеха и неудач.
Спецификация Haskell’98: синтаксис, компиляторы, интепретаторы, документация, IDE.
Особенности языка: тип Maybe, списки, классы типов, основы монад.
Библиотеки и фреймворки: Parsec, GenXml, HaXml
DSL
На десерт что-то из Existential Types, State Monad, ST Monad, Monad Transformers.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
В докладе рассмотрены подходы к созданию надежных юнит-тестов, которые просты в поддержке и модернизации, а также принципы создания кода пригодного для покрытия автотестами. Приведены два способа внедрения зависимости: с использованием конструктора тестируемого объекта, а также с использованием подхода "выделить и переопределить". Каждый из способов разобран на примере, демонстрирующем особенности его реализации и применения. Приведен ряд практических советов, нацеленных на создание надежных юнит-тестов. Использование на практике приведенных подходов и принципов позволяет упростить процесс поддержки и модификации существующего кода, а также дает уверенность в надежности работы добавляемого нового функционала. В конечном итоге это приводит к повышению качества разрабатываемого продукта.
Функциональное программирование в примерах.
Язык Haskell: характеристики, история, сильные и слабые стороны, истории успеха и неудач.
Спецификация Haskell’98: синтаксис, компиляторы, интепретаторы, документация, IDE.
Особенности языка: тип Maybe, списки, классы типов, основы монад.
Библиотеки и фреймворки: Parsec, GenXml, HaXml
DSL
На десерт что-то из Existential Types, State Monad, ST Monad, Monad Transformers.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey Paznikov
ЛЕКЦИЯ 6. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения. Модель памяти C++
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Рассмотрены известные автору подходы к реализации как lock-free, так и fine-grained lock-based set/map: хеш-таблицы, деревья. Что из подходов STL может быть реализовано в lock-free манере, а что принципиально нет. Подводные камни lock-free и их нейтрализация.
Доклад вводит в рассмотрение универсальный адаптер, позволяющий обернуть любой класс с целью добавления новых свойств, отсутствующих в оригинальном классе. Получаемые классы могут иметь в точности такой же интерфейс, как и первоначальные, что позволяет прозрачно заменять их и оборачивать любое количество раз.
Это позволяет добавлять необходимые свойства объектам, не переписывая его с нуля. Предложенная обобщенная концепция будет последовательно введена и проиллюстрирована простыми, но интересными примерами.
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...Alexey Paznikov
ЛЕКЦИЯ 6. Разработка параллельных структур данных на основе блокировок
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
Обобщенное программирование - это подход к программированию, когда алгоритм пишется без указания конкретных типов данных. Используя данный подход можно значительно увеличить количество повторно используемого кода. В C++ данный подход реализуется за счет механизма шаблонов. В данном докладе рассмотрим некоторые возможности по обобщенному программированию, которые предоставляет C++. На конкретных примерах рассмотрим, как они могут упростить нам жизнь и с какими трудностями приходится сталкиваться при их использовании.
ЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ЛЕКЦИЯ 5. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
ЛЕКЦИЯ 8. Многопоточное программирование без использования блокировок. Модель потребитель-производитель. Потокобезопасный стек. Проблема ABA. Указатели опасности.
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ЛЕКЦИЯ 4. Стандарт POSIX Threads. Реентерабельность функций. Обработка сигналов. Локальные данные потоков. Принудительное завершение потоков. Шаблоны программирования с использованием потоков
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
ЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ЛЕКЦИЯ 7. Многопоточное программирование без блокировок. Модель потребитель-производитель. Потокобезопасный стек: проблема ABA, указатели опасности, сборщики мусора, счётчик ссылок, применение модели памяти С++.
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey Paznikov
ЛЕКЦИЯ 6. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения. Модель памяти C++
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Рассмотрены известные автору подходы к реализации как lock-free, так и fine-grained lock-based set/map: хеш-таблицы, деревья. Что из подходов STL может быть реализовано в lock-free манере, а что принципиально нет. Подводные камни lock-free и их нейтрализация.
Доклад вводит в рассмотрение универсальный адаптер, позволяющий обернуть любой класс с целью добавления новых свойств, отсутствующих в оригинальном классе. Получаемые классы могут иметь в точности такой же интерфейс, как и первоначальные, что позволяет прозрачно заменять их и оборачивать любое количество раз.
Это позволяет добавлять необходимые свойства объектам, не переписывая его с нуля. Предложенная обобщенная концепция будет последовательно введена и проиллюстрирована простыми, но интересными примерами.
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...Alexey Paznikov
ЛЕКЦИЯ 6. Разработка параллельных структур данных на основе блокировок
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
Обобщенное программирование - это подход к программированию, когда алгоритм пишется без указания конкретных типов данных. Используя данный подход можно значительно увеличить количество повторно используемого кода. В C++ данный подход реализуется за счет механизма шаблонов. В данном докладе рассмотрим некоторые возможности по обобщенному программированию, которые предоставляет C++. На конкретных примерах рассмотрим, как они могут упростить нам жизнь и с какими трудностями приходится сталкиваться при их использовании.
ЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ЛЕКЦИЯ 5. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
ЛЕКЦИЯ 8. Многопоточное программирование без использования блокировок. Модель потребитель-производитель. Потокобезопасный стек. Проблема ABA. Указатели опасности.
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ЛЕКЦИЯ 4. Стандарт POSIX Threads. Реентерабельность функций. Обработка сигналов. Локальные данные потоков. Принудительное завершение потоков. Шаблоны программирования с использованием потоков
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
ЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ЛЕКЦИЯ 7. Многопоточное программирование без блокировок. Модель потребитель-производитель. Потокобезопасный стек: проблема ABA, указатели опасности, сборщики мусора, счётчик ссылок, применение модели памяти С++.
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
Panel Discussion on Broadband Policy and Planning at Regional Conference on B...Jaroslaw Ponder
This is a supportive set of slides used today during the panel discussion on Broadband Policy and Planning at Regional Conference on Broadband Infrastructure Investment, 20-21 October 2016, Athens
The Holy Spirit
The Comforter
Counselor -
Helper, Advocate – our defender
*Intercessor
Strengthener, Standby
I will send to you from the Father,
the Spirit of Truth Who comes (proceeds) from the Father, He [Himself] will testify regarding Me.”
John 15:26 (AMP)
www.oralhazellministry.org
Solit 2014, EcmaScript 6 in Action, Трухин Юрий solit
Юрий Трухин, Россия. Эксперт по облачным технологиям хостинговой компании InfoboxCloud. В прошлом – обладатель статуса Microsoft Most Valuable Professional. Гик, стратег, разработчик. Подробнее на trukhin.com
«Обзор InfoboxCloud для разработчиков». Development секция. Высокий уровень подготовки. Для разработчиков.
В этом докладе будет рассказано об устройстве InfoboxCloud из первых рук, о деталях внутренней реализации, о том, какую пользу несет облако для разработчиков и о будущем InfoboxCloud. Будут рассмотрены 2 кита облачных технологий: IaaS и PaaS без vendor-lock. Отличная возможность спросить обо всём, что касается PaaS/IaaS непосредственно архитектора и разработчика этих систем.
«EcmaScript 6 in Action». Development секция. Для разработчиков.
Поговорим о том, как жизнь разработчиков изменится с приходом нового стандарта.
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
разработка серверов и серверных приложений лекция №3etyumentcev
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
Андрей Карпов
Вы узнаете, что такое статический анализ кода и историю его развития. Узнаете, как эффективно применять инструменты статического анализа в своей работе, увидите практические примеры использования этой методологии. Доклад ориентирован на программистов, использующих языки Си/Си++, но будет полезен всем
3. 3
2 вебинар
Массивы
Основные конструкции языка, и их применение
Объекты и JSON
Регулярные выражения
Контекст, this, bind, call, apply
ООП, прототипы, ООП в ECMAScript 6
4. 4
Массивы
var array = [];
console.log(typeof (array)); //выведет object
Массив – это объект
Массив – имеет доступ к значениям по числовому
индексу
Для определения массива – можно использовать
утиную типизацию или instanceof
5. 5
instanceof
instanceof позволяет определить является ли объект результатом
создания через определенный метод
Будет работать неправильно при использовании frame для
встроенных типов
function Server(name) {
this.name = name;
this.events = [];
}
var server = new Server("domain");
var json_server = { "name": "mailserver", "events": [] };
if (server instanceof Server) {
console.log("It's server");
if (server.events instanceof Array) {
console.log("server.events is array");
}
}
if (!(json_server instanceof Server)) {
console.log("json doesn't work with instanceof");
}
6. 6
Утиная типизация
var array = [];
console.log(typeof (array));
if (array.pop && array.push) {
console.log("it's array");
}
Если что-то плавает как утка, крякает как утка и
выглядит как утка, то это утка
7. 7
Перебор массива
Перебор массива возможен используя for с
двумя разными индексами
var array = ['c', 'c++', 'java', 'c#', 'php'];
array[6] = "javascript";
for (var i = 0; i < array.length; i++) {
console.log("array[" + i + "] = " + array[i]);
}
for (var i in array) {
console.log("array[" + i + "] = " + array[i]);
}
8. 8
Длина массива
Свойство массива length не отображает количество элементов в
массиве, а отображает последний цифровой индекс+1
Обращение к несуществующему значению в массиве по индексу
вернет undefined
var array = ['c', 'c++', 'java', 'c#', 'php'];
array[9] = "javascript";
console.log(array.length);
for (var i = 0; i < array.length; i++) {
console.log("array[" + i + "] = " + array[i]);
}
9. 9
Реализация стека: push и pop
var array = ['c', 'c++', 'java', 'c#', 'php'];
if (array.pop && array.push) {
array.push("python", "javascript");
console.log(array);
while (array.length > 0) {
console.log(array.pop());
}
}
Для добавления и удаления элементов в начале массива - методы shift и unshift,
но они работают медленнее чем push и pop. Но для реализации очереди все
равно придется их использовать.
10. 10
try .. catch .. finally
var array = ['c', 'c++', 'java', 'c#', 'php'];
try {
for (var i = 0; i <= array.length; i++) {
if (array[i].length > 2) {
numbers.push(array[i]);
}
};
}
catch (error) {
console.log(error);
}
finally {
console.log("end of array");
}
11. 11
Методы
Методы объявляются ключевым словом function
Ссылку на метод можно присвоить переменной
Метод можно назначить свойствам объекта
function foo(text) {
console.log(text);
}
var alert_text = function (text) {
alert(text);
};
var method = foo;
method("some text");
alert_text("new text");
window.my_method = alert_text;
window.my_method("alert from window");
12. 12
Объявление метода
Три типа объявления методов
При объявлении метода с использованием Function Declaration она будет доступна
всегда
Function Declaration аналогичен объявлению через конструктор функции
Function([args],[function text])
При объявлении метода с использованием Function Expression она будет доступна
только в момент выполнения
foo("some text");
alert_text("new text"); // выведет ошибку, что undefined это не функция
//Function declaration
function foo(text) {
console.log(text);
}
//Function expression
var alert_text = function (text) {
alert(text);
};
13. 13
Декларация методов и переменных
Function declaration отрабатывает _до_ запуска кода.
Такое же поведение используется для var.
Специальное явление: hoisting
console.log(text);
console.log(date); // выдаст ошибку ReferenceError: date is not defined
var text = "some value";
console.log(text);
14. 14
Методы и область видимости
Область видимости создается только для методов
На уровне интерпретатора она реализована через
специальный объект LexicalEnvironment
var outer_variable = true;
function check_variable() {
var inner_variable = false;
console.log(outer_variable);
console.log(inner_variable);
}
check_variable();
console.log(outer_variable);
console.log(inner_variable); // выдаст ошибку ReferenceError: inner_variable is not defined
15. 15
Замыкания
JS поддерживает замыкания
Работа замыканий организована через [[Scope]]
Объект не будет удален, пока на него есть ссылка хоть в одном
[[Scope]]
function create_console_out() {
var text = "[DEBUG] ";
return function log(text_to_console) {
console.log(text + text_to_console);
}
}
var con = create_console_out();
con("error")
16. 16
Перегрузка
Перегрузки в js не существует
Количество аргументов у метода не строгое значение
function error_log(error) {
console.log("[ERROR] " + error);
}
function error_log(error, type) {
console.log("[ERROR type of " + type + "] " + error);
}
var array = ['c', 'c++', 'java', 'c#', 'php'];
try {
for (var i = 0; i <= array.length; i++) {
if (array[i].length > 2) {
numbers.push(array[i]);
}
};
}
catch (error) { error_log(error); }
finally { console.log("end of array") }
17. 17
Arguments
Может содержать любые данные
Не является массивом
function log_args(arg) {
console.log(arguments);
for (var key in arguments) {
console.log("arguments[" + key + "] = " + arguments[key]);
}
var isArray = !!(arguments.push & arguments.pop);
console.log("isArray is " + isArray);
}
log_args("first", "second", null, true, { "name": "John Doe", "age": 32 });
18. 18
Объекты
Объекты – составной тип
Объекты состоят из свойств и перечислений
При присваивании копируется ссылка
Объект можно создать с помощью {}, new Object(), или function.
var a = new Object(); // эквивалентно var a = {};
a[name] = "John Doe";
var b = a;
a.name = "Bill Gates";
console.log(b.name);
19. 19
Копирование объектов
Получение всех ключей объекта производится с
помощью конструкции for..in
var worker1 = {};
worker1.name = "John Doe";
worker1.isWorker = true;
worker1.age = 32;
var worker2 = {};
for (var key in worker1) {
worker2[key] = worker1[key];
}
worker1.name = "Bill Gates";
console.log(worker1);
console.log(worker2);
20. 20
Произвольные поля у массива
Массиву как и любому другому объекту, можно
присвоить значение свойства.
var array = ['c', 'c++', 'java', 'c#', 'php'];
console.log(array);
array.foo = "text";
console.log(array);
for (var val in array) {
console.log(val);
}
23. 23
Регулярные выражения
Имеют специальный синтаксис для объявления
var regex = /w+b/g;
var text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.";
var array = text.match(regex);
console.log(array);
24. 24
Методы работы с регулярными выражениями
RegExp.exec("string") – самый функциональный метод
RegExp.test("string") – успешность поиска
String.match(/regexp/) – все совпадения паттерна
String.search(/regexp/) – стартовая позиция совпавшего значения
String.replace(/regexp/, /regexp/) – замена по регулярному выражению
String.split(/regexp/) – разделение на массив по регулярному выражению
25. 25
RegExp.exec
Объект регулярных выражение можно
использовать для перебора совпадений
Содержит позицию начала совпавшего значения
var regexp = /w+b/g;
var text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.";
var word;
while (word = regexp.exec(text)) {
console.log("processing word:" + word + " match index = " + word.index);
}
26. 26
Контекст
this – это контекст выполнения метода
this не фиксируется в момент создания метода, а
вычисляется в момент его выполнения
this для обычного вызова метода является вызывающий
объект
this можно управлять методами bind, call, apply
27. 27
this – обычный вызов
Устаревшее поведение для методов является
подставлять в this объект window
function test_this() {
console.log(this);
}
test_this();
28. 28
this use strict
При использовании строгого режима работы
скриптов, в объект this при обычном вызове
метода передается undefined
function test_this() {
"use strict";
console.log(this);
}
test_this();
29. 29
use strict
Специальный режим для работы скриптов
используя новые версии стандарта js
Создан для использования несовместимых с
предыдущими версиями стандарта
Работает в последних версиях популярных
браузеров
30. 30
Присвоение переменной
В новом стандарте создание переменной без
ключевого слова var считается ошибкой
function assign_text() {
new_text = "bananananana";
console.log(new_text);
}
assign_text(); //bananananana
function assign_text_strict() {
"use strict";
text = "bananananana";
console.log(text);
}
assign_text_strict(); //ReferenceError: text is not defined
31. 31
this как метод объекта
this присваивается объект, который вызвал
метод
function do_work() {
for (var hour = 9; hour < this.clock_work_till; hour++) {
console.log(this.name + " does some stuff. Now is " +hour +" o'clock.");
}
}
var worker = { "name": "John Doe", "age": 32 , "clock_work_till":17};
worker.work = do_work;
worker.work();
32. 32
This для создания объектов
Объект, в классическом понимании, в js не имеет
конструктора. Его можно заменить new function
function do_work() {
for (var hour = 9; hour < this.clock_work_till; hour++) {
console.log(this.name + " does some stuff. Now is " + hour + " o'clock.");
}
}
function Worker(name, age, clock_work_till, work) {
this.name = name;
this.age = age;
this.clock_work_till = clock_work_till;
this.work = work;
}
var worker = new Worker("John Doe", 32, 17, do_work);
worker.work();
33. 33
bind
Метод bind служит
- для привязывания контекста к определенному методу
- для каррирования методов
Метод bind не поддерживается в <IE9
function do_work() {
for (var hour = 9; hour < this.clock_work_till; hour++) {
console.log(this.name + " do some stuff. Now is " + hour + " o'clock.");
}
}
function Worker(name, age, clock_work_till, work) {
this.name = name;
this.age = age;
this.clock_work_till = clock_work_till;
this.work = work;
}
var worker = new Worker("John Doe", 32, 17, do_work);
var john_work = worker.work.bind(worker);
john_work();
34. 34
Карринг методов
Карринг (каррирование) - это использование
метода с заранее известными параметрами.
function Worker(name, age, clock_work_till, work) {
this.name = name;
this.age = age;
this.work = work.bind(this, clock_work_till);
}
var worker1 = new Worker("John Doe", 32, 17, do_work);
var worker2 = new Worker("Bill Gates", 55, 13, do_work);
worker1.work(); //установив значение, мы можем не указывать его при вызове
worker2.work();
35. 35
call, apply
Методы call и apply
используются для
явного указания
контекста
выполнения.
function process(obj) {
var type = obj.type;
switch(type){
case 1:
console.log(obj.messages[0]);
break;
default:
break;
}
}
function log_error_message() {
console.log("error, when trying to process message with type " +
this.type);
}
var server_answer=[];
server_answer.push({ "type": 1, "messages": ["John", "Bill", "Zuck"] });
server_answer.push({ "type": 0, "messages": null });
server_answer.push({ "type": 1, "messages": null });
for (var key in server_answer) {
try {
process(server_answer[key]);
}
catch (e)
{
log_error_message.call(server_answer[key]);
}
}
36. 36
call, apply
Метод call от метода apply
отличается лишь тем, что в
метод apply можно передать
массив аргументов, в то
время как для метода apply
вы каждый раз будете
указывать их явно.
function print_arguments() {
for (var key in arguments) {
console.log(arguments[key]);
}
}
print_arguments.call(null, "first", "second", 32, true);
var args = [];
args.push("c");
args.push("c++");
args.push("java");
args.push("c#");
print_arguments.apply(null, args);
37. 37
ООП
Классы представляют собой "конструктор" и прототип.
Сначала значение ищется в объекте, затем в его прототипе.
Все новые значения полей объекта записываются в объект.
Объекты в прототипе хранятся по ссылке, и соответственно
работа с ними тоже изначально ведется по ссылке
38. 38
Наследование
function Server(name) {
this.name = name;
this.events = [];
}
Server.prototype.ReceiveMessage = function(message) {
this.events.push(message);
};
Server.prototype.PrintMessages = function () {
for (var key in this.events)
console.log(this.events[key]);
};
Server.js, MailServer.js, DomainServer.js
var servers = [];
var domain = new Domain("domain", "auriga");
servers.push(domain);
var mailserver = new MailServer("exchange");
servers.push(mailserver);
domain.events.push("restart");
mailserver.events.push("sending mails");
domain.events.push("authorization");
for (var key in servers) {
servers[key].PrintMessages();
}
AdminPage.js
function MailServer(name) {
this.name = name;
this.events = [];
}
MailServer.prototype = Object.create(Server.prototype);
function Domain(name, domain_name) {
this.name = name;
this.domain_name = domain_name;
this.events = [];
}
Domain.prototype = Object.create(Server.prototype);
39. 39
ООП в ECMAScript 6
class Server
{
constructor(name)
{
this.name = name;
}
}
class MailServer extends Server
{
constructor(name)
{
super.constructor(name);
}
}
class Domain extends Server
{
constructor(name,domain_name)
{
super.constructor(name);
this.domain_name = domain_name;
}
}
var domain = new Domain("domain", "auriga");
if (domain instanceof Domain) {
console.log("Domain created");
}
Ключевые слова:
-class
-super
-extends
-instanceof
40. 40
Contacts
Thank You and
We Look Forward to Working with You
Auriga, USA
92 Potter Rd, Ste 1
Wilton, NH 03086, USA
Phone: +1 (866) 645-1119
Fax: +1 (603) 386-6097
info@auriga.com
www.auriga.com
Auriga, Russia
125 Varshavskoe Shosse, Unit 16A
Moscow, 117587
Tel:+7 (495) 713-9900
Fax:+7 (495) 939-0300
info@auriga.com
www.auriga.com