WWW.LIBRUS.DOBROTA.BIZ
БЕСПЛАТНАЯ  ИНТЕРНЕТ  БИБЛИОТЕКА - собрание публикаций
 

«Дмитрий Козорез 2Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 Развивая Java Lambda ...»

1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13

Project Lambda в JDK8

Дмитрий Козорез

2Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13

Развивая Java

Lambda expressions(closures, замыкания)

Default methods (развитие интерфейсов)

3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Развивая Java Lambda expressions(closures, замыкания) Default methods (развитие интерфейсов) Java SE 8 большой шаг в развитии библиотек Java Групповые операции на Collections «Параллельные» библиотеки 4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Что же такое Lambda Expression?

Lamba expression(closure) = анонимный метод

- который имеет список аргументов, возвращаемый тип и тело (Object o) o.toString() 5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Что же такое Lambda Expression?

Lamba expression(closure) = анонимный метод

- который имеет список аргументов, возвращаемый тип и тело (Object o) o.toString()

- может использовать локальные переменные (Person p) p.getName().equals(name) Method reference это ссылка на существующий метод Object::toString 6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Времена изменились В 1995 большинство популярных языков не поддерживали замыкания Сегодня, Java один из последних распространенных язков, не имеющих поддержки замыканий .

- В C++ они были недавно добавлены

- В С# с версии 3.0

- Все создаваемые ныне языки создаются с поддержкой замыканий “In another 30 years people will laugh at anyone who tries to invent a language without closures, just as they’ll laugh now at anyone who tries to invent a language without recursion.”

-Mark Jason Dominus 7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Длинная дорога Java к замыканиям 1997 – Odersky/Wadler экспериментальный проект “Pizza” 1997 – Java 1.1 добавление вложенных классов – слабой формы замыканий

– слишком сложные правила разрешения имен и много ограничений 2006-2008 многочисленные дебаты в сообществе о замыканиях

– никаких существенных сдвигов 8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Длинная дорога Java к замыканиям Декабрь 2009 – OpenJDK Project Lambda Ноябрь 2010 – JSR-335 создан Текущий статус

- Спецификация EDR (early draft review) готова

- Прототип (исходный код и бинарные файлы) доступны в OpenJDK

- Часть Java SE 8 (2013) 9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

External Iteration Пример перекрашивает красные блоки в синий цвет Используя foreach цикл

- Цикл последователен

- Клиент вынужден управлять итерациями Это называется external iteration

–  –  –

10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Lambda Expressions Переписанный с использованием lambda и Collection.forEach

- Не просто синтаксический сахар

- Теперь библиотека контролирует проход по циклу

- Это внутренняя итерация

- Больше “что”, меньше “как”

–  –  –

11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .





Функциональные интерфейсы Какой тип у лямбды или ссылки на метод?

- Лямбда = интерфейс с одним методом*

- Runnable, Comparator, ActionListener

- functional interfaces

- PredicateT, BlockT Лямбда рассматривается как экземпляр функционального интерфейса PredicateString isEmpty = s s.isEmpty();

PredicateString isEmpty = String::isEmpty;

Runnable r = () {System.out.println(“Boo!”) };

–  –  –

14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Эволюция интерфейсов Интерфейсы – палка о двух концах

- Невозможно изменить пока вы не контролируете все реализации

- Реальность: возраст API С добавлением новых фич, существующий API выглядит еще старше

- Множество проблем со старым API Нельзя позволять API застаиваться Полностью заменять (хоть каждые несколько лет!) Накладные расходы по развитию API должны быть на реализаторах, а не на пользователях 15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Методы по умолчанию(default methods) Множественное наследование в Java?

-Нет наследования состояния, которое и является источником большинства проблем Некоторые упрощения и отличия от C# extension methods

- Методы по умолчанию виртуальны Основная цель – развитие API 16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Методы по умолчанию – правила наследования

- Правило 1: класс побеждает

- Правило 2: более специфичный интерфейс предпочтительней

- Правило 3: во всех остальных случаях пользователь должен предоставить реализацию Ищем единственный, наиболее специфичный метод по умолчанию из списка реализуемых интерфейсов

–  –  –

22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Bulk operations на коллекциях Групповые операции: filter, map, into, … “Покрасьте красные блоки в синий” = filter+forEach

–  –  –

25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Bulk operations на коллекциях Новые групповые операции выразительны и компонуемы

– Собрать сложную операцию из простых блоков

– Каждый шаг посвящен одному действию

– Структура клиентского кода менее хрупкая

– Меньше промежуточных структур

