О наиболее ярких обновлениях в Delphi XE3 я вчера кратко рассказал. Но, как часто бывает, помимо того, что находится «на вывеске» (типа новый FireMonkey, Metropolis UI, Visual LiveBindings и т.д.) в новой версии Delphi есть также и менее заметные на первый взгляд, но не менее важные и интересные обновления. Ну, например, вспомним про выход Delphi XE — тогда у всех на слуху была поддержка Subversion, обновленная DataSnap и т.д. и т.п. Однако мало тогда кто обратил внимание, что в Delphi XE появилась поддержка регулярных выражений. Вроде бы и не так значимо как обновление в DataSnap, но, тем не менее, важное и нужное обновление особенно для тех кто пишет парсеры.
Или вспомним про выход Delph XE2. Внушительный перечень обновлений и улучшений. Про FireMonkey, LiveBindings и поддержку Mac’ов узнали все буквально в первый же день после выхода RAD Studio XE2. Но, опять же мало кто заметил про улучшения в модулях для работы с JSON или про новый тип TOSVersion. И это, в принципе, нормально — вначале надо посмотреть, что появилось в новой версии «по-крупному», а уже потом смотреть на частные вещи.
И вот теперь вышла Delphi XE3, которая помимо обновлений в FireMonkey и LiveBindings принесла с собой и довольно интересные обновления в RTL. Вот об одном из этих обновлений и пойдет сегодня речь.
Кроме того, что в RTL появились (были перемещены или написаны с нуля) некоторые методы и типы данных для работы с FireMonkey, например, TVector3D или Vector3D, в Delphi XE3 также появились и новые хэлперы для работы с простыми типами данных. Например, появился хэлпер для работы со строками и теперь можно написать, например, вот такой код, которой скомпилируется и будет работать:
var S : string; begin S:='Hello World'; S.Insert(6, 'Delphi '); ShowMessage(S); end;
Думаю, что тем, кто знаком с такими языками как Java или C# такой код покажется очень знакомым. Всего в хэлпере для string определено штук 25 разных методов для работы со строками. В редакторе кода этот перечень методов выглядит примерно вот так:
Никто нам не запретит написать и свой хэлпер для другого типа, например, такой:
type TIntegerHelper = record helper for Integer function ToString: string; end; //....// function TIntegerHelper.ToString: string; begin Result:=System.SysUtils.IntToStr(Self) end;
И потом вызывать необходимый нам метод:
var I:integer; begin I:=1234; ShowMessage(I.ToString); end;
Аналогичным образом в Delphi XE3 могут использоваться хэлперы и для других типов, например, для массивов (используя при этом хэлпер, который описан выше):
TIntArray = array of integer; type TArrayHelper = record helper for TIntArray public function ToString: string; class function Create(Length: integer):TIntArray;static; end; { TArrayHelper } class function TArrayHelper.Create(Length: integer): TIntArray; var i:integer; begin SetLength(Result, Length); for I := 0 to High(Result) do Result[i]:=random(10); end; function TArrayHelper.ToString: string; var I: Integer; begin Result:=EmptyStr; for I := Low(self) to High(self) do Result:=Result+' '+self[i].ToString;//используем TIntegerHelper end;
Также мы можем определять хэлперы и для перечислителей. Более того — хэлперы будут работать и в случае использования констант, например так:
ShowMessage('Hello World'.ToUpper); ShowMessage(Integer(10).ToString);
Что можно сказать по поводу хэлперов в Delphi XE3? По-моему очень отличное нововведение, позволяющее сэкономить время и подсократить размеры своих исходников. В общем, качайте с сайта Embarcadero пробные версии и попробуйте эту фишку в действии самостоятельно — оно того стоит :).
Книжная полка
Описание Подробно рассматривается библиотека FM, позволяющая создавать полнофункциональное программное обеспечение для операционных систем Windows и OS X, а также для смартфонов и планшетных компьютеров, работающих под управлением Android и iOS
|
||
Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
|
||
Название: О чем не пишут в книгах по Delphi
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
|
||
Описание: Книга рассчитана на подготовленного пользователя ПК, желающего самостоятельно научиться программировать и разрабатывать приложения и базы данных в среде Delphi. Опытные программисты смогут использовать издание как справочник. В тексте подробно описаны более 80 компонентов VCL, функции Object Pascal и Win32 API.
|
||
Описание: Описаны общие подходы к программированию приложений MS Office. Даны программные методы реализации функций MS Excel, MS Word, MS Access и MS Outlook в среде Delphi.
|
Ну похвально, лучше поздно чем никогда.
А об изменениях в компиляторе статья будет?
utmost80, возможно будет.
teran, точно! Ты, как всегда, прав =)
Самое интересное — это то, что разработчики должны быть больше заинтересованы в «мелких» улучшениях, чем в «крупных с вывески», потому что «мелкие» можно применить сразу, а до «крупных» дело может и не дойти, т.к. «проект большой и портировать его нет времени…»
Пожалуй поддержка zip архивов в ХЕ2 была более значительна чем TOSVersion :)
Спасибо за информацию
хелперы есть и в ХЕ2, а новизна их в ХЕ3 выглядит как
«Three new helper types (TSingleHelper,TDoubleHelper, and TExtendedHelper) replace the following record types: TSingleRec, TDoubleRec, TExtendedRec, extensively.»
Вышеописанный код для Integer в X3 не работает.
Нижеописанный работает.
TInteger = record
Value: Integer;
end;
TIntegerHelper = record helper for TInteger
function ToString: string;
end;
…
function TIntegerHelper.ToString: string;
begin
Result:=System.SysUtils.IntToStr(Self.Value)
end;
Опечатка *XE2
2 pet:
Тоже захотелось написать хелпер к Integer в XE2, а никак (( В вашем случае тогда и указывать придётся TInteger, что сводит на нет прелесть реализации в XE3.
осталось дождаться всех используемых доп. компонент и смело переходить на xe3
Почему тогда ошибки обнаруживаются?
[img]http://pbs.twimg.com/media/A2KEX1RCIAEWhQc.jpg[/img]
Human Cat, очень странно, что на string ошибка. То есть у вас SysUtils подключен и все равно программа не запускается?
программа запускается. я про «errors insight». выключил его.
Я уж жду не дождусь когда же будет сборка и под Линух!
Очень приятное нововведение.
Я считаю, что именно такие мелочи и делают работу с языком/IDE более приятной. В языке/IDE может быть поддержка хоть ста-тысяч-миллионов разных платформ и архитектур, но этот продукт будет менее популярным, чем язык/IDE в котором удобство и скорость работы продумано до мелочей.
Алексей Тимохин, согласен, поэтому к отсутствию в XE3 поддержки iOS отношусь более, чем равнодушно =) Хотя, такая поддержка была бы не лишней. А вот то, что сделали поддержку таких вот хэлперов и наконец-то посмотрели в сторону поддержки SQLite — отлично (тем более, что SQLite должен в итоге пригодиться на том же андроиде)
TStringHelper.ToLower и TStringHelper.ToUpper не подерживают кириллицу. Нужно использовать TStringHelper.ToLowerInvariant и TStringHelper.ToUpperInvariant