
Приветствую. В завершение цикла заметок про объект Sender и операторы as и is хотелось бы затронуть и конструкцию тип(переменная). Далее поговорим про различия с объект as тип.
В посте о Sender: TObject я рассмотрел использование объекта Sender, который передаётся процедуре-обработчику.
Приведение и проверку типа объекта с помощью as и is я также рассмотрел в своё время, а сегодня поговорим о подобной конструкции:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Sender is TButton then
TButton(Sender).Caption:='pressed';
end;
Такое приведение Sender к TButton считается стандартным. Однако многие люди считают это плохим тоном, перешедшим из C. Напомню, в C мы пишем (тип) переменная.
И ещё напомню, в прошлых постах мы рассматривали (Sender as TButton).Caption. Так в чём же разница?
Оператор as
Поговорим сначала про него. Такой способ применим только к объектам, да и к интерфейсам. Разрешено приведение к классу-родителю, проверка происходит в runtime, а в случае неверной подборки типов происходит исключение invalid class typecast. Впрочем, если мы вооружимся проверкой с помощью оператора is, это не будет для нас проблемой.
Стандартное, жёсткое приведение
Здесь в runtime ничего не проверяется, исключений типа «invalid class typecast» не возникает. Всё происходит уже при компилировании.
TEdit(Button1).Text:='pressed';
Это ужасно, но это сработает. Можно сказать, что в этом случае мы твёрдо говорим компилятору, что уверены, что это за тип, не стоит проверять. В то время как в операторе as, как сказано выше, предусмотрена такая проверка. Но мы же всё равно проверяем тип с помощью оператора is, зачем нам лишние действия?
Поэтому я склоняюсь к использованию таких конструкций:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Sender is TButton then
TButton(Button1).Caption:='pressed';
end;
Мы говорим компилятору, что объект типа TButton, мы уверены, так как только что проверили.
Ну и напоследок добавлю, что такое приведение типов работает и с обычными переменными, в отличие от оператора as. Но это уже совсем другая история
Теперь по поводу обмена постовыми. C радостью обменяюсь с блогом, так или иначе связанным с программированием, с адекватными интересными постами. Вчера один человек стучал в аську, я не успел ему ответить, а теперь найти номер не могу. В общем, если напишешь пост, связанный с программированием, то с радостью обменяюсь, а так нет желания.
PS Картинка к посту из msdn
Спасибо, буду пробовать. Я недавно начал изучать программирование, но с несовместимостью типов столкнулся чуть ли не в самом начале. Пока пишу небольшие программы (даже язык не поворачивается их так назвать =)) до 50-80 строк и пока получается обходиться тем, что подбирать совместимые типы, но думаю, что скоро материал действительно пригодится.
Ну такие вещи, на сколько я полагаю, нужно знать с самого начала. Тем кто это упускает с самого начала или считает что ему это не пригодится то глубоко заблуждается или ошибается, кому как будет угодно.
Заинтересовался о delphi, может быть подскажете какую-нибудь литературу?
Знания ассемблера имеются.
Это вряд ли, сам не по конкретной литературе осваивал)
Библия Delphi Михаила Флемова – наверно лучшая книга для новичка.
Картинка то про делфи?)) Или объект и оператор?
Картинка из msdn, там она символизировала то же, что и здесь, только применительно к vb
Делфи – это хорошая платформа для начала. Сперва всегда лучше залезть в болото, зато потом и со всеми остальными системами проще будет.
Все конечно красиво и гладко. Но надо смотреть правде в глаза – delphi умирающий язык, к моему сожалению…
Об этом ещё можно поспорить, но я не люблю холивары
Можно и поспорить, но проще посмотреть на чем разрабатываются серьезные программы и станет все понятно
QIP, FLStudio – несерьёзные программы?)
http://www.google.ru/search?q=delphi+%F3%EC%E8%F0%E0%E5%F2
Ну не надо так буквально трактовать мои слова про несерьезные программы. Возьмем к примеру Винду или Линукс
Ух ты куда замохнулся! На Делфи никогда не писали ОС…наверно. Она не для этих целей изначально…наверно =)
а я сеня на лабе в уни калькулятор на дельфи написал) первая прога))
Мои поздравления
Мне нравится Delphi. C него и начинала изучение программирования. Я как то после пары лет работы с Delphi переметнулась на Action Script =) Как сейчас помню первое ощущение что Action Script абсолютно нелогичный =)
Думал Делфи это язык прошлого
Почему то уж очень давно про него не слышал, хотя работаю в ИТ компании
Библия Delphi Михаила Флемова – наверно лучшая книга для новичка.
Кстати слышал о ней достаточно противоречивые отзывы
Странно.. Или у меня с головой не всё в порядке, или одно из двух.
Во-первых, кто сказал что php легче Delphi ? это всё равно что говорить что синий лучше красного! это просто очень разные вещи
Во-вторых, может я отстал от нюансов программирования, но Делфи – это объектно-ориентированный язык, а php заточен под создание страниц в интернете с определённого рода действиями.
Таким образом, спор идёт на тему – что лучше BMW или Audi..
Да конечно Тойота
Сравнивать PHP c Delphi вообще неверно изначально. Разные языки, заточенные под конкретные РАЗНЫЕ нужды. Соответственно со своими спецификациями. С таким же успехом можно сравнивать HTML и SQL..
Точнее BMW и Менфрейм:)
Для разных задач разные инструменты. Ножом затылок не почешешь, а пальцом не отрежешь колбасы.
Я начинал с pascal в школе, позже delphi. Сейчас работаю на php и изучаю Java.
На мой взгляд delphi очень хорошо для школы, т.е. для обучения программированию всех, включая тех, кому оно нафиг не нужно:)
Далее нужно смотреть какие задачи, такие инструменты и выбирать. Но, ИМХО, для промышленного программирования delphi не годиться. Лучше использовать Java/C#/C++ взависиомсти от задачи.
Собстевенно к привидению типов. Автор, вроде в Delphi for Win32 2009 добавлены generics, напиши о них плиз.
Да, делфи уже устарел, но все же это первый язык, на котром можно накодить любую програму ( это все-такие подобие ООП).
Ванек, ООП сейчас многие поддерживают. И не только Delphi
И все таки определение делфи интерпретаторов происходит наподобие принципов дизасемблирования!
Ух ты
Mic крутой программер. оО. Батек Программирования.
Библия Delphi Михаила Флемова – не думаю, что для новичка самое то. Лучше начинать с простых уроков в интернете, а потом переходить уже к книге.
Как было кем-то точно подмечено, у Embarcadero странный маркетинг. Для каждой версии VisualStudio есть версия Express, сейчас актуальна версия 2010. А аналог для Delphi лишь для версии 2006. И цены заоблачные. В результате молодёжь не приходит. А старики уходят туда, где платят, т.е. на C#. Имеются в виду не любители, а те кто зарабатывает программированием деньги. Но главное не в этом, а в том, что под Си гораздо больше наработано, взять тот же Open Source.
Благодаря энтузиастам Delphi не умрёт. Почитал сегодня про BeOS. Она была в своё время настолько хороша, что из числа пользователей этой ОС, которых насчитывалось всего 1,3% от общего числа пользователей компьютеров, собралась команда, которая создала точный клон операционки на базе Linux. Клон называется Haiku. Вывод: хорошее не умирает. А Delphi это то, что мы любим.
Кстати, грядёт возрождение легендарных наладоников Palm, а ведь Palm тоже почти умер.
спасибо. если было бы таких крупиц понятных по больше. А то я начинающий делфист, а заумную литературу неохота читать
.
Delphi не умирает, просто php – это стандарт для веба, который всех устраивает и его возможностей вполне достаточно. А конструкции интересные, возьму на себе заметку.
Сорри, за баянизм, но вот, собственно ссылка для тех, кто считает, что Delphi умирает – читайте внимательно
Несерьезно, ребят. Любую задачу можно решить несколькими способами и описать на нескольких языках и кто и на чём пишет – разницы нет. Главное – получить результат. Считать, что на Delphi нифига толкового нельзя написать…ну мля..это по-крайней мере по-детски
http://isdelphidead.com/
Заметил такую тенденцию среди программеров: писал-писал программер на Delphi, все ему нравилось. Решил перейти на теже С++, перешел и сразу БАХ Delphi умирает!!! Караул, шеф, всё пропало!!
согласен с вами полностью, особенно по поводу того что любую задачу можно решить несколькими способами, и это применительно не только к программированию.