-
Приехало письмо от борланда про выход новой версии 10.3
Во это считаю самым классным и важным пунктом из всего списка, потому как касается наконец-то сделанного развития языка в нужное русло:
Inline Variable Declaration
procedure Test1;
begin
var I: Integer := 22;
var J: Integer;
J := 22 + I;
var K: Integer := I + J;
ShowMessage (K.ToString);
end;
И тут молодсяги:
procedure Test2;
begin
var I: Integer := 22;
if I > 10 then
begin
var J: Integer := 3;
ShowMessage (J.ToString);
end
else
begin
var K: Integer := 3;
ShowMessage (J.ToString);
end;
end;
procedure Test;
begin
var I := 22;
ShowMessage (I.ToString);
end;
И в циклах:
for var I: Integer := 1 to 10 do ...
for var Item: TItemType in Collection do...
for var I := 1 to 10 do ...
for var Item in Collection do ...
-
-
Не понял только два момента.
1.
procedure Test99;
begin
if (something) then
begin
var Intf: IInterface = GetInterface;
var MRec: TManagedRecord = GetMRecValue;
UseIntf(Intf);
UseMRec(MRec);
end;
end;
Почему тут просто = вместо := ? это какие-то синтаксиса для интерфейсов?
2.
procedure NewTest;
begin
var MyDictionary := TDictionary<string, Integer>.Create;
MyDictionary.Add ('one', 1);
var APair := MyDictionary.ExtractPair('one');
ShowMessage (APair.Value.ToString)
end;
Почему здесь нет MyDictionary.Free ?? это какой-то жутко халтурный пример или есть какой-то нюанс использования Inline Variable?
Я думаю, что это просто недопустимо халтурный пример.
-
> var MyDictionary := TDictionary<string, Integer>.Create;
> Почему здесь нет MyDictionary.Free ??
> или есть какой-то нюанс использования Inline Variable
гугл перевод:
"A managed variable, like an interface reference or a record, will be properly cleaned up at the end of the block, rather than at the end of the procedure or method"
"Управляемая переменная, такая как ссылка на интерфейс или запись, будет правильно очищена в конце блока, а не в конце процедуры или метода"
-
> Почему тут просто = вместо := ? это какие-то синтаксиса
> для интерфейсов?
гугл:
The type of the r-value expression (that is, what comes after the :=) is analyzed to determine the type of the variable.
Тип выражения r-value (то есть, что происходит после: =) анализируется для определения типа переменной.
в случае с интерфейсом, record, константой видимо определять тип переменной не требуется, поэтому просто "="
хз
-
> virex(home) © (23.11.18 08:35) [3]
> "Управляемая переменная, такая как ссылка на интерфейс или
> запись, будет правильно очищена в конце блока, а не в конце
> процедуры или метода"
упс, не туда
относится к интерфейсам и record
но может и MyDictionary тоже будет очищен "в конце блока"
-
Лучше бы AVX в ассемблер добавили. Никто не слышал когда будет?
-
> dmk © (23.11.18 09:46) [6]
>
> лучше бы avx в ассемблер добавили. никто не слышал когда будет?
del me
-
> KSergey © (23.11.18 07:55)
>
> Приехало письмо от борланда про выход новой версии 10.3
>
> Во это считаю самым классным и важным пунктом из всего списка,
> потому как касается наконец-то сделанного развития языка
> в нужное русло:
Этой новости уже как более половины месяца.
И честно говоря я не разделяю восторгов по "наконец-то сделанного развития языка в нужное русло". Допустим (я с этим не согласен, но допустим) писать программы будет проще. Особенно СИ-шникам, случайно залезшим в Дельфи. Но вот отлаживать? И так с отладчиком у папаши Борланда были проблемы с показом значений переменных.
-
> Почему здесь нет MyDictionary.Free ?? это какой-то жутко
> халтурный пример или есть какой-то нюанс использования Inline
> Variable?
> Я думаю, что это просто недопустимо халтурный пример.
он написан в ARC стиле. однако ARC, скорее всего, в следующей версии упразднят, куда ему и дорога.
-
С определением типа переменной не додумали. Упрощать так упрощать. Но вообще согласен, это куда лучше стало.
-
> ухты © (24.11.18 15:34) [10]
> С определением типа переменной не додумали.
додумали.
-
> додумали.
Точно, увидел поздно. (
-
> Германн © (24.11.18 01:45) [8]
> Этой новости уже как более половины месяца.
> И честно говоря я не разделяю восторгов по "наконец-то сделанного
> развития языка в нужное русло". Допустим (я с этим не согласен, но допустим) писать программы будет проще. Особенно СИ-шникам,
Си-шники тут ни при чем совершенно.
Периодически имею в проекте совершенно типичные ошибки с неинициализированными переменными. Причем компилятор далеко не всегда ловит такое (ворнингами), я уже тут жаловался на некоторые такие случаи, которым был очень удивлён. (Например, это вообще не работает для пользовательских типов.)
(Проблемы возникают в результате дописывания кусков функционала в функцию, разумеется, не сразу.)
Определение переменной в середине функции сразу с инициализацией значения - позволит избежать таких ошибок.
Именно поэтому считаю это самой лучшей фичей, какую только сумели изобрести в Борланде.
PS
Да, новость уже была, что "будет такая вот фича", тут вы правы.
Но послушайте, фичу 2-х недельной давности - неужто уже есть повод объявить баяном??? ну учитывая общую скорочть развития языка Дельфи.
-
> Eraser © (24.11.18 04:47) [9]
> он написан в ARC стиле.
Можно поподробнее или ссылку: о чем это? что за стиль?
-
> Определение переменной в середине функции сразу с инициализацией
> значения - позволит избежать таких ошибок.
> Именно поэтому считаю это самой лучшей фичей, какую только
> сумели изобрести в Борланде.
"изобрести"? ви делаете мне смешно...
-
По сути есть что сказать?
и таки да, изобрели, ибо в Pascal такого не было.
-
еще надо бегины с эндами заменить на что то простое )
-
-
> Eraser © (26.11.18 17:03) [18]
Спасибо за ссылки!
Я это место упустил совсем.
Вот только из ссылок я так и не уловил: в 10.3 это самое ARC уже появилось в версии компилятора для Windows по новой опции компилятора, или всё еще доступно только для мобильных платформ?
-
> KSergey © (27.11.18 11:47) [19]
> в 10.3 это самое ARC уже появилось в версии компилятора
> для Windows по новой опции компилятора, или всё еще доступно
> только для мобильных платформ?
не появился и не появится. более того, будет исключен в будущем даже из FMX, см. вторую ссылку.
-
> KSergey © (26.11.18 13:59) [16]
>
> По сути есть что сказать?
> и таки да, изобрели, ибо в Pascal такого не было.
Вообше-то "изобрести" - это создать что-то новое. А содрать из других языков под определение "изобрести" никак не попадает.