Параметрические типы в Scala
В языке программирования Scala существует возможность параметризовать трейт, класс либо его метод некоторым количеством типов. Сделать это можно с помощью следующего синтаксиса:
Параметры типа можно применять внутри тела класса/трейта/метода различными способами. Один из них — написать функцию, которая станет вычислять композицию двух функций:
На примере можно выше можно продемонстрировать очередную особенность системы типов в Scala — возможность выводить параметры-типы шаблонов. Если разработчик введет следующие 2 функции:
он сможет вычислить их композицию, не указывая при этом цепочку типов:
А это уже на деле эквивалентно следующему коду:
Итак, параметрические типы в Scala — довольно эффективное средство доказательства свойств программы. Представьте, что в базе данных сохранены объекты 2 типов: A и B. Вряд ли вы желаете, чтобы кто-либо мог добавлять объект типа А в коллекцию элементов типа B (к примеру, база данных является нереляционной, допустим, это MongoDB). Решение вопроса заключается в написании метода добавления в коллекцию следующим образом:
В примере выше можно добавить элемент в коллекцию соответствующего типа. Если же будет попытка добавить элемент А-типа в коллекцию элементов B-типа, возникнет ошибка компиляции. При этом предупреждение об этом появится, вероятнее всего, со стороны среды разработки ещё в процессе написания кода.
Следующий момент — возможность создания псевдонимов для параметрических типов, если в них заданы все либо несколько параметров. Например, вы сможете ввести список строк:
Или же кортеж, один из параметров которого — это целое:
Конечно, это далеко не все возможности системы типов Scala, однако другие примеры выходят за рамки данной заметки.