Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,157
Записей в блоге: 1

Delphi 10.3 получит изменения при объявлении переменных

06.11.2018, 20:04. Показов 8103. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
https://community.embarcadero.... i-language

Delphi 10.3 получит возможность объявления переменных по месту использования (Inline Variable Declarations) с областью видимости внутри содержащего их блока.
Pascal
1
2
3
4
5
begin
  var i, j: Integer;
  i:=1;
  j:=2;
end;
с инициализацией
Pascal
1
2
3
4
begin
  var i: Integer := 1;
  var j: Integer := 2;
end;
управляемые переменные получат очистку по выходу из блока
Pascal
1
2
3
4
5
6
7
8
begin
  begin 
    var Intf: IInterface = GetInterface; // Intf.AddRef 
    var MRec: TManagedRecord = GetMRecValue; // MRec.Create + MRec.Assign 
    UseIntf(Intf); 
    UseMRec(MRec); 
  end; // Intf.Release and MRec.Destroy are implicitly called at end of scope
end;
добавляется вывод типа по значению инициализатора:
Pascal
1
2
3
4
5
6
7
begin
  var i := 1;
  var MyDictionary := TDictionary <string, Integer>.Create; 
  MyDictionary.Add ('one', 1); 
  var APair := MyDictionary.ExtractPair('one'); 
  ShowMessage (APair.Value.ToString);
end;
добавляется возможность объявления в заголовке цикла for
Pascal
1
2
3
4
5
6
7
begin
  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 ...
end;
а также и константы
Pascal
1
2
3
4
begin
  const M: Integer = (L + H) div 2;
  const M = (L + H) div 2;
end;
Пропал калабуховский дом... Но удобно же ;-)

Какие мысли по поводу грядущих перемен?
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.11.2018, 20:04
Ответы с готовыми решениями:

Символы % и & при объявлении переменных
Для чего символы % и &amp; добавляются к именам переменных при объявлении?

Почему при объявлении переменных тип float выдает ошибку
Подскажите, пожалуйста, почему когда я объявляю переменные как float, то выскакивает ошибка, а когда меняю тип на double, то все корректно...

