Параметрические типы в Scala

В языке программирования Scala существует возможность параметризовать трейт, класс либо его метод некоторым количеством типов. Сделать это можно с помощью следующего синтаксиса:

Параметры типа можно применять внутри тела класса/трейта/метода различными способами. Один из них — написать функцию, которая станет вычислять композицию двух функций:

На примере можно выше можно продемонстрировать очередную особенность системы типов в Scala — возможность выводить параметры-типы шаблонов. Если разработчик введет следующие 2 функции:

он сможет вычислить их композицию, не указывая при этом цепочку типов:

А это уже на деле эквивалентно следующему коду:

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

В примере выше можно добавить элемент в коллекцию соответствующего типа. Если же будет попытка добавить элемент А-типа в коллекцию элементов B-типа, возникнет ошибка компиляции. При этом предупреждение об этом появится, вероятнее всего, со стороны среды разработки ещё в процессе написания кода.

Следующий момент — возможность создания псевдонимов для параметрических типов, если в них заданы все либо несколько параметров. Например, вы сможете ввести список строк:

Или же кортеж, один из параметров которого — это целое:

Конечно, это далеко не все возможности системы типов Scala, однако другие примеры выходят за рамки данной заметки.

Источник