На этом курсе мы познакомимся с интерфейсами IEnumerable + IEnumerator.
На примере решения задачи разложения числа на простые множители
мы будем создавать итератор, который будет перебирать простые числа.
Содержание курса
+ создание класса по интерфейсу IEnumerable
+ создание класса по интерфейсу IEnumerator
+ подробное объяснение, зачем нужно два класса.
+ использование yield для удобной реализации итератора.
+ создание итератора через функцию, не создавая спец. класса.
# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 | Итератор. Разложение числа на простые множители. |
1 тест |
|||
На этом уроке мы создадим очевидный алгоритм, который будет раскладывать число на просты множители. Отчёт отправил: 2773. Никита Выполнено за 15 мин. [Показать отчёт] Научился: Вспомнил алгоритм разложения числа на простые множители Сложности: Как обычно - алгоритм. Математика дается с трудом. Но вроде бы понятно. Комментарии: Будет интересно увидеть применение итератора для этих (разложения числа на множители) целей. |
|||||
2 | Итератор. Создание пустого итератора. |
1 тест |
|||
На этом уроке мы подберём ключ к циклу foreach. создадим класс, который позволит создать свой алгоритм для перебора значений в обычном цикле foreach. Нaпиши, что такое итератор, своими словами. Отчёт отправил: 2773. Никита Выполнено за 15 мин. [Показать отчёт] Научился: Реализовал интерфейсы IEnumerable, IEnumerator. Сложности: Да, в принципе, понятно. Конечно когда мы объединили два класса в один как-то нагляднее и понятнее (лично для меня). Хотя конечно, их лучше разделять. Комментарии: Итератор - это какой-то перечислитель, с помощью которого можно перемещаться по объектам. А вот этим всем управляет IEnumerator, то есть в этом интерфейсе (реализовав его) можно задать логику перемещения. |
|||||
3 | Итератор. Перебор чисел в итераторе. |
|
|||
На этом уроке мы добавим в созданный класс перебор чисел. Начнём с двойки и будем его всё время увеличивать "до бесконечности". В конце урока добавим ограничение, чтобы итератор останавливался. Отчёт отправил: 2773. Никита Выполнено за 15 мин. [Показать отчёт] Научился: Вот так и описывается логика перечислителя, пишем, что нам надо и применяем. Очень удобно! Сложности: Ничего сложного, все понятно было. Комментарии: Все получилось! Отличный урок! |
|||||
4 | Итератор. Перебор простых чисел. |
2 теста |
|||
На этом уроке мы сдеаем так, чтобы наш класс возвращал в цикл только простые числа, как и было задуманно изначально. Отчёт отправил: 2773. Никита Выполнено за 15 мин. [Показать отчёт] Научился: Написал метод для поиска простых чисел. Сложности: Ничего сложного, все понятно. Комментарии: Отличный урок! Я уже забыл как и что называется (давно что-то читал и делал), но получается, что когда ЯВНО используем интерфейс, то есть пишем имя интерфейса, ставим точку и вызываем его метод, нам не нужно указывать модификатор. То есть мы явно реализуем интерфейсный метод из конкретного интерфейса. Это нужно, например, для того, чтобы.. Ну вот допустим, у нас есть класс, который реализует два интерфейса с одинаковыми сигнатурами. То есть и имя у них одинаковое, и параметры одинаковые у них. А нам нужно вызвать метод из первого интерфейса, а не из второго, скажем. Вот тогда мы просто пишем имя интерфейса, ставим точку и вызываем тот метод, который нам нужен. Ну и второе это то, при явной реализации интерфейсного метода, он становится доступным только по ссылке. То есть, чтобы вызывать метод 1 из интерфейса 1, мы создаем интерфейсную ссылку: Primes primes = new Primes(); IEnumerator link1 = (IEnumerator) primes; у теперь у этого obj будем вызывать метод: link1.MoveNext(); А в тексте этот метод прописан явно: bool IEnumerator.MoveNext(); Вот такие есть интересные особенности :) |
|||||
5 | Итератор. Зачем нужно два класса |
1 тест |
|||
На этом уроке мы разберёмся, зачем всё-таки нужно два класса один для создания итератора, второй для его использования. Для демонстрации напишем программу, которая выведет на экран таблицу умножения простых чисел. Отчёт отправил: 2773. Никита Выполнено за 25 мин. [Показать отчёт] Научился: Негоже конечно создавать один общий класс, лучше разделить на два, в чем мы сейчас и убедились) Сложности: Сложновато с выводом таблички было. Но ничего, разобрался. Комментарии: Отличный урок! Классно получилось) |
|||||
6 | Итератор. Волшебное слово yield. |
3 теста |
|||
На этом уроке мы узнаем, как упростить создание итератора. Для этого достаточно просто написать нужный нам цикл, внутри которого воспользоватся волшебным словом yield. Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт] Научился: Узнал о применении ключевого слова yield. Сложности: Ох и накуралесили Вы, Евгений Витольдович, с этим курсом :) Ну ничего, с кем не бывает) Комментарии: Ключевое слово yield нужно, чтобы возвращать следующий элемент из какого-то списка объектов. То есть, используя yield и пробегаясь по всей коллекции, скажем, мы вернем все элементы. |
|||||
7 | Итератор. Список простых чисел. |
1 тест |
|||
На этом уроке мы перепишем алгоритм перебора простых чисел с использованием списка, который будет постепенно, по мере необходимости, пополняться новыми простыми числами. Отчёт отправил: 2773. Никита Выполнено за 10 мин. [Показать отчёт] Научился: Очень классно получилось, мне понравилось) Сложности: Более-менее понятно, когда пошагово выполняем, то яснее конечно. Комментарии: Отличное число нашел Миша) |
|||||
8 | Итератор. Один метод вместо классов. |
|
|||
На этом уроке мы увидим, что класс, оказывается, создавать не обязательно. Магия слова yield сделает всё за тебя, можно просто один раз организовать перебор нужных элементов, и потом его можно использовать через обычный foreach в любом месте программы. Вся прелесть в том, что перебор элементов происходит по мере необходимости. Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт] Научился: Спасибо большое Ивану Воронину за подсказку, в частности за скриншот. Благодаря ему смог найти ошибку у себя. У меня тоже не выдавало в конце что, мол "программа завершена. Нажмите кнопку для продолжения...". Надо было еще одну переменную поменять в коде - указатель глобальную переменную вместо локальной. Сложности: Все отлично! Круто получилось! Комментарии: Отличный получился видеокурс! Теперь я поменьше стал бояться этих интерфейсов IEnumerable и IEnumerator. Немного в них разобрался. И также с ключевым словом yield. |
|||||
9 | ФИНАЛЬНЫЙ УРОК |
без видео |
|||
Поздравляю с окончанием курса! Оставь, пожалуйста, отзыв о курсе. Какой курс ты будешь проходить следующим? Отчёт отправил: 2773. Никита Выполнено за 10 мин. [Показать отчёт] Научился: Высказал свое мнение) Сложности: Ничего сложного. Комментарии: Отличный получился видеокурс! Теперь я поменьше стал бояться этих интерфейсов IEnumerable и IEnumerator. Немного в них разобрался. И также с ключевым словом yield. Понимаю, что надо дальше развиваться и не останавливаться на достигнутом, тогда будет толк. Постараюсь завершить начатые видеокурсы, довести все до логического конца. |
|||||
10 | VIP. Оптимизация поиска простых чисел |
1 тест |
|||
Пишем функцию для поиска простых чисел и поэтапно оптимизируем её в двух направлениях. |
|||||
Итого: 10 видеоуроков |
2 час. 42 мин. 10 тестов |
44 чел. | |||
Финалисты: Иван Воронин, Елена, Артём, Новопашин Владимир, Алексей В., Фомичева Наталья, Rita, Станислав, Neverwinter 2, Permitin Alexey, aleksey-k, Николай Денисов, Денис, Bazel, kalobyte, Yefim, Tekashnik, Алексей Малышев, Sergio, Роман, konstantin, Сергей Стефаненко, chokayes, ser2018, vip, Виктор, Дмитрий, Максим Лапшинов, FireWolf, Слава, Денис, Александр, New programist, no name, Deep Network, Кирилл, Max, Kitsuneco, Дмитрий, Anatoli, MaxB, София, Tom, Tim . |