View on GitHub

Scala

весна 2022

Домашнее задание №3 (курс Scala, Naumen)

Задания описаны в файле Exercises.scala в sbt проекте, который находится в папке /homeworks/homework_3 Ниже приводится вспомогательная информация которая поможет вам справится с заданием. Как всегда - необходимо написать тесты к своим решениям (минимум 3 теста к каждой реализованной функции решения).

1. Определение типа в рантайме

Для определения простого, не параметризованного типа в рантайме в Scala есть несколько способов:

Для приведения типов (type cast) есть 2 способа:

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 достаточно обратиться к материалам лекции.