Форум: "Прочее";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
ВнизOperator overloading Найти похожие ветки
← →
Ketmar © (2007-03-30 13:22) [40]ключевое слово -- "иногда". %-)
← →
euru © (2007-03-30 14:57) [41]class sealed
В Delphi есть атрибут метода abstract. Теперь этот атрибут распространили до уровня класса (class abstract). Добавили новый атрибут метода final. Почему тогда по аналогии с class abstract нельзя было вместо class sealed использовать class final?
class type
В примере тип объявлен внутри раздела private. Если следовать концепциям ООП, этот раздел доступен только внутри класса и невидим извне. Однако в примере имеется обращение к полю приватного раздела. Нет ли в этом противоречия?
final methods
Исходя из текста (и здравого смысла) атрибутом final могут помечаться только виртуальные методы. Но объявлять метод виртуальным и тут же приписывать к нему атрибут final, как мне кажется, бессмысленно. Поэтому все final будут писаться вместе с override. Почему бы тогда вместо override; final; просто не писать final?
static class methods
А какие у таких методов особые преимущества по сравнению с обычными class methods, чтобы добавлять в язык такое понятие?
Ну, про недоделанные class helpers и records with methods я уже говорил ранее. :)
← →
antonn © (2007-03-30 15:06) [42]вы только не пинайте, что такое "перезагрузка записей"? :)
← →
властелин колхоза (2007-03-30 15:10) [43]> В примере тип объявлен внутри раздела private. Если следовать
> концепциям ООП, этот раздел доступен только внутри класса
> и невидим извне. Однако в примере имеется обращение к полю
> приватного раздела.
У Делфи к приватным полям может обращаться всяк, кто расположен в том же модуле. ;-)
← →
Чапаев © (2007-03-30 15:11) [44]Ой... Надо ж... На рабочем компе древний ник остался.
← →
Суслик © (2007-03-30 15:15) [45]
> [41] euru © (30.03.07 14:57)
> class sealed
> В Delphi есть атрибут метода abstract. Теперь этот атрибут
> распространили до уровня класса (class abstract). Добавили
> новый атрибут метода final. Почему тогда по аналогии с class
> abstract нельзя было вместо class sealed использовать class
> final?
Потому, что так. Какая разница? Синтаксис такой.
> class type
> В примере тип объявлен внутри раздела private. Если следовать
> концепциям ООП, этот раздел доступен только внутри класса
> и невидим извне. Однако в примере имеется обращение к полю
> приватного раздела. Нет ли в этом противоречия?
Private в дельфи всегда такой был - в рамках модуля можно обращаться.
для того, чтобы было нельзя есть strict private
> final methods
> Исходя из текста (и здравого смысла) атрибутом final могут
> помечаться только виртуальные методы. Но объявлять метод
> виртуальным и тут же приписывать к нему атрибут final, как
> мне кажется, бессмысленно. Поэтому все final будут писаться
> вместе с override. Почему бы тогда вместо override; final;
> просто не писать final?
Синтаксис такой.
> static class methods
> А какие у таких методов особые преимущества по сравнению
> с обычными class methods, чтобы добавлять в язык такое понятие?
Не передается ссылка на класс. Т.е. это типа процедуры.
← →
euru © (2007-03-30 15:16) [46]
> властелин колхоза (30.03.07 15:10) [43]
> У Делфи к приватным полям может обращаться всяк, кто расположен
> в том же модуле. ;-)
Из контекста примера не следует, что обращение идёт из того же модуля, где было сделано объявление.
← →
Чапаев © (2007-03-30 15:20) [47]> [46] euru © (30.03.07 15:16)
Не вели казнить, вели слово молвить... Я даже не знаю, о каком примере речь идёт... %-)
← →
euru © (2007-03-30 15:28) [48]
> Чапаев © (30.03.07 15:20) [47]
Подсказка №1:
Вся необходимая информация есть в этой ветке.
Подсказка №2:
Ищите перед Чапаев © (30.03.07 10:16) [1]
Подсказка №3:
http://dn.codegear.com/article/34324
:)
← →
euru © (2007-03-30 15:41) [49]
> Суслик © (30.03.07 15:15) [45]
> Какая разница? Синтаксис такой.
Потому что происходит засорение языка действительно лишними и/или двусмысленными понятиями.
← →
Суслик © (2007-03-30 17:18) [50]
> [49] euru © (30.03.07 15:41)
синтаксис штука такая - его не выбирают, к нему привыкают. имхо.
намного хуже, когда идет засорение семантики.
← →
Gero © (2007-03-30 17:25) [51]О, теперь и на делфи можно будет писать по-настоящему уродский код.
← →
Loginov Dmitry © (2007-03-30 19:47) [52]Пипец! Так опошлить хороший язык! Докатились... :(
← →
celades © (2007-03-30 21:09) [53]
> О, теперь и на делфи можно будет писать по-настоящему уродский
> код.
угу.можно уродский, а можно и хороший. а раньше был только один - уродский.
← →
TUser © (2007-03-30 21:26) [54]> Игорь Шевченко
> Ketmar
По-старому все работает? Да. В чем проблема. Ну, допустим, добавили множественное наследование, или хелперы или перегрузку. Мне, например, м.н. не нравится. Почему бы его не проигнорировать и не продолжать писать супер-правильный (с моей, вашей и пр. точки зрения) код?
← →
Суслик © (2007-03-30 23:36) [55]
> TUser © (30.03.07 21:26) [54]
+1
← →
XProger © (2007-03-31 07:09) [56]http://www.everfall.com/paste/id.php?e9u2qyntctbw не знаю как вам, но перегрузка операторов сделала мой код значительно светлее и симпатишнее...
Speed := VAdd(Speed, VMult(Acc, Time))
Speed := Speed + Acc * Time;
Какой по-вашему код является супер правильным и читабельным? )
← →
euru © (2007-04-01 12:55) [57]
> Суслик © (30.03.07 17:18) [50]
Оно понятно, что теперь вам придётся привыкать к такому синтаксису. Но всё-таки у разработчиков должно же было хватить ума хоть немного подумать, как наиболее гармонично ввести в Delphi новые сущности, прежде чем бездумно брать кальки с других языков.
Да и непоследовательны они. Понятияfinal
,sealed
,static
один в один спёрли, а при перегрузке операторов эти самые операторы заменили их синонимами. Зачем? Неужелиoperator +(a, b: MyType): MyType
будет непонятен программисту Delphi? При этом их заменили даже не названиями операторов, а названиями действий, которые по смыслу не всегда могут совпадать с действиями, совершаемыми над тем или иным типом. И кстати, если я буду перегружать, например, оператор Subtract, смогу ли я объявить в том же классе поле или метод с таким же именем?
Про static class methods я так и не понял. Ну, не передаётся ссылка на класс. Ну и что? Какие это даёт преимущества по сравнению с методами, в которые она передаётся? А если всё-таки это так важно, неужели по контексту тела этого метода нельзя определить, используется в нём эта ссылка или нет? И если не используется, то генерировать метод без передачи этой ссылки.
← →
Суслик © (2007-04-02 10:27) [58]
> [57] euru © (01.04.07 12:55)
синтаксис - дело привычки.
главное, чтобы работало верно.
про static class method.
во-первых способ вызова разный:
1. если non-static class method, то reference to metaclass is passed as parameter.
2. если static class method, то провсто вызывается соответствующий метод - никаких параметров не передается.
разница понятно:
1. non-static class method совместим с method of object.
2. static class method совместим с обычным процедурным типом.
(стоит заметить, что это у них не до конца реализовано, т.е. есть ошибки, но хотят реализовать они это именно так, как написано выше).
разница также в производительности - незначительная, но есть (в первом случае нужен параметр, во втором нет).
т.е. static class method - это совершенно классически для других языков статический метод, у которого раньше не было аналога в дельфи.
← →
Игорь Шевченко © (2007-04-02 10:28) [59]TUser © (30.03.07 21:26) [54]
А ты только со своим кодом сталкиваешься ? Завидую...
Надо же, столько счастья в одни руки :)
← →
Суслик © (2007-04-02 10:37) [60]
> [59] Игорь Шевченко © (02.04.07 10:28)
если ты имеешь в виду, что много смотришь чужой код и тебе хотелось бы, чтобы было понятней, то не будешь же ты спорить, что даже с помощью классического паскаля можно писать очень непрятный для восприятия и понимания код.
а то, что тебе приходится много смотреть чужого кода (может даже больше, чем писать своего?), то это шерифа (CG) волновать как-то не очень должно - ибо твой пример все же не является массовым, и не дело тебе выступать против прогресса, т.к. тебе будет недобней смотреть чужой код.
я вот, например, активно пользуюсь перегрузкой операторов для записей. сам знаешь, что в дельфи нет втроенного decimal типа. вот и компенсирую это использование записей с перегруженными операторами.
а то, что смотреть это кому-то будет неудобно, то меня это вообще мало волнует, ибо понимание кода на 90% процентов состоит из понимания предметнгой области, которая весьма неплохо изложена на бумаге.
в общем, Игорь, не пойми меня неправильно - я не против понятного кода, но создать плохой и непонятный код можно и без всяких новых фичей: все дело в людях.
не будешь же ты утверждать, что малое количество фичей есть достаточное ИЛИ необходиме условие понятного кода?
да эти вещи вообще не связаны никак.
и имхо приписывать не буду - ибо это именно мое мнение, также заметь, основанное на моем личном опыте.
← →
oxffff © (2007-04-02 10:39) [61]
> Игорь Шевченко © (30.03.07 11:42) [23]
> Ketmar © (30.03.07 11:33) [22]
>
>
> > всё, что оно делает -- усложняет код
>
>
> Не всегда. Если ты помнишь, то против helper"ов я довольно
> активно выступал. За одним редким исключением - для связи
> TObject с System.Object кроме helper"ов трудно что-либо
> придумать.
Для новых конструкций языка таких так
for in, необходимо в "старые классы" добавить поддержку итераторов.
Что лучше всего поможет нам.
Догадайтесь
← →
Суслик © (2007-04-02 10:40) [62]
> for in, необходимо в "старые классы" добавить поддержку
> итераторов.
в многие стандартные классы уже добавлено
← →
oxffff © (2007-04-02 10:48) [63]
> Суслик © (02.04.07 10:40) [62]
>
> > for in, необходимо в "старые классы" добавить поддержку
>
> > итераторов.
>
> в многие стандартные классы уже добавлено
Это известно.
Просто хотелось еще раз для Игоря Шевченко показать на примере смысл
этого
Class helpers provide a way to extend a class, but they should not be viewed as a design tool to be used when developing new code. They should be used solely for their intended purpose, which is
language and platform RTL binding
Вот еще
http://17slon.com/blogs/gabr/2007/03/fun-with-enumerators-part-5-class.html
← →
oxffff © (2007-04-02 10:57) [64]to Игорь Шевченко
из
http://17slon.com/blogs/gabr/2007/03/fun-with-enumerators-part-5-class.html
Admit it, class helpers are great. They can also be great source of problems. Class helpers were introduced mainly for internal CodeGear use and they have one big limitation - at any given moment, there can be at most one helper active for a given class.
You can define and associate multiple class helpers with a single class type. However, only zero or one class helper applies in any specific location in source code. The class helper defined in the nearest scope will apply. Class helper scope is determined in the normal Delphi fashion (i.e. right to left in the unit"s uses clause). [excerpt from Delphi help]
Но вот здесь я соглашусь с мнением Игоря Шевченко
IOW, if Delphi already includes class helper for a class and you write another, you"ll loose the Delphi-provided functionality. (You can inherit from the Delphi class helper though - read more in Delphi help.)
Use class helpers with care!
Но написать шустрый, но непонятный код, можно и на Delphi7.
Как?
asm
..................
end;
← →
Игорь Шевченко © (2007-04-02 11:02) [65]Суслик © (02.04.07 10:37) [60]
> то не будешь же ты спорить, что даже с помощью классического
> паскаля можно писать очень непрятный для восприятия и понимания
> код.
Не буду спорить. Я уже приводил этот аргумент, спорить с самим собой бессмысленно.
> а то, что смотреть это кому-то будет неудобно, то меня это
> вообще мало волнует
К сожалению, не только тебя. Это-то и плохо, так как с твоим кодом я не сталкиваюсь, а вот с кодом других авторов, которых так же мало волнует, что кому-то будет неудобно, сталкиваться приходится.
← →
oxffff © (2007-04-02 11:15) [66]
> К сожалению, не только тебя. Это-то и плохо, так как с твоим
> кодом я не сталкиваюсь, а вот с кодом других авторов, которых
> так же мало волнует, что кому-то будет неудобно, сталкиваться
> приходится.
А ваш код, Игорь Шевченко, будет хорошо восприниматься другими?
Уверен что у многих в вашему коду будут замечания.
Вы говорите о единой стандартизации?
Вы ее соблюдаете?
← →
Игорь Шевченко © (2007-04-02 11:22) [67]oxffff © (02.04.07 11:15) [66]
До сих пор жалоб не слышал
← →
Empleado © (2007-04-02 11:28) [68]
> REA (30.03.07 10:08)
> Дождались...
> http://dn.codegear.com/article/34324
Спасибо за новости.
Будем вникать. Много чего произошло после D7, не знал.
До вчерашней недели пользовался только им. В пятницу поставил честно купленный D2007 for W32. Посмотрим...
← →
oxffff © (2007-04-02 11:31) [69]
> Игорь Шевченко © (02.04.07 11:22) [67]
> oxffff © (02.04.07 11:15) [66]
>
> До сих пор жалоб не слышал
Вы наверно один и на ассемблере(хотя бы x86).
Конструкции простые.
Нет там Class helpers.
:)
На правду похоже вот это
А если серьезно, то это заблуждение.
Стадия первая - неприятие чужего кода,
Стадия вторая - что делать нужно разбираться.
Стадия последняя: мне все понятно, не так все печально, как по началу.
← →
oxffff © (2007-04-02 11:33) [70]Да, и даже профессионал профессионалу скажет я бы сделал по другому.
← →
Игорь Шевченко © (2007-04-02 11:44) [71]oxffff © (02.04.07 11:31) [69]
> Вы наверно один и на ассемблере(хотя бы x86).
> Конструкции простые.
Переведи
← →
oxffff © (2007-04-02 11:50) [72]
> Игорь Шевченко © (02.04.07 11:44) [71]
> oxffff © (02.04.07 11:31) [69]
>
>
> > Вы наверно один и на ассемблере(хотя бы x86).
> > Конструкции простые.
>
>
> Переведи
Вы наверно пишите на ассемблере и пишите один.
Mov,lea ,jz,jzn,jmp,stos... -Конструкции простые
>До сих пор жалоб не слышал
Стадия первая - неприятие чужего кода,
Стадия вторая - что делать нужно разбираться
Стадия последняя: мне все понятно, не так все печально, как по началу.
← →
oxffff © (2007-04-02 11:51) [73]jzn= jnz
← →
Суслик © (2007-04-02 11:54) [74]
> [67] Игорь Шевченко © (02.04.07 11:22)
> oxffff © (02.04.07 11:15) [66]
>
> До сих пор жалоб не слышал
неправда Ж)
я тебя спрашивал почему в своем переводе супермаркета рихтера ты иницилизируешь переменную - хотя нефих.
было 1.5-2 года назад.
ты сказал... да ничего не сказал - типа нефих с тобой спорить :)
← →
Игорь Шевченко © (2007-04-02 12:11) [75]
> Вы наверно пишите на ассемблере и пишите один.
Да, именно так и происходит.
Суслик © (02.04.07 11:54) [74]
> было 1.5-2 года назад.
>
> ты сказал... да ничего не сказал - типа нефих с тобой спорить
>
Вот это память - обзавидоваться можно.
← →
Суслик © (2007-04-02 12:19) [76]
> Вот это память - обзавидоваться можно.
да фиговая память :)
просто вспомнилось - само както :)
наверное сильно запала несправедливость.
----
я еще по теме добавлю.
мое мнение - любой чужой код С ПЕРВОГО ВЗГЛЯДА всегда потемки. просто хороший чужой код приятней, полезней и легче изучать
← →
oxffff © (2007-04-02 12:22) [77]
> просто хороший чужой код приятней, полезней и легче изучать
Хороший код = свой код (психология). Факт.
Хороший чужой код = код написанный другим под твою диктовку.
:)
← →
oxffff © (2007-04-02 12:24) [78]Уважаемые вы что все на UML сидите?
← →
Игорь Шевченко © (2007-04-02 12:25) [79]oxffff © (02.04.07 12:22) [77]
Вот есть исходные тексты VCL - все понятно. Хотя код не свой.
← →
Суслик © (2007-04-02 12:29) [80]
> [79] Игорь Шевченко © (02.04.07 12:25)
> oxffff © (02.04.07 12:22) [77]
> Вот есть исходные тексты VCL - все понятно. Хотя код не
> свой.
Понятно, потому что изучал ты его.
Возьми grids.pas. Если тебе там все понятно - ты гений. Честное слово, не шучу. Мне там многое понятно - процентов 70, но я и изучал его в сумме часов 100.
Страницы: 1 2 3 4 вся ветка
Форум: "Прочее";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.04 c