HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: ооп, scala, параметрические типы</p>
1 <p>Теги: ооп, scala, параметрические типы</p>
2 <p>В языке программирования Scala существует возможность параметризовать трейт, класс либо его метод некоторым количеством типов. Сделать это можно с помощью следующего синтаксиса:</p>
2 <p>В языке программирования Scala существует возможность параметризовать трейт, класс либо его метод некоторым количеством типов. Сделать это можно с помощью следующего синтаксиса:</p>
3 <p>Параметры типа можно применять внутри тела класса/трейта/метода различными способами. Один из них - написать функцию, которая станет вычислять композицию двух функций:</p>
3 <p>Параметры типа можно применять внутри тела класса/трейта/метода различными способами. Один из них - написать функцию, которая станет вычислять композицию двух функций:</p>
4 <p>На примере можно выше можно продемонстрировать очередную особенность системы типов в Scala - возможность выводить параметры-типы шаблонов. Если разработчик введет следующие 2 функции:</p>
4 <p>На примере можно выше можно продемонстрировать очередную особенность системы типов в Scala - возможность выводить параметры-типы шаблонов. Если разработчик введет следующие 2 функции:</p>
5 <p>он сможет вычислить их композицию, не указывая при этом цепочку типов:</p>
5 <p>он сможет вычислить их композицию, не указывая при этом цепочку типов:</p>
6 <p>А это уже на деле эквивалентно следующему коду:</p>
6 <p>А это уже на деле эквивалентно следующему коду:</p>
7 <p>Итак, параметрические типы в Scala - довольно эффективное средство доказательства свойств программы. Представьте, что в базе данных сохранены объекты 2 типов: A и B. Вряд ли вы желаете, чтобы кто-либо мог добавлять объект типа А в коллекцию элементов типа B (к примеру, база данных является нереляционной, допустим, это MongoDB). Решение вопроса заключается в написании метода добавления в коллекцию следующим образом:</p>
7 <p>Итак, параметрические типы в Scala - довольно эффективное средство доказательства свойств программы. Представьте, что в базе данных сохранены объекты 2 типов: A и B. Вряд ли вы желаете, чтобы кто-либо мог добавлять объект типа А в коллекцию элементов типа B (к примеру, база данных является нереляционной, допустим, это MongoDB). Решение вопроса заключается в написании метода добавления в коллекцию следующим образом:</p>
8 - <p>В примере выше можно добавить элемент в коллекцию соответствующего типа. Если же будет попытка добавить элемент А-типа в коллекцию элементов B-типа, возникнет ошибка компиляции. При этом предупреждение об этом появится, вероятнее всего, со стороны среды разработки ещё в процессе написания кода.</p>
8 + <p>В примере выше можно добавить элемент в коллекцию соответствующего типа. Если же будет попытка добавить элемент А-типа в коллекцию элементов B-типа, возникнет ошибка компиляции. При этом предупреждение об этом появится, вероятнее всего, со стороны среды разработки ещё в процессе наисания кода.</p>
9 <p>Следующий момент - возможность создания псевдонимов для параметрических типов, если в них заданы все либо несколько параметров. Например, вы сможете ввести список строк:</p>
9 <p>Следующий момент - возможность создания псевдонимов для параметрических типов, если в них заданы все либо несколько параметров. Например, вы сможете ввести список строк:</p>
10 <p>Или же кортеж, один из параметров которого - это целое:</p>
10 <p>Или же кортеж, один из параметров которого - это целое:</p>
11 <p>Конечно, это далеко не все возможности системы типов Scala, однако другие примеры выходят за рамки данной заметки.</p>
11 <p>Конечно, это далеко не все возможности системы типов Scala, однако другие примеры выходят за рамки данной заметки.</p>
12 <p><em><a>Источник</a></em></p>
12 <p><em><a>Источник</a></em></p>
13  
13