– Библиотека инкапсулирует операцию: параллелизм, смешанный порядок, производительность или ленивость 26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Laziness Когда происходит рассчет?

Итераторы ленивы Ленивость может быть эффективна, когда не нужен весь результат 27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Потоки (Streams) Для того чтобы добавить групповые операции, мы создали новую абстракцию, Stream

- Представляет собой поток значений Не является структурой данных – не хранит значения

- Источником данных может быть Collection, массив, генерирующая функция, I/O.. .

- Операции, производящие новые потоки, ленивы StreamFoo fooStream = collection.stream();

StreamFoo filtered = fooStream.filter(f f.isBlue());

StreamBar mapped = filtered.map(f getBar());

–  –  –

31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Потоки и Laziness Потоки это ленивые коллекции – рассчет происходит когда элементы нужны

- Хорошая экономия ресурсов в случаях вроде filter-map-findFirst

- Laziness почти незаметна(никаких LazyList, LazySet, etc) 32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Параллелизм Простые для использования параллельные библиотеки для Java Уменьшить концептуальную и синтаксическую разницу между параллельными и последовательным выражениями тех же рассчетов Сделать параллелизм явным, но ненавязчивым 33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Кратко о Fork/Join Мощный и эффективный, но сложный для программирования Основан на рекурсивном разборе

- Делит задачу на подзадачи, решает в параллели, собирает общий результат

- Продолжает дробить задачу, пока она не станет достаточно мала, чтобы решить последовательно Довольно эффективен для широкого спектра числа ядер Дает приличную балансировку загрузки без централизованной координации 34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Параллельное суммирование с коллекциями Параллельное суммирование с групповыми операциями на коллекциях int sumOfWeight = shapes.parallel().filter(s s.getColor() == BLUE).map(Shape::getWeight).sum();

–  –  –

35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Параллельные потоки Потоки могут обрабатываться как параллельно, так и последовательно

- В зависимости от источника потока Collection.stream() Collection.parallel() Некоторые структуры данных дробятся лучше других

- Массивы дробятся лучше чем списки

- Структура данных вносит стратегию дробления

- Параллельные операции над потоком могут быть запущены на любой дробимой струкуре данных 36 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Дробление Параллельный аналог Iterator это... Spliterator

- Определяет стратегию дробления для структуры данных

–  –  –

37 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Lambda позволяют улучшить API Лямбды позволяют предоставить более мощный API Граница между библиотекой и клиентом более проницаема

- Клиент может предоставить функциональность, которую можно добавить к исполнению

- Клиент решает что делать, библиотека решает как это сделать

- Безопаснее, предоставляет больше возможностей для оптимизации 38 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Пример: сортировка Если необходимо отсортировать список, сегодня вы напишете Comparator

- Компаратор объединяет извлечение поискового ключа и упорядочивание по нему Можно переписать с использованием лямбд без особых трудностей

- В качестве бонуса получает разделение упомянутых аспектов

–  –  –

39 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Пример: сортировка Лямбды позволяют лучше разделять API

- Добавим метод, который принимает “извлекатель ключа” и возвращает Comparator

- Сразу много версий: для object, int, long, etc

–  –  –

40 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Пример: сортировка Лямбды позволяют лучше разделять API

- Добавим метод, который принимает “извлекатель ключа” и возвращает Comparator

- Сразу много версий: для object, int, long, etc

- ComparatorPerson byLastName =Comparators.comparing(p p.LastName());

–  –  –

41 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Пример: сортировка ComparatorPerson byLastName =Comparators.comparing(p p.LastName());

Collections.sort(people, byLastName);

Можно еще улучшить:

Collections.sort(people, comparing(p p.LastName()));

И еще:

people.sort(comparing(p p.LastName())) И еще!

people.sort(comparing(Person::LastName)) 42 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Пример: сортировка А если вдруг надо в обратном порядке?

people.sort(comparing(Person::LastName).reverse());

А если еще и по имени?

people.sort(comparing(Person::LastName) .

.compose(comparing(Person::getFirstName)));

43 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Lambda позволяют улучшить API Метод comparing() один из построенных для лямбд

- Принимает функцию-“экстрактор” и возвращает функцию-”компаратор”

- Выделяет функцию извлечения ключа из сравнения

- Улучшает переиспользуемость Ключевое воздействие на API: больше возможностей для компоновки

Лямбды в языке:

- Позволяют писать библиотеки лучше

