Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какими новшествами языка вы уже пользуетесь... их довольно много... 
:(
    Опции темы
 
Какими новышествами языка delphi 2009 вы пользуетесь
Шаблоны (Generics) [ 4 ]  [36.36%]
Exit(<Результат функции>) [ 7 ]  [63.64%]
Анонимные методы [ 0 ]  [0.00%]
Всего проголосовавших: 11
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
lukas
Дата 9.1.2009, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Стало интересно какими новыми возможностями языка люди начали активно пользоваться.

Мне например очень понравилась конструкция Exit(<Результат функции>), т.к. меня часто раздражало что то типа этого:


схематично...

Код

for i := 0 to 200 do
  if a = b then
    begin
         Result := bla bla bla
         exit;
    end;


а теперь намного легче..

Код

for i := 0 to 200 do
  if a = b then
         exit(bla bla bla)


Для меня это аналог return'a из Си.


UPD

Модераторы, пожалуйста, добавьте в опрос опцию выбора нескольких вариантов ответа.

Это сообщение отредактировал(а) lukas - 9.1.2009, 10:57


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
kemiisto
  Дата 9.1.2009, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 16
Всего: 160



Generics. Кстати, мне кажется более удачным переводом этого термина "параметризованные типы данных". Лучше отражает суть.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Bose
Дата 9.1.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Я пока только exit использую. Я даже старые возможности использую не на полную. Например, только недавно стал пользоваться явными указателями на Boolean, integer. опять-таки только недавно стал шире использовать процедурные типы. smile А классовые функции вообще никогда не использовал. Классовые типы(type T1Class = class of T1) тоже только недавно стал применять. До сих пор избегаю конструкции for..in, ибо ещё непривычно. 

На анонимные методы пока только облизываюсь издалека, ещё не придумал где их полезнее заюзать. С Generics аналогично. 

К слову сказать, я думаю, что старые возможности на полную мощность использут вообще единицы программистов. ;-) Как думаете?



PM MAIL WWW Skype   Вверх
CodeMonkey
Дата 9.1.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Во-первых, список не полон, во-вторых низзя выбрать несколько значений ;)
Лично я уже использую генерики, exit, новые исключения, ну и unicode, разумеется. Ну и может ещё какие более мелкие хрюшки, о которых вот так сходу и не упомнишь.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Bose
Дата 9.1.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



CodeMonkey, а разве новые исключения исключения нужно как-то специально использовать? [*]

[*] Кроме нового типа исключения EProgrammerNotFound, объявленного в SysUtils; 


Кстати вот какие новшевства упоминает Марко Канту:
    * InnerException (that is you raise an exception while handling one... and both exception objects are kept around)
    * TTextReader interface for streams (and strings), this is so nice you won't care about StringBuilder
    * You can change the internal classes used by any DataSet by changing a global variable holding a class (FieldDefs, IndexDefs, Params... and many more)
    * TObject.ToString and the other new methods of the TObject class
    * commented deprecated (that is, deprecated with a string indicating an extra compiler hint, too bad it is not used much by the VCL)

PM MAIL WWW Skype   Вверх
bems
Дата 9.1.2009, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(kemiisto @  9.1.2009,  12:03 Найти цитируемый пост)
"параметризованные типы данных"

это слишком мелко. Я за "абстракции параметрического полиморфизма"
Цитата(CodeMonkey @  9.1.2009,  17:41 Найти цитируемый пост)
новые исключения

это шо за звери?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
THandle
Дата 9.1.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Ничего из перечисленного не использую.

Exit конечно удобно, но, ИМХО, лучше оставить обратную совместимость в этом деле smile

Не настолько уж сложно написать

Код

Result := хто_то;
Exit;


Unicode использую smile


С генериками разобрался, но где использовать пока не вижу... smile

А вообще:
Цитата(CodeMonkey @  9.1.2009,  17:41 Найти цитируемый пост)
Во-первых, список не полон, во-вторых низзя выбрать несколько значений ;)


smile

Всем привет кстати. Что то давно в общих не писал...
PM   Вверх
CodeMonkey
Дата 10.1.2009, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Не, ну как же. Впервые в истории Delphi изменился класс Exception - и не использовать это? 
Да, в первую очередь я имею ввиду именно InnerException. В предыдущих Delphi мне приходилось его эмулировать вручную в своих классах.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Akella
Дата 10.1.2009, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



а TStringBuilder забыли  smile

