15 сентября выйдет java 15. Если вы отмечаете это событие интеллектуальной беседой под пиццу, то этот пост для вас. Здесь вы найдёте немного computer science на тему records.
Неизменяемые типы — основа функциональных языков. Записи — простые структуры, но за этой простотой стоит теоретический фундамент.
Система типов — теория, на основе которой проектируется язык программирования. Cегодня разберём классификацию, которая отвечает на вопрос:
❓Как определить тип объекта?
1️⃣ По имени. Тогда это номинальный тип
На основе имени проверяется возможность вызова методов и приведения типов друг к другу
record Point(int x,int y){}
record Time(int hours,int min){}
❌ Point p = new Time(1,1);
Записи по факту одинаковые — два целых числа. Но имена разные, поэтому типы между собой несовместимы. У номинальных типов проверки часто происходят на этапе компиляции.2️⃣ По данным внутри объекта. Тогда это структурный тип.
Для них возможна запись:
✅
Point p = new Time(1,1);
Структурные типы используются в функциональных языках и java script. Они добавляют больше гибкости, но менее управляемы.В java структурных типов нет и скорее всего не будет. В 2013 году обсуждалось, чтобы ввести в язык первый структурный тип под названием arrow type. Выглядел бы он так:
(String) → IntegerИдею отвергли из-за сложностей реализации и адаптации к существующим библиотекам. Альтернативное решение — лямбда-выражения, представляют похожую функциональность, но с чётко определённым типом:
Function<String,Integer> f =Все структуры в java номинальные. Записи - не исключение. Номинальность была в требованиях для реализации, а в анонсе records называют nominal tuples — номинальные кортежи.
str → str.length();