Попробуйте это: DGrok - грамматика Дельфи
Вам нужно понять причину, чтобы избежать "программирования культа карго". Пометка строк как const влияет на производительность, потому что вам больше не нужно использовать взаимосвязанное увеличение и уменьшение числа ссылок в строке, операция, которая фактически становится дороже, а не меньше, с течением времени на , потому что большее количество ядер означает больше работы, которая должна выполняться для обеспечения синхронизации атомарных операций. Это безопасно, так как компилятор применяет ограничение «эта переменная не будет изменена».
Для порядковых чисел, которые обычно составляют 4 байта или меньше, прирост производительности не наблюдается. Использование const в качестве оптимизации работает только тогда, когда вы используете типы значений, размер которых превышает 4 байта, например массивы или записи, или типы с подсчетом ссылок, такие как строки и интерфейсы.
Однако есть еще один вариант. важное преимущество: читаемость кода. Если вы передадите что-то как const , и это не имеет никакого значения для компилятора, это все равно может иметь значение для вас , так как вы можете прочитать код и увидеть, что его намерение не было изменено. Это может иметь большое значение, если вы не видели код раньше (его написал кто-то другой) или если вы возвращаетесь к нему спустя долгое время и не помните, о чем вы думали, когда изначально писали его.
It depends on how complex is your routine and how it is used. If it is used many places and required that the value stay the same, declare it as "const" to make it cleared and safe. For string type, there was a bug (for Delphi 7 as I stump on it) that causes memory corruption if declare as "const". Below is sample codes
type
TFoo = class
private
FStr: string;
public
procedure DoFoo(const AStr: string);
begin
FStr := AStr; //the trouble code 1
......
end;
procedure DoFoo2;
begin
.....
DoFoo(FStr); //the trouble code 2
end;
end;
Declaring ordinal types const makes no difference because they are copied anyway (call-by-value), so any changes to the variable do not affect the original variable.
procedure Foo (Val : Integer)
begin
Val := 2;
end;
...
SomeVar := 3;
Foo (SomeVar);
Assert (SomeVar = 3);
IMHO declaring ordinal types const makes no sense and as you say requires you to introduce local variables often.
Вы не можете случайно обработать их как параметры var
и скомпилировать свой код. Так что это проясняет ваши намерения.