Добавлено через 2 минуты и 2 секунды
Цитата(Bose @  9.1.2009,  17:58 Найти цитируемый пост)
Кстати вот какие новшевства упоминает Марко Канту:
    * InnerException (that is you raise an exception while handling one... and both exception objects are kept around)
    * TTextReader interface for streams (and strings), this is so nice you won't care about StringBuilder
    * You can change the internal classes used by any DataSet by changing a global variable holding a class (FieldDefs, IndexDefs, Params... and many more)
    * TObject.ToString and the other new methods of the TObject class
    * commented deprecated (that is, deprecated with a string indicating an extra compiler hint, too bad it is not used much by the VCL)

а можно на русском?

Добавлено через 3 минуты и 24 секунды
Не голосовал пока что, может через годик проголосую, я в D2009 пока только балуюсь.
PM MAIL   Вверх
Bose
Дата 11.1.2009, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(Akella @  10.1.2009,  21:39 Найти цитируемый пост)
а можно на русском?

Я затрудняюсь перевести, потому что сам толком не понимаю. smile
PM MAIL WWW Skype   Вверх
CodeMonkey
Дата 11.1.2009, 03:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



    * InnerException (т.е. вы можете возбудить исключение при обработке другого... и оба объекта исключения будут сохранены для последующей обработки)
    * Интерфейс TTextReader для потоков (и строк)
    * Вы можете менять внутренние классы, используемые любым DataSet, меняя глобальные переменные (FieldDefs, IndexDefs, Params... и другие)
    * TObject.ToString и другие новые методы класса TObject
    * deprecated с комментами (т.е. ключевое слово deprecated с дополнительной строкой-хинтом, очень жаль что эта возможность пока не слишком используется в самой VCL)

P.S. Но это изменения только RTL и то далеко не все.


Это сообщение отредактировал(а) CodeMonkey - 11.1.2009, 04:01


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Bose
Дата 11.1.2009, 04:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Ещё некоторые новшевства(из Delphi 2009 Help)

Новая директива компилятора: $POINTERMATH [ON|OFF]. включает выполнение математических операций над указателями.
(надеюсь, что даже сталкиваться с таким кодом не придётся)

VCL и RTL

Новые компоненты 
Ribbon Controls, TButtonedEdit и TCategoryPanel, TCategoryPanelGroup, TLinkLabel, TTListGroup, TListGroups, TCustomHint, TBalloonHint


Новые классы:
TCharacter, TEncoding, TStringBuilder, TStringReader, TStringWriter , TStreamReader, TStreamWriter.

Добавлено через 6 минут и 21 секунду
Ещё 2 заметки с комментариями о новинках в блоге romkin:
Delphi 2009. Что нового
Delphi 2009. Что нового 2
PM MAIL WWW Skype   Вверх
Akella
Дата 11.1.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Ну вот, уже лучше, а то три новшества написал и голосуйте smile 
PM MAIL   Вверх
kemiisto
Дата 11.1.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 16
Всего: 160



Кстати, сам Марко Кэнту прголосовал бы за Generics, ибо именно их он считает наиболее важным расширением языка Object Pascal с момента появления интерфейсов в Delphi 3. smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
lukas
Дата 12.1.2009, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



я вот тоже пока не знаю где использовать Шаблоны, а ведь есть какие то уже встроенные шаблоны, кто знает какие есть и как ими пользоваться могут рассказать.


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
CodeMonkey
Дата 12.1.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



А что, TList и TObjectList никто не пользуется в своих программах, что-ли?

Вот вместо них и можно использовать TList<конкретный-класс>, TObjectList<конкретный-класс>.

Это не единственный, но первый и самый близкий пример - ибо с этими классами наверняка работали все.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Alexeis
Дата 12.1.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(kemiisto @  11.1.2009,  12:46 Найти цитируемый пост)
Кстати, сам Марко Кэнту прголосовал бы за Generics, ибо именно их он считает наиболее важным расширением языка Object Pascal с момента появления интерфейсов в Delphi 3.

  Я чуток покопался в хелпе 2009й. Все таки то что есть в Delphi for Win32 нельзя назвать Женериками, это на самом деле шаблоны. Делфийские шаблоны инстанцируются во время компиляции и для каждый инстанциированного шаблон является новым классом со своим RTTI и своим метаклассом. В Win32 нет динамического инстанцирования. Нельзя сделать шаблон по переменной метакласса. Проще говоря это то что есть в С++, только в упрощенном виде, со всеми вытекающими последствиями (ограничениями).


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lukas
Дата 13.1.2009, 13:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



а вот кто нашел реальное применение анонимным методам??? это же по сути тот же процедурный тип.


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Bose
Дата 13.1.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(lukas @  13.1.2009,  12:40 Найти цитируемый пост)
а вот кто нашел реальное применение анонимным методам??? это же по сути тот же процедурный тип.

