Изменения в языке 3.10.3 (12.03.25)
Синтаксис [] по умолчанию для массивов
Теперь по умолчанию константа [1,2,3] имеет тип массива. Именно так сейчас сделано в современном Delphi.
var a := [1,2,3]; // array of integer
var s: set of integer := [1,2,3]; // set of integer
var s: set of byte := [1,2,3]; // set of byte
Поскольку синтаксис [1,2,3]
по умолчанию отведен для массивов, то теперь для создания встроенных множеств используется SetOf(1,2,3)
Также метод ToSet() для последовательности sequence of t
возвращает set of T
.
Кроме этого, если в операциях s1 * s2, s1 + s2 хотя бы один операнд это множество, то результатом также будет множество, а для s1 = s2, s1 > s2 и т.д. если хотя бы один операнд это множество, то результат - логическое значение.
Очень важно понимать, что в сравнении [1,2,3] = [1,2,3] сравниваются ссылки на разные массивы и ответ будет False, а в сравнении var s: set of integer := [1,2,3]; s = [1,3,2] производится сравнение множеств и ответ будет True.
Инициализатор пустой коллекции []
Инициализатор [] пустой коллекции позволяет присваивать его любой коллекции, заменяя вызов конструктора по умолчанию.
Особенно удобно использовать [] для передачи в качестве параметра - тип формального параметра уже указан при описании, а при вызове в параметрах мы всего лишь указываем [].
procedure ppp(s: sequence of integer; a: array of integer; lst: List<(real,real)>;
d: Dictionary<string,integer>; hs: HashSet<integer>; ss: SortedSet<integer>);
begin end;
begin
var old: set of integer := [];
var s: sequence of integer := [];
var a: array of integer := [];
var lst: List<(real,real)> := [];
var d: Dictionary<string,integer> := [];
var st: Stack<string> := [];
var q: Queue<string> := [];
var hs: HashSet<integer> := [];
var ss: SortedSet<integer> := [];
ppp([],[],[],[],[],[]);
var aa: array of array of integer := [[1],[],[2,3]];
end.
Новый тип faststring - синоним StringBuilder
Пусть s и s1 принадлежат к типу faststring
.
Тип faststring
расширен методами
s.IndexOf(s1)
- индекс подстроки в строке или -1 если не найденаs.ToSequence()
- преобразование в последовательность символов. Сама faststring по историческим причинам последовательностью не являетсяs.Replace(s1, s2: string; n: integer)
- возвращает новуюfaststring
где n первых вхожденийs1
заменены наs2
. Операции:s1 in s
- входит ли подстрока s1 в ss1 + s
- конкатенация быстрых строкs * n
- конкатенация строки s с собой n раз
begin
var mx := 0;
for var n := 4 to 9999 do
begin
var s: faststring := '4' + '1' * n;
while ('411' in s) or ('1111' in s) do
s.Replace('411', '14', 1).Replace('1111', '1', 1);
mx := max(mx, s.ToString.Sum(d -> d.todigit));
end;
Print(mx, Milliseconds / 1000);
end.
Автоклассы могут наследоваться от классов без полей
type
Base = class
end;
Person = auto class(Base)
name: string;
age: integer;
end;
begin
var p := new Person('Иванов',18)
end.
Кортежи неявно могут преобразовываться покомпонентно
begin
var t: (real,real);
t := (1,2);
var t1: ((real,integer),real);
t1 := ((3,4),5);
end.
Изменения в модулях
Новый Модуль Coords
Модуль Coords
позволяет отображать координатную сетку, масштабировать её колёсиком мыши и перемещать её центр левой мышью.
Он содержит ряд простых примитивов, таких как DrawPoint
, DrawPoints
, DrawLine
, DrawRectangle
, DrawText
, DrawTextUnscaled
.
uses Coords;
function RandomPoint: Point
:= Pnt(Random(-13,13),Random(-10,10));
begin
DrawPoints(ArrGen(10,i -> RandomPoint),PointRadius := 4);
DrawPoints(ArrGen(10,i -> RandomPoint),PointRadius := 6);
DrawPoint(2,3,Colors.Red);
DrawCircle(1,1,1,Colors.LightBlue);
DrawRectangle(3,2,2,1);
DrawText(3,2,'Hello');
DrawTextUnscaled(0,0,'Текст не масштабируется', Size := 20, Color := Colors.Red);
DrawText(-4,7,'Текст масштабируется', FontName := 'Courier New', Size := 34);
end.
Новые стандартные методы последовательностей
Реализованы новые стандартные методы расширения последовательностей IndexMinBy
, IndexMaxBy
, DistinctBy
.
Новые методы множеств
Для новой реализации встроенных множеств реализованы методы Add
, AddRange
, Remove
и Contains
.
Оптимизация производительности
Ускорение встроенных множеств
Встроенные множества set of T
ускорены примерно в 10 раз. Изменена их внутренняя реализация
Разное
Возможность трассировать программы с модулем PT4
Программы для модуля PT4 теперь можно трассировать
Сборка с помощью dotnet
Проект теперь собирается при помощи современной утилиты dotnet