Домашнее задание №3 (курс Scala, Naumen)
Задания описаны в файле Exercises.scala в sbt проекте, который находится в папке /homeworks/homework_3 Ниже приводится вспомогательная информация которая поможет вам справится с заданием. Как всегда - необходимо написать тесты к своим решениям (минимум 3 теста к каждой реализованной функции решения).
1. Определение типа в рантайме
Для определения простого, не параметризованного типа в рантайме в Scala есть несколько способов:
- использовать x.isInstanceOf[SomeClass]
- паттерн матчинг (https://docs.scala-lang.org/ru/tour/pattern-matching.html)
- использовать x.getClass
- рефлексия
- и другие
Для приведения типов (type cast) есть 2 способа:
- x.asInstanceof[SomeClass]
- паттерн матчинг
2. Отсутствие правильного значения
В программировании довольно часто может отсутствовать значение вычисления функции. Напирмер в функции деления, значение деления на 0 не определено.
Отсутствие верного значения, возвращаемого из какого либо метода или функции, или невозможность верно вычислить результат можно кодировать и обрабатывать в программе разными способами.
Иногда, для этого используются целочисленные коды ошибки - это распространено в языке Си и системном программировании.
Иногда для этого используется null, а иногда для этого используется выбрасывание исключения (exception). Это распространено в современных ООП языках (Java, C#, python, JavaScript).
В функциональных языках и в Scala в частности - любят кодировать отсуствие значений с помощью специальных контейнерных типов. Самый простой из них - тип список, или другие коллекции похожие на список (seq, set, array, stream, и др.). Если у нас есть корректные значения которые возвращает функция - мы возвращаем список этих значений. Особенно это удобно, когда верных значений может быть несколько - например в задаче нахождения всех делителей числа. Пустой список - означает отсутсвие таких значений.
Также есть тип Option. В нем явно кодируется отсутствие значение с помощью объекта None, а наличие значение в виде контейнера Some(x). Для краткого ознакомления для работы с Option подойдет данная статья - https://www.tutorialspoint.com/scala/scala_options.htm . Для более глубокого - https://danielwestheide.com/blog/the-neophytes-guide-to-scala-part-5-the-option-type/ .
3. Параметры типов и отношение подтипов
Для решения задания №3 достаточно обратиться к материалам лекции.