+1 вот! меня смущает эта схожесть. Я пока не вижу что такого особенного в анонимных методах, чего нельзя было сделать с помощью процедурных типов.
PM MAIL WWW Skype   Вверх
bems
Дата 13.1.2009, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



lukas, 
Bose, вам нравится в каждом колбэке передавать явный указатель на контекст?



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Bose
Дата 13.1.2009, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(bems @  13.1.2009,  16:29 Найти цитируемый пост)
Bose, вам нравится в каждом колбэке передавать явный указатель на контекст?

Это случается не так часто, но пока что меня это не напрягало. К тому же это приводит к необходимости чётко определять входные параметры callback-процедур, что в свою очередь делает код более структурированным и уменьшает число возможных ошибок.
PM MAIL WWW Skype   Вверх
lukas
Дата 14.1.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



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


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
CodeMonkey
Дата 14.1.2009, 16:44 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(lukas @  14.1.2009,  15:46 Найти цитируемый пост)
ладно тогда покажите что можно реализовать такого через анонимные методы, чего нельзя реализовать через процедурные типы???

http://forum.sources.ru/index.php?showtopi...t&p=2059967 :
Цитата
What can I do with an anonymous method which I can’t do without an anonymous method? Nothing.


Надо понимать, что они просто упрощают написание кода. Ведь если так рассуждать ("что можно реализовать через анонимные методы, чего нельзя реализовать через процедурные типы"), то можно и без for обойтись и без while. А в некоторых языках указателей вообще нет. Ну и пишут же как-то там программы. Вот также и анонимные методы. Они бывают полезны. Это простой способ увеличить время жизни локальных переменных.

Вообще же код:

Код
type
  TTest: reference to procedure;

var
  AnonMeth: TTest;

procedur Test;
var
  I, N, P: Integer;
begin
  I := 1;
  N := 2;
  P := 3;
  AnonMeth := (procedure (N: Integer);
               begin
                 P := I + N;
               end;);
  AnonMeth(N);
  ShowMessage(P);
end;

...

begin
  AnonMeth(3);
  AnonMeth := nil;
end;


Эквивалентен (грубый псевдо-код):

Код
type
  TTest: procedure of Object;

  ITestHelper = interface
     procedure Helper(N: Integer);
  end;

  TTestHelper = class(TInterfacedObject, ITestHelper)
  public
     I, P: Integer;
     procedure Helper(N: Integer);
  end;

procedure TTestHelper.Helper(N: Integer);
begin
   P := I + N;
end;

var
  AnonMeth: ITestHelper;

procedur Test;
var
  N: Integer;
begin
  AnonMeth := TTestHelper.Create;

  AnonMeth.I := 1;
  N := 2;
  AnonMeth.P := 3;
  // skipped
  AnonMeth.Helper(N);
  ShowMessage(AnonMeth.P);
end;

...

begin
  AnonMeth.Helper(3);
  AnonMeth := nil;          // здесь освобождается интерфейс => удаляется объект => заканчивают жизнь захваченные "локальные переменные"
end;


- В качестве базы используется объект, реализующий вспомогательный интерфейс. 
- Использование интерфейса позволяет автоматически производить очистку ресурсов (все "локальные переменные" удаляются автоматически, как только вы обнулите последнюю ссылку на анонимный метод).  
- Использование локальной переменной в процедуре фактически делает эту переменную полем внутреннего объекта. В нашем случае I и P уже не локальные переменные - это поля невидимого объекта.
- Вы можете увидеть этот интерфейс и вживую, если после имени переменной типа анонимный метод поставите точку: там будут методы IInterface + метод Invoke.
- Компилятор различает вспомогательные интерфейсы и обычные и не даёт их смешивать.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
bems
Дата 14.1.2009, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(Bose @  13.1.2009,  19:04 Найти цитируемый пост)
К тому же это приводит к необходимости чётко определять входные параметры callback-процедур, что в свою очередь делает код более структурированным
не согласен. Подумайте о случаях когда код явно разделен на обслуживающий (что-то типа api enumThreadWindows) и обслуживаемый (там то что вызывает эту апи и коллбэк там же). Если утверждать, что тип контекста было бы лучше определять четко, то это значит, что в модуле, где реализована EnumThreadWindows должен быть известен этот тип, что только ухудшит структурность (потому что этой функции не должно быть важно, что и как собрался делать вызывающий код с каждым окном - значит давать ей доступ к записи или объекту коллбэка - это создавать лишнюю связь между модулями)



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1071 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.