Главная » Просмотр файлов » Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)

Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865), страница 147

Файл №1160865 Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)) 147 страницаНэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865) страница 1472019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 147)

Ниже показаны изменения, которые понадобится внести в реализацию Му11з[п ривттс стззз Муь(эг<т> [ тдтзс<т> ( риь11с згагтс 111зг<т> сгеагеьтзг( 1епитегаьте<т> тгеаз ) ( 1епииегасог<т> тгег = 1гееэ.йесепиаегагог()) гесогп Сгеасеьтэс( 1сег ); ) риьттс эгагтс 111эг<т> сгеагеьтэг( 1Бпитегагог<т> тсег ) ( Еипс<111зс<Т» Са116епегзсог = пи11[ Са116еиегасог () > ( 1Т( [1саг.мотенакСН ) ( газики иа» МТ11ае<Т>( г[етаи1С(Т), ии11 ); ) гасили иае Муьтаг<Т>( 1гег.сиггапг, Га116еиагасог )) ) гесигп Га116епегагог()[ риь11с муьтзг( т пеаг[, еипс<1ь1ас<т» са116аиагасог ) ( ГПтэ.пеап = ЬеаГН СЬЕэ.са116аиегагог Са116еиегагог[ риЬ11с Т Незб ( дес ( гесигп Ьеай[ риЬ11с 111эс<т> тах1 ( бас ( 1Т( Га116еиегагог = и»11 ) ( гогого пи11) ) е1эе 1Е( Са11 = и»11 ) Са11 = Са116епагасог()) ) Впервые эта теорема была сформулирована Эндрю Кеннгом в его блестящей книге, написанной в соавторстве с Варбари Му (ВагЬагу Моо), йит[ппнопз оп С++ (Абб[эоп-У)[ез)еу ргогезэ[опа), [996 г).

С()(бн язык интегрированных запросов 551 гегпгп Са11т ) ) ргстгаке Т Ьеао( ргсчасе Рспп<11)зс<т» са115епегасог; ргсгасе 111зс<т> са11 = пп11; Наиболее интересные части кода выделены полужирным. Обратите внимание,что конструктор по-прежнему принимает элемент, присвоенный Ьеас(, но вместо получения хвоста 11.1зс в качестве второго аргумента он принимает делегат, которому известно, как вычислить са11. Вот это и есть уровень посредничества! К тому же, метод доступа деС свойства та11 затем использует этот делегат по мере необходимости для вычисления Са11, когда поступит соответствующий запрос. И, наконец, статический метод сгеасеьсзс, строящий 1есзс из 1еппгяегасог, должен запускать делегат, который просто извлекает следующий элемент 1еппаегасог.

Поэтому, даже если муьсзс инициализируется с помощью 1ЕппаегаЬ1е, то тнп 1ЕппаегаЬ1е полностью не потребляется во время создания, как это было в примере из главы 14. Это — определенный плюс, потому что переданный 1ЕппаегаЬ1е может ссылаться на бесконечный поток объектов. Давайте перейдем к модификациям, необходимым для стандартных операций запросов, чтобы они могли работать на новой реализации мусс з с; рпвссс зкаС1с с1азз Иуссзкххкепзсспз ( рпЬ11с зкаксс 1ЕппаегаЬ1е<т> Сепегастгегагог<т>( Снсз 111зС<т> Снесхзк, Гппс<111зс<т>,ьоо1> гспа1ясасе, Еппс<тсхзк<т>, 111зС<т» спсгеаепгег ] мв11е( (Сспа1ЯСаге(СЬесхзС] ) ( усе1С гекпгп Спеьсзк.ивася Снессзк спсгеаепгег( Спессзг ); ) рпьтсс зсассс 111зс<т> хьеге<т>( сьсз 11сзс<т> сьеьсзс, Еппс<т, Ьоо1> ргеоссаге ) ( РОПС<111ЗС<Т» МЬВГЕТаз1РППС в ПП11( мЬегвТа11Репс () в> ( 1Ь1аг<Т> ГВЗП1С в Пи11( 1Т( СЬвьсез.та11 пп11 ) ( гееп1с.

пем му11ес<т>( с(етап1с(т], пп11 )т ТТ( ргебзсагв(СЬеъаег.квас)] ) гезп1С пвм МТЬ1аг<Т>( СЬвъсег.квас(, мЬвгеТа11Рппс ]т ) сЬеь Таз СЬепаас. Та11 т 1Т( гезп1С па11 ) ( гвеп1С = мЬвгета11Рппс(]т ) гегпгп гвзп1С; гваегп мЬегвТа11Реас(]т 552 Глаза)б риы с ягагтс 1)ьяг<В> зегесг<т,к>( гвья гптяг<т> глеьтяг, Гипс<Т,В> яе1ессог ) ( Рипе<1ьаве<В» ве1есеогта11Рипс = пи11; ва1вссогТаг1Рипс = () => ( 111ве<В> геви1с = пи11) 1Т( Гпвьавт.та11 = пи11 ) ( гези1е пеа муь1ве<В>( бетаи1е(В), пи11 ); ) в1ве ( гези1е = паа Купаве<В> ( вв1есеог (еьеьаве. нее<(), ва1аесогта11Рипс ); Евепвве = Гпеь1вс.та11; гвсигп гвви1Е) )) гвтсгп ве1весогта11Рипе(); Теперь реализации хпеге и яе1есг строят делегат, которому известно, как вычислять следующий элемент в результирующем наборе, и передают этот делегат новому экземпляру Му11яс, который они возвращают.

Если этот код кажется чересчур сложным, проследите его выполнение в отладчике. Таким образом, достигнуто "ленивое" вычисление. Обратите внимание, что каждое лямбда-выражение в каждом методе формирует замыкание, использующее переданную информацию для построения рекурсивного кода, генерирующего следующий алемент списка.

Давайте протестируем "ленивое" вычисление, введя бесконечный связный список значений. Прежде чем можно будет проверить "ленивое" вычисление на бесконечном списке, необходимо либо выполнить итерацию по результатам с помощью цикла Тот (поскольку цикл Тогеасп попытается продолжить итерацию после несуществующего конца), либо вместо цикла Тот реализовать стандартную операцию запроса Та1е, которая возвращает заданное количество элементов из списка. Ниже показана одна из возможных реализаций тахе, использующая новую "ленивую" реализацию му11яг.

рис11с ясастс с1аяя Мутьзскхсепягспя ( рис11с ягаг1с тьтяг<т> тахе<т>( гнтя гьтяг<т> гпеьгяг, гпг осипе Гипс<111яг<т» гахета11Гипс = пс11; ГахеТа11Гипс = () => ( 1втяг<т> геяи1г = пи11; ТГ( Гсе11яГ.Та11 == пи11 )) соиле-- == 0 ) ( геяи1Г = пеэ Муьтяс<Т>( Сегаи1Г(Т), пи11 ); ) е1яе ( геяи1Г = пеэ Му11яс<Т>( Гьеьтзс.Неао, ГагеТа11Гипс ); ) ГПеьтяс = Гсе11яс.таг1; гесигп геяс1Г; ): гесигп ГахеТа11Гипс(); Эта реализация та)се очень похожа на Яе1еос, за исключением того, что замыкание, которое формируется лямбда-выражением, присвоенным гагета11Гипс, также захватывает параметр соиле.

1(М0: язык интегрированных запросов 553 На заметку! Применение Тахе соответствует более функциональному подходу программирова- ния, чем использование цикла гог для подсчета первых нескольких элементов коллекции. Вооружившись методом Тахе, можно проверить работу ленивого" вычисления с помощью следующего кода: риЬ11с с1авв Яаазхапр1е ( всасзс 1ывс<т> сгеасехптзпзсеывс<т>( т 1сея ) ( Рипс<1ывс<т» са116епегасаг = пи11; Са116епегаеог = () => ( гееигп пеи Муыве<Т>( 1еея, Са116епегаеаг ) гееигп Са116епегаеог(); ) всасгс чо1а магп() чаг 1пс1псге11вг = Сгеаге1пггпггеЬгяг<гпг> ( 21 чаг 11п)гыве = 1пз1пзееывС.В)таге( х => х > 3 ) .Яе1еее( х => х * 2 ) .Та)се( 10 ); чаг гСегагог = 11пКЫвг.аепега11Сегагаг( 11яг => 1гяС.Таг1 == пи11, 11яг => 11вс.твЫ ); Гагеасп( чаг гсеп гп ггегагаг ) ( Сапяа1е.нггге( "(О), ", ггеп ); Сапяа1е.игсгеьспе О: ) Метод Магп использует метод Сгеаге1псгп1СеЫяС для создания бесконечного потока 11гяс, возвращающего константу 21.

Вслед за созданием гпсгпгсеьгяс идет цепочка вызовов пользовательских стандартных операций запроса. Обратите внимание, что финальный метод в цепочке — Тахе, в котором запрашиваются только первые 10 элементов результирующего набора. Без атого вызова следующий цикл сагеасп работал бы бесконечно. Поскольку метод Магп в действительности доходит до своего завершения, это доказывает.

что "ленивое" вычисление, закодированное в новом муссяс, и новые реализации Ы)тесе, Бе1есг и Тахе работают ожидаемым образом. Если бы с ними было что-то не так, выполнение бы зависло в бесконечном цикле. Замена операторов йогеасЬ Как и большинство новых средств, добавленных в С№ 3.0, ЫМС) придает языку вкус функционального программирования, который, будучи правильно примененным, может оставить ела)шее послевкусие. Поскольку функциональное программирование с годами заслужило репутацию менее эффективного в отношении потребления памяти и ресурсов процессора, возможно, что неправильное применение ЫМС) действительно приведет к снижению эффективности. Как почти со всеми средствами, используемыми при разработке программного обеспечения, ключом к успеху является умеренность.

Применяя средства взвешенно, с умом, вы будете поражены тем, сколько проблем можно решить другим, часта более ясным способом, с использованием ЫХС) и функционального программирования, по сравнению с тем, чего можно добиться привычными средствами императивного программирования, характерными для С-образных языков, таких как С№, Счч. н дача. 554 Глава (б Во многих примерах настоящей книги список элементов отправляется на консоль, чтобы проиллюстрировать результат работы примера.

Обычно для итерации по результатам, когда таким результатом является коллекция, использовался вызов метода Сопзо1е.кг1се11пе внутри оператора Яогеасп. Давайте посмотрим, как это сделать иначе с помощью средств СПИ: озала Яуэгекн изгпд Бузсеи.11пдг иэгпд яузгегл.со11есг1опз.оепег1сг Рсб11с эсасгс с1азз Ехсепзаопэ ( рсвагс зсакас эсг1пд Бого( сказ зсг1пд зсг, ТЕпппегаЬ1е<зсг1пд> 11зс ) ( гессгп зггапд.юо1п( згг, 11зг.толггау О )! ) ) риЬ11с с1азз Тезс ( зсасзс но1г( Ма1п() ( таг псвЬегз = пен Тпг() ( 5, 8, 3, 4 )г Сопзе1е.нгзвеЬ1пе ( звг1пд.

Характеристики

Тип файла
DJVU-файл
Размер
8,22 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Нэш Трей - C# 2010
Accelerated_C_2010-4565
3_syntax_overview
3_generics_1.cs
as_1.cs
boxing.cs
conversions_1.cs
implicit_type_1.cs
is_1.cs
references_1.cs
references_2.cs
references_3.cs
values_1.cs
4_classes_structs
4_abstract_classes_1.cs
4_beforefieldinit_1.cs
4_box_1.cs
4_box_2.cs
4_box_3.cs
4_box_4.cs
4_box_5.cs
4_class_definition_1.cs
4_compareto_1.cs
4_containment_example_1.cs
4_containment_example_2.cs
4_containment_example_3.cs
4_ctor_struct_1.cs
4_ctor_struct_2.cs
4_ctor_struct_3.cs
4_destructor_1.cs
4_destructor_2.cs
Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7029
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее