На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++

Страницы: (117) « Первая ... 12 13 [14] 15 16 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    во, вспомнил, что меня жутко раздражало в ОПаскале: аналог union из c++ :)...асилить эти case bla-bla-bla так и не смог (сейчас даже примерно не вспомню как оно реализуется)... придумали сейчас что-нибудь более адекватное для таких структур?
      Цитата trainer @
      В общем, традиция продолжается. Чтобы добавить что-то, в C++ пишут библиотеку, а в ObjectPascal/Delphi - изменяют язык.

      Ну так когда у языка всего одна реализация - это не сложно. Вот было бы у делфей несколько вариантов компилятора, да от разных фирм, да под разные платформы - было бы все значительно веселее... :)
        Цитата wind @
        Знающему язык всё будет ясно.

        Нет. Ясно будет только знающему все методы класса (в то время, как реально зачастую только разработчик класса обязан всё знать, а никак не пользователь).
        ExpandedWrap disabled
          with obj do
            foo(bar);

        foo - метод класса, или bar - метод? Или оба? А если ты реально хотел вызвать свободную функцию bar и не знал, что в классе есть метод с таким же методом? Можно будет долго искать ошибку.

        Цитата
        А конструкция with действительно очень полезна, ничего не попишешь.

        А почему бы не пописать? Попиши и опиши полезность. Победа лени в задаче набрать несколько символов на клавиатуре - вот и вся полезность, которая видится. Расскажи про более реальные полезности.
          Цитата archimed7592 @
          во, вспомнил, что меня жутко раздражало в ОПаскале: аналог union из c++

          Record с вариантами? :)
            Цитата Nich @
            Record с вариантами? :)
            не, ну ты приведи пример кода, как сделать union на OPascal'е.. :)
              Цитата archimed7592 @
              не, ну ты приведи пример кода, как сделать union на OPascal'е.. :)

              А чё сразу я? :) Я Паскаля в руках года 2 не держал :)
                Цитата Hryak @
                foo - метод класса, или bar - метод? Или оба? А если ты реально хотел вызвать свободную функцию bar и не знал, что в классе есть метод с таким же методом? Можно будет долго искать ошибку.

                Все эти вопросы могут возникнуть только если вы не знаете языка, у вас нет удобной ide, вы не располагаете временем. Всё, что понятно компилятору, должно быть понятно и программисту, использующему данный компилятор.

                Цитата Hryak @
                Победа лени в задаче набрать несколько символов на клавиатуре - вот и вся полезность, которая видится. Расскажи про более реальные полезности.

                Полезность в удобстве. Код короче и понятней.

                Во многих конторах следуют регламентам оформления кода. Так вот, во всех таких регламентах присутствует ограничение на длину строки (обычно, не более 80-100 знаков). Так же необходимо использовать понятные идентификаторы. При условии соблюдения этих двух пунктов возможно появление такой вот конструкции (если нету оператора вроде with):
                ExpandedWrap disabled
                  SomeObject.GetSomeNestedObject()
                      .DoSomethingWithMyParameter(
                          SomeOtherObject.GetNestedObject().
                              GetValue(), ...);

                Это читать гораздо труднее, нежели запись с помощью with.
                  А я все же хочу вернуться к вопросу о делегатах. Вот вполне реальный код:
                  ExpandedWrap disabled
                    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 на активацию радиобатона вешается обработчик. В данном случае обработчик - это обычная функция, принимающая на вход новый режим отображения. Все, вообщем то, достаточно просто. Как такое выглядело бы в дельфях?
                    Цитата wind @
                    Всё, что понятно компилятору, должно быть понятно и программисту, использующему данный компилятор.

                    гы-гы...
                    Код пишется не для компилятора, а для человека, который его читать будет. Понять-то можно с with, что написано, но это требует дополнительных усилий от програмиста читающего
                      Цитата wind @
                      Все эти вопросы могут возникнуть только если вы не знаете языка, у вас нет удобной ide, вы не располагаете временем. Всё, что понятно компилятору, должно быть понятно и программисту, использующему данный компилятор.

                      Такой код может быть выложен, например, в интернете в качестве иллюстрации чего-либо. И (в таком случае) у читателя не будет под рукой удобной ide, которая бы ему подсказала - что именно это за идентификатор.
                        Цитата H.Iglesias II @
                        Код пишется не для компилятора, а для человека, который его читать будет.

                        :lool: :lool: :lool:
                        Выполнять и компилировать тоже человек будет?

                        Добавлено
                        Цитата Flex Ferrum @
                        Такой код может быть выложен, например, в интернете в качестве иллюстрации чего-либо. И (в таком случае) у читателя не будет под рукой удобной ide, которая бы ему подсказала - что именно это за идентификатор.

                        Если кто-то выложил пример на паскале, то и прочитать его сможет знающий паскаль. Так же с любым языком.

                        Или вы хотите сказать, что в случае с
                        ExpandedWrap disabled
                          if (object) foo(bar);

                        всем сишникам сразу станет понятно что и где? :lol:
                          Цитата wind @
                          Выполнять и компилировать тоже человек будет?

                          а это здесь причем? Если программисту удобнее читать будет, то компиллятор понять не сможет?


                          Цитата wind @
                          всем сишникам сразу станет понятно что и где?

                          а что здесь непонятного? Чем тут with поможет?
                          ExpandedWrap disabled
                            if (object) foo(bar); // никаких вопросов "относится foo или bar к object?" не возникает
                          Сообщение отредактировано: H.Iglesias II -
                            Цитата Hryak @
                            Это не имитация, а самостоятельный механизм.

                            Ну-ну. Только почему тогда имя выбирается покороче? Видимо, потому что избыточную информацию в угоду читаемости приходится делать неброской.

                            Цитата Hryak @
                            Ну его нафиг, этот with с его таким неявным скрытием имен.
                            wc. - всё понятно, что откуда

                            Да ну? Ты все переменные так именуешь - двумя буковками? Такие имена для тебя понятны?

                            Цитата Hryak @
                            (да и в IDE с автозавершением имен приятней получится).

                            Можно подумать, IDE не способна работать с with.

                            Цитата Hryak @
                            Прекрасный язык - Делфи - позволяет вызывать нестатические методы у несуществующих объектов.

                            Вообще-то C++ это тоже позволяет. Или ты хочешь сказать, что в C++ нестатические методы в конструкторе нельзя вызывать? :huh:

                            Цитата Hryak @
                            foo - метод класса, или bar - метод? Или оба? А если ты реально хотел вызвать свободную функцию bar и не знал, что в классе есть метод с таким же методом? Можно будет долго искать ошибку.

                            А зачем перенимать with именно в том виде, как он представлен в Delphi? Можно ведь ввести унарные операторы dot и arrow, и тогда можно будет записывать так

                            ExpandedWrap disabled
                              with (object)
                              {
                                  .foo(bar)
                              }
                              with (pointer)
                              {
                                  ->foo(bar)
                              }

                            Теперь нигде не ошибёшься.

                            Цитата archimed7592 @
                            аналог union из c++

                            В C++ union не так уж и полезен, поскольку объекты, имеющие нетривиальные конструкторы, копирующие операторы присваивания и деструктор, не могут быть его членами.
                            Сообщение отредактировано: Dantes -
                              Цитата Dantes @
                              Да ну? Ты все переменные так именуешь - двумя буковками? Такие имена для тебя понятны?

                              Локальные - довольно таки часто. А зачем длиннее? Если объявление переменной и контекст ее использования видны на одном экране, смысла давать переменной длинное название нет никакого.
                                Цитата H.Iglesias II @
                                а это здесь причем? Если программисту удобнее читать будет, то компиллятор понять не сможет?

                                Программист должен знать язык, на котором кодит.

                                Цитата H.Iglesias II @
                                а что здесь непонятного? Чем тут with поможет?

                                Всё очень даже понятно - претензии в понятности with высосаны из пальца, данная оператор не более непонятен, чем любой другой любого другого языка.

                                Цитата H.Iglesias II @
                                никаких вопросов "относится foo или bar к object?" не возникает

                                :lool: :lool: :lool:
                                Вопросы см. выше, их не я задавал.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (117) « Первая ... 12 13 [14] 15 16 ...  116 117
                                Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0587 ]   [ 15 queries used ]   [ Generated: 15.08.25, 04:13 GMT ]