
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.5] |
![]() |
|
Страницы: (117) « Первая ... 12 13 [14] 15 16 ... 116 117 ( Перейти к последнему сообщению ) |
![]() |
Сообщ.
#196
,
|
|
во, вспомнил, что меня жутко раздражало в ОПаскале: аналог union из c++
![]() |
Сообщ.
#197
,
|
|
|
Цитата trainer @ В общем, традиция продолжается. Чтобы добавить что-то, в C++ пишут библиотеку, а в ObjectPascal/Delphi - изменяют язык. Ну так когда у языка всего одна реализация - это не сложно. Вот было бы у делфей несколько вариантов компилятора, да от разных фирм, да под разные платформы - было бы все значительно веселее... ![]() |
Сообщ.
#198
,
|
|
|
Нет. Ясно будет только знающему все методы класса (в то время, как реально зачастую только разработчик класса обязан всё знать, а никак не пользователь). ![]() ![]() with obj do foo(bar); foo - метод класса, или bar - метод? Или оба? А если ты реально хотел вызвать свободную функцию bar и не знал, что в классе есть метод с таким же методом? Можно будет долго искать ошибку. Цитата А конструкция with действительно очень полезна, ничего не попишешь. А почему бы не пописать? Попиши и опиши полезность. Победа лени в задаче набрать несколько символов на клавиатуре - вот и вся полезность, которая видится. Расскажи про более реальные полезности. |
Сообщ.
#199
,
|
|
|
Цитата archimed7592 @ во, вспомнил, что меня жутко раздражало в ОПаскале: аналог union из c++ Record с вариантами? ![]() |
![]() |
Сообщ.
#200
,
|
|
Цитата Nich @ не, ну ты приведи пример кода, как сделать union на OPascal'е.. Record с вариантами? ![]() ![]() |
Сообщ.
#201
,
|
|
|
Цитата archimed7592 @ не, ну ты приведи пример кода, как сделать union на OPascal'е.. ![]() А чё сразу я? ![]() ![]() |
![]() |
Сообщ.
#202
,
|
|
Цитата Hryak @ foo - метод класса, или bar - метод? Или оба? А если ты реально хотел вызвать свободную функцию bar и не знал, что в классе есть метод с таким же методом? Можно будет долго искать ошибку. Все эти вопросы могут возникнуть только если вы не знаете языка, у вас нет удобной ide, вы не располагаете временем. Всё, что понятно компилятору, должно быть понятно и программисту, использующему данный компилятор. Цитата Hryak @ Победа лени в задаче набрать несколько символов на клавиатуре - вот и вся полезность, которая видится. Расскажи про более реальные полезности. Полезность в удобстве. Код короче и понятней. Во многих конторах следуют регламентам оформления кода. Так вот, во всех таких регламентах присутствует ограничение на длину строки (обычно, не более 80-100 знаков). Так же необходимо использовать понятные идентификаторы. При условии соблюдения этих двух пунктов возможно появление такой вот конструкции (если нету оператора вроде with): ![]() ![]() SomeObject.GetSomeNestedObject() .DoSomethingWithMyParameter( SomeOtherObject.GetNestedObject(). GetValue(), ...); Это читать гораздо труднее, нежели запись с помощью with. |
Сообщ.
#203
,
|
|
|
А я все же хочу вернуться к вопросу о делегатах. Вот вполне реальный код:
![]() ![]() StrategyScene::StrategyScene() : m_BasesManager(this) { // ... shared_ptr<CheckBox> cb = Add(new CheckBox(false, "Bases")); m_SceneModeButtons.AddButton(cb.get(), bind(&StrategyScene::ChangeViewMode, this, SceneMode_Bases)); cb = Add(new CheckBox(false, "Towns")); cb->OnClick(bind(&StrategyScene::ChangeViewMode, this, SceneMode_Towns)); cb = Add(new CheckBox(false, "Team")); m_SceneModeButtons.AddButton(cb.get(), bind(&StrategyScene::ChangeViewMode, this, SceneMode_Team)); cb = Add(new CheckBox(false, "Vechiles")); m_SceneModeButtons.AddButton(cb.get(), bind(&StrategyScene::ChangeViewMode, this, SceneMode_Vechiles)); // ... } void StrategyScene::ChangeViewMode(SceneModeEnum viewMode) { if (viewMode == SceneMode_Towns) m_Map->ToggleShowCities(); else m_SceneMode = viewMode; IDecorator* id = GetDecoratorFactory().GetDecorator(); StrategySceneDecorator* d = dynamic_cast<StrategySceneDecorator*>(id); if (viewMode != SceneMode_Towns) d->ChangeSceneMode(viewMode); } Небольшие пояснения. m_SceneModeButtons - группа радиобатонов, управляющих режимом отображения сцены. В методе AddButton на активацию радиобатона вешается обработчик. В данном случае обработчик - это обычная функция, принимающая на вход новый режим отображения. Все, вообщем то, достаточно просто. Как такое выглядело бы в дельфях? |
Сообщ.
#204
,
|
|
|
Цитата wind @ Всё, что понятно компилятору, должно быть понятно и программисту, использующему данный компилятор. гы-гы... Код пишется не для компилятора, а для человека, который его читать будет. Понять-то можно с with, что написано, но это требует дополнительных усилий от програмиста читающего |
Сообщ.
#205
,
|
|
|
Цитата wind @ Все эти вопросы могут возникнуть только если вы не знаете языка, у вас нет удобной ide, вы не располагаете временем. Всё, что понятно компилятору, должно быть понятно и программисту, использующему данный компилятор. Такой код может быть выложен, например, в интернете в качестве иллюстрации чего-либо. И (в таком случае) у читателя не будет под рукой удобной ide, которая бы ему подсказала - что именно это за идентификатор. |
![]() |
Сообщ.
#206
,
|
|
Цитата H.Iglesias II @ Код пишется не для компилятора, а для человека, который его читать будет. ![]() ![]() ![]() Выполнять и компилировать тоже человек будет? Добавлено Цитата Flex Ferrum @ Такой код может быть выложен, например, в интернете в качестве иллюстрации чего-либо. И (в таком случае) у читателя не будет под рукой удобной ide, которая бы ему подсказала - что именно это за идентификатор. Если кто-то выложил пример на паскале, то и прочитать его сможет знающий паскаль. Так же с любым языком. Или вы хотите сказать, что в случае с ![]() ![]() if (object) foo(bar); всем сишникам сразу станет понятно что и где? ![]() |
Сообщ.
#207
,
|
|
|
Цитата wind @ Выполнять и компилировать тоже человек будет? а это здесь причем? Если программисту удобнее читать будет, то компиллятор понять не сможет? Цитата wind @ всем сишникам сразу станет понятно что и где? а что здесь непонятного? Чем тут with поможет? ![]() ![]() if (object) foo(bar); // никаких вопросов "относится foo или bar к object?" не возникает |
Сообщ.
#208
,
|
|
|
Ну-ну. Только почему тогда имя выбирается покороче? Видимо, потому что избыточную информацию в угоду читаемости приходится делать неброской. Цитата Hryak @ Ну его нафиг, этот with с его таким неявным скрытием имен. wc. - всё понятно, что откуда Да ну? Ты все переменные так именуешь - двумя буковками? Такие имена для тебя понятны? Можно подумать, IDE не способна работать с with. Цитата Hryak @ Прекрасный язык - Делфи - позволяет вызывать нестатические методы у несуществующих объектов. Вообще-то C++ это тоже позволяет. Или ты хочешь сказать, что в C++ нестатические методы в конструкторе нельзя вызывать? ![]() Цитата Hryak @ foo - метод класса, или bar - метод? Или оба? А если ты реально хотел вызвать свободную функцию bar и не знал, что в классе есть метод с таким же методом? Можно будет долго искать ошибку. А зачем перенимать with именно в том виде, как он представлен в Delphi? Можно ведь ввести унарные операторы dot и arrow, и тогда можно будет записывать так ![]() ![]() with (object) { .foo(bar) } with (pointer) { ->foo(bar) } Теперь нигде не ошибёшься. Цитата archimed7592 @ аналог union из c++ В C++ union не так уж и полезен, поскольку объекты, имеющие нетривиальные конструкторы, копирующие операторы присваивания и деструктор, не могут быть его членами. |
Сообщ.
#209
,
|
|
|
Цитата Dantes @ Да ну? Ты все переменные так именуешь - двумя буковками? Такие имена для тебя понятны? Локальные - довольно таки часто. А зачем длиннее? Если объявление переменной и контекст ее использования видны на одном экране, смысла давать переменной длинное название нет никакого. |
![]() |
Сообщ.
#210
,
|
|
Цитата H.Iglesias II @ а это здесь причем? Если программисту удобнее читать будет, то компиллятор понять не сможет? Программист должен знать язык, на котором кодит. Цитата H.Iglesias II @ а что здесь непонятного? Чем тут with поможет? Всё очень даже понятно - претензии в понятности with высосаны из пальца, данная оператор не более непонятен, чем любой другой любого другого языка. Цитата H.Iglesias II @ никаких вопросов "относится foo или bar к object?" не возникает ![]() ![]() ![]() Вопросы см. выше, их не я задавал. |