Почему при объявлении переменных в классе просит фигурную скобку в конце?
package main; public class Optimizacia { class x { double x=0, eps=0, fx=0, pfx=0, ppfx=0; x=5; eps=Math.pow(10,...

21
5940 / 4517 / 1093
Регистрация: 29.08.2013
Сообщений: 28,093
Записей в блоге: 3
06.11.2018, 20:43
теперь еще и переменные в коде искать
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,157
Записей в блоге: 1
06.11.2018, 21:42  [ТС]
for var и определение типа по инициализатору выглядят весьма полезными.
В отношении остального: писать станет проще, зато читать станет действительно сложнее...
0
Модератор
 Аватар для D1973
9902 / 6440 / 2454
Регистрация: 21.01.2014
Сообщений: 27,335
Записей в блоге: 3
07.11.2018, 08:41
объявление переменной-счетчика в самом цикле for, как в том же С++ - это действительно удобно!
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,157
Записей в блоге: 1
07.11.2018, 13:57  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
объявление переменной-счетчика в самом цикле for, как в том же С++ - это действительно удобно!
... но не всегда:
Pascal
1
2
3
4
5
  for var i:=0 to Count-1 do begin
    // ...
    if неминуемое_на_интервале_условие then Break;
  end;
  // упс, при выходе по Break счетчика уже не видно, нужно переносить объявление выше for.
Добавлено через 1 минуту
Другое дело, что на Break и так косо смотрели, теперь будет еще один повод избегать ;-)
0
Модератор
 Аватар для D1973
9902 / 6440 / 2454
Регистрация: 21.01.2014
Сообщений: 27,335
Записей в блоге: 3
07.11.2018, 17:09
Цитата Сообщение от bormant Посмотреть сообщение
Другое дело, что на Break и так косо смотрели
Да ну... И зачем это i вне цикла? А если так надо то и
Delphi
1
2
3
4
5
if Неминуемое_на интервале_условие then
 begin
   Num_Iteration := i;
   break;
 end;
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,157
Записей в блоге: 1
07.11.2018, 20:06  [ТС]
D1973,
так я и говорю -- костылики, велосипедики...

Добавлено через 2 минуты
Уж лучше более естественное:
Pascal
1
2
3
4
5
  var i: Integer;
  for i:=0 to Count-1 do begin
    if неминуемое_на_интервале_условие then Break;
  end;
  // i доступно здесь
Добавлено через 7 минут
Но да, безопаснее при малейшем сомнении в неминуемости (то есть всегда, кроме наличия явных барьеров):
Pascal
1
2
3
4
5
6
7
8
  var ii:=-1;
  for var i:=0 to Count-1 do begin
    // ...
    if условие then begin
      ii:=i; Break;
    end;
  end;
  // и что, снова проверять ii ?
Поэтому лучше не костылить и не велосипедить, если такое возможно ;-)
0
 Аватар для Human_foot
156 / 108 / 36
Регистрация: 27.06.2018
Сообщений: 256
07.11.2018, 20:56
Цитата Сообщение от bormant Посмотреть сообщение
Уж лучше более естественное:
...
// i доступно здесь
Не, так не надо. Оно хоть и доступно, но его значение может быть разным. Из-за оптимизации цикл for может быть заменён на while/repeat и т.п. (в ранних компиляторах это вообще чуть ли не правило было ввиду отсутствия аналога for в асме) с инкрементом либо в начале, либо в конце. В итоге оно может отличаться на +-1.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,157
Записей в блоге: 1
07.11.2018, 21:00  [ТС]
Цитата Сообщение от Human_foot Посмотреть сообщение
Не, так не надо. Оно хоть и доступно, но его значение может быть разным.
Вы невнимательны. При завершении по Break значение счетчика i определено и доступно вне цикла. Неминуемость условия означает, что на интервале оно обязательно станет истинным (для некоторых алгоритмов, например, с барьерами -- это естественно).
Поэтому нет, отличаться не может.
0
 Аватар для Human_foot
156 / 108 / 36
Регистрация: 27.06.2018
Сообщений: 256
07.11.2018, 22:32
Цитата Сообщение от bormant Посмотреть сообщение
Вы невнимательны.
Да, это видно из анализа кода, но! смотреть надо не на "человеческий" код, а на код полученный после оптимизации (если она включена), там бряк может оказаться в другом месте (как до инкремента, так и после). Этому вопросу даже целая статья была посвящена несколько лет назад (пруфа, увы, нет). В итоге, после цикла значение счётчика может отличаться от того значения при котором цикл вызвал бряк
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
08.11.2018, 01:47
Фигня какая-то. Чем эти изменения что-то улучшат не понятно.
0
500 / 346 / 200
Регистрация: 20.10.2016
Сообщений: 1,101
08.11.2018, 08:27
Честно говоря Embercadero со своими идеями удивляет, выдумывают какую-то ересь, а реально нужные вещи, которые должны быть доступны из коробки все мимо. Все догоняется личными разработками и сторонними компонентами.
Еще с времен D6 ощущаю, что вот самого элементарного, хотя бы той же обычной стилизации обычного TButton не хватает.
Элементарно задать цвет для каждого положения, цвет/толщину бордюров и т.п. этого нет.
Либо делай наследника и перекрывай отрисовку, либо ставь левые компоненты.
TStringGrid выравнивание текста, цвет ячеек пиши руками в OnDrawCell и т.п. практически любой компонент ограничен и требует доработки.
Неужели нельзя доработать IDE по вот таким, нужным моментам?
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,157
Записей в блоге: 1
08.11.2018, 15:55  [ТС]
Цитата Сообщение от Human_foot Посмотреть сообщение
на код полученный после оптимизации (если она включена), там бряк может оказаться в другом месте (как до инкремента, так и после)
Тогда это ошибка, требующая исправления, только и всего. Поведение при выходе из for ... do по Break документировано, всё, что отличается от -- ошибка.

Цитата Сообщение от TFullControl Посмотреть сообщение
Неужели нельзя доработать IDE по вот таким, нужным моментам?
Насчет нужности "самобытного" look-and-feel в интерфейсе, похоже, вы далеко не в большинстве :-)