- Читаемее, код менее подвержен ошибкам 44 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Lambda позволяют улучшить API Мы предпочитаем развивать Java через развитие библиотек Но иногда, мы достигаем пределов практической выразимости в библиотеках, и нуждаемся в небольших изменениях в языке Небольшие изменения в языке в нужном месте могут дать потрясающий результат!

45 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

Итоги: зачем это нужно?

–  –  –

46 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .

И где же мы ныне? Прогресс EDR spec доступен на http://openjdk.java.net/projects/lambda RI Binary доступны по адресу http://jdk8.java.net/lambda Скачайте и попробуйте сами!

Лямбды войдут в Java SE 8, релиз которого состоится в 2013

–  –  –

MapString, Integer map = documents.aggregateBy(Document::getAuthor, () 0, (sum, d) sum + d.getPageCount());

49 Copyright © 2012, Oracle and/or its affiliates. All rights reserved .






Похожие работы:

«Вестник ТГПУ (TSPU Bulletin). 2018. 2 (191) УДК 37.013.32 DOI: 10.23951/1609-624X-2018-2-162-168 АКТУАЛЬНЫЕ ОПЫТЫ ТЕКСТОВОЙ ДЕЯТЕЛЬНОСТИ В РЕЧЕВОЙ ПРАКТИКЕ СТАРШЕКЛАССНИКОВ С. Д. Дресвянина Вологодский государственный университет, Вологда Ос...»

«Министерство образования и науки Российской Федерации ФГБОУ ВО "Ивановский государственный университет" ЗАРУБЕЖНАЯ ФИЛОЛОГИЯ: ИСТОКИ, РАЗВИТИЕ, ПЕРСПЕКТИВЫ Программа международной научной конференции, посвяще...»

«Капустина Юлия Александровна ОСОБЕННОСТИ КОМПОЗИЦИОННОЙ РАМКИ ЛИРИЧЕСКОГО ЦИКЛА В статье изучаются особенности вступительных и заключительных стихотворений лирических циклов. Представлены основные разновидности вступительных и заключительных частей лирических циклов, обобщаются их отличительные черты и функции. Компози...»

«Общественный центр экспертиз по информационным и документационным спорам при ОФ "діл сз" ЗАКЛЮЧЕНИЕ СПЕЦИАЛИСТА № 392 — Э г. Алматы 13 декабря 2012 г . Специалист кандидат филологических наук, доцент Карымсакова Рахиля Даулетбаевна (специальность: "10.02.06 – Тюркские языки, 10.02.01 – Русски...»

«УДК 316.422.42 М. О. Гузикова Полиязычие в глобальных университетах: теория и практика Сведения об авторе. М. О. Гузикова, завкафедрой лингвистики и профессиональной коммуникации на иностранных языках, Уральский федеральный университет (Екатеринбург, РФ). Аннотация. В статье на материалах эмпи...»

«Фомина Юлия Валерьевна СЕМИОТИКА ТЕЛЕСНОСТИ И ХУДОЖЕСТВЕННАЯ АНТРОПОЛОГИЯ Л.Н. ТОЛСТОГО (1880-1890-е годы) Специальность 10.01.01 – русская литература АВТОРЕФЕРАТ диссертации на соискание ученой степени кандидата филологических наук Воронеж – 2017 Работа выполнена на кафедре русской лит...»

«ЦЕНТР ОБРАЗОВАТЕЛЬНЫХ ТЕХНОЛОГИЙ Николая Ягодкина РАБОЧАЯ ПРОГРАММА КУРСА "Английский язык для школьников" Уровень В1 (Intermediate) РАБОЧАЯ ПРОГРАММА КУРСА "Английский язык для школьников" Уровень В1 (Intermediate) РАБОЧАЯ ПРОГРАММА КУРСА "Английский язык для ш...»

«НАЦЮНАЛЬНА АКАДЕМЫ НАУК УКРА1НИ Ш СТИТУТУКРАШ СЬКО! МОВИ В.П. Ш У Л ЬГА Ч Нариси з праслов’янськсн антропошми Частина II Кшв 2015 УДК 81’373i231 ББК 81.2-3 Ш95 Книгу присвячено реконструкдц праслов’янського антропошмного фонду. На основ! фактичного матер1алу сло...»

«Наука Любви Ховричева Екатерина Номинация "Фантазия 21 минус" Нежась в теплой кроватке, я преспокойно себе спал, досматривая сон уже пятый или шестой, и тут вдруг эту прекрасную идиллию прервал назойливый звук будильника. Издав стон полный мучений и нежелания вы...»







 
2019 www.librus.dobrota.biz - «Бесплатная электронная библиотека - собрание публикаций»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.