суббота, 20 октября 2012 г.

Кортежи и списки в PHP


В будущем развитии языка, наличие типов список и кортеж значительно повысило бы его эффективность. Сейчас роль списка играет индексированный массив, где в качестве индекса используются числа. Есть семейство функций array_ и ряд других, прозрачно работающее с массивами с числовой индексацией. Можно закрыть глаза на наличие числовых индексов и тогда массив превращается в список. Это создает избыточность и двусмысленность. Особенно это проявляется в операциях по слиянию массивов. Тут выбор невелик: array_merge. В случае пары массивов и более с уникальными ассоциативными ключами, возможна арифметическая операция сложения массивов. Это очень неудобно. Для того, чтобы целенаправленно сложить два массива [1, 2, 3] + [1, 2, 4, 3] == [1, 2, 3, 1, 2, 4, 3] нужно выполнить ряд нетривиальных манипуляций. Введение типа «список» решило бы эти проблемы. Тоже самое относится к кортежам. Данные типы можно было-бы обозначать так: prefix[1, 2, 3] где prefix=!@$... или так: {1, 2, 3} {{1, 2, 3}} :1, 2, 3: или так: [@ 1, 2, 3] или как в лиспе: (`1 2 3). Еще варианты: [=12,3,4], :[1, 2, 3], @$[1, 2, 3], [1, 2, 3]\\list \\list[1, 2, 3]
Ну в общем это тема для отдельной дискуссии.

В настоящий момент частичное решение этой проблемы возможно лишь через SplFixedArray. Данное нововведение, позволило бы упростить ряд операций и реализовать планируемые генераторы более гибкими. А также создать фундамент для реализации в PHP паттерн-матчинга.

Комментариев нет:

Отправить комментарий