Цитата Сообщение от northener Посмотреть сообщение
Чем
Лапшу станет писать намного легче. С тем, что это лучше, тоже не сильно согласен. :-)
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
10.11.2018, 01:44
Цитата Сообщение от TFullControl Посмотреть сообщение
хотя бы той же обычной стилизации обычного TButton не хватает
Ну TButton это обёртка над стандартной кнопкой Windows и она должна и оставаться такой. Для нестандартных кнопок с времён царя Гороха в "каропке" Дельфи есть TBitBtn и TSpeedButton. У кого папаша Борланд купил или украл эти наработки я не знаю.
Но в любом случае желанием заниматься разработкой или улучшением VCL папаша Борланд не горел никогда, не горит сейчас и вряд ли когда-либо загорится. Спасибо хоть иногда уделяет/урывает время на устранение некоторых критических ошибок в VCL.

Цитата Сообщение от bormant Посмотреть сообщение
Лапшу станет писать намного легче.
А ракеты станут падать ещё чаще
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
10.11.2018, 21:12
Цитата Сообщение от bormant Посмотреть сообщение
// упс, при выходе по Break счетчика уже не видно, нужно переносить объявление выше for.
А зачем вам его видеть?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
12.11.2018, 14:17
Цитата Сообщение от bormant Посмотреть сообщение
for var i:=0 to Count-1 do begin
// ...
if неминуемое_на_интервале_условие then Break;
end;
// упс, при выходе по Break счетчика уже не видно, нужно переносить объявление выше for.
Добавлено через 1 минуту
Другое дело, что на Break и так косо смотрели, теперь будет еще один повод избегать ;-)

так после цикла так и так переменная не инициализированна ж никак, в классическом стиле, о чем свидетельствует документация, что толку видеть ее после или не видеть?

но жаль, что их дельфи этими всеми примочками делают откровенное ГОВНО, извините за прямоту )))
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,157
Записей в блоге: 1
12.11.2018, 15:37  [ТС]
Arcor,
после цикла так и так переменная не инициализированна ж никак, в классическом стиле, о чем свидетельствует документация
перечитайте документацию, обратите внимание на то, что сказано про случай завершения по Break.

Добавлено через 1 минуту
См. сообщение #9 в этой теме.
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
12.11.2018, 16:06
Цитата Сообщение от bormant Посмотреть сообщение
перечитайте документацию, обратите внимание на то, что сказано про случай завершения по Break.
перечитал, буду знать)))) но за 10 лет ни разу не пригодилась такая конструкция все равно почему-то, надеюсь и дальше не пригодится
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,157
Записей в блоге: 1
22.11.2018, 19:27  [ТС]
Объявлен релиз 10.3 Rio, Community Edition также доступна.

Добавлено через 16 минут
Что нового: http://docwiki.embarcadero.com... 's_New
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
29.05.2019, 09:49
Дожили.....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.05.2019, 09:49
Помогаю со студенческими работами здесь

запутался в объявлении переменных
пытаюсь отладить одну 1-wire библиотеку, для чего хочу из основной функции отправлять код ошибки. переменная кода объявлена в самом...

Не компиллируется прога - ошибка в объявлении переменных?
Имеется программа на Visual Prolog 5.2, реализующая составление кроссворда из заданных слов. Но при попытке ее скомпиллировать в Visual...

Порядок инициализации переменных в одном объявлении
Есть оператор объявления переменных (надеюсь, правильно назвал) int ..., sr = n / 2 + n % 2 - 1, tl = n / 2 + n % 2, ...; Можно ли его...

Найти вероятности событий: каждый игрок получит туза; один из игроков получит все 13 карт одной масти
52 карты раздаются четырем игрокам (каждому по 13 карт). Найти вероятности следующих событий: A={каждый игрок получит туза}, B={один из...

Как отслеживать изменения переменных?
Для отладки программы хочу отслеживать изменения переменных, в паскале, да и в делфи в консольном приложении это делается легко, а вот как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru