На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: ANDLL, ALXR
  
> Отступы, отступы, отступы.., Any
   
Читаем первое сообщение и выбираем!
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    Разгребая по долгу работы чужой код, задумался над вопросом предпочтения разработчиками определённого стиля расстановки отступов.
    Выделил несколько наиболее ярких стилей, которые мне повстречались, и свёл их на примере описания класса

    Итак,
    1.
    ExpandedWrap disabled
      class MyFavoriteIndentationStyle
      {
      public:
          MyFavoriteIndentationStyle(unsigned short* arg1, int arg2, std::string& arg3, verylongenumtype arg4);
          ~MyFavoriteIndentationStyle();
          
          static bool Foo1(int arg1, void* arg2);
          virtual verylongenumtype Foo2();
          
      private:
          bool m_bFoo1;
          unsigned int m_nVeryLongFoo2;
      }


    2.
    ExpandedWrap disabled
      class MyFavoriteIndentationStyle
      {
      public:
          MyFavoriteIndentationStyle(
              unsigned short* arg1,
              int arg2,
              std::string& arg3,
              verylongenumtype arg4);
          ~MyFavoriteIndentationStyle();
          
          static bool Foo1(int arg1,
              void* arg2);
          virtual verylongenumtype Foo2();
          
      private:
          bool         m_bFoo1;
          unsigned int m_nVeryLongFoo2;
      }


    3.
    ExpandedWrap disabled
      class MyFavoriteIndentationStyle
      {
      public:
          MyFavoriteIndentationStyle(
              unsigned short*     arg1,
              int                 arg2,
              std::string&        arg3,
              verylongenumtype    arg4);
          ~MyFavoriteIndentationStyle();
          
          static bool Foo1(
              int                 arg1,
              void*               arg2);
          virtual verylongenumtype Foo2();
      private:
          bool            m_bFoo1;
          unsigned int    m_nVeryLongFoo2;
      }


    4.
    ExpandedWrap disabled
      class MyFavoriteIndentationStyle
      {
      public:
          MyFavoriteIndentationStyle      (unsigned short* arg1,
                                           int arg2,
                                           std::string& arg3,
                                           verylongenumtype arg4);
          ~MyFavoriteIndentationStyle     ();
          
          static bool                 Foo1(int arg1,
                                           void* arg2);
          virtual verylongenumtype    Foo2();
          
      private:
          bool                        m_bFoo1;
          unsigned int                m_nVeryLongFoo2;
      }



    Наверняка найдётся много тех, кто использует часть оформления из одного варианта, часть из другого. В этом случае просьба голосовать за наиболее близкий
    А если уж совсем не совпало, тогда см. последний вариант выбора
    Сообщение отредактировано: B.V. -
    char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
    for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


    user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
      1, превращающийся в 2 при большом числе аргументов.
      Подпись была включена в связи с окончанием срока наказания
        Проголосовал за 1. В действительности public/private у меня тоже отделены от левого края на пару пробелов/Tab.
          Цитата OpenGL @
          1, превращающийся в 2 при большом числе аргументов.

          :victory:
          Аналогично :)

          Добавлено
          Цитата Славян @
          В действительности public/private у меня тоже отделены от левого края на пару пробелов/Tab.

          Да, сорри, этого не учёл. Такое тоже встречалось
          char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
          for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


          user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
            ExpandedWrap disabled
              class MyFavoriteIndentationStyle {
              public:
                  MyFavoriteIndentationStyle(unsigned short* arg1, int arg2, std::string& arg3, verylongenumtype arg4);
               
                  ~MyFavoriteIndentationStyle();
               
                  static bool Foo1(int arg1, void* arg2);
               
                  virtual verylongenumtype Foo2();
               
                  private:
                      bool m_bFoo1;
                      unsigned int m_nVeryLongFoo2;
              }
            Сообщение отредактировано: Gonarh -
              Цитата OpenGL @
              1, превращающийся в 2 при большом числе аргументов.

              Тоже самое. Еще бывает циклы и алгоритмы так же как во 2 - разношу если слишком длинная строка получается.
                Проголосил за "свой вариант". Но ближе вариант 3:

                ExpandedWrap disabled
                  class MyFavoriteIndentationStyle {
                    public:
                      MyFavoriteIndentationStyle(
                          unsigned short**** Arg1,
                                     int     ArgLong2,
                             std::string&    ArgLongLongLongLong3,
                        verylongenumtype     ArgLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLong);
                      ~MyFavoriteIndentationStyle();
                  }

                Форматирование аргументов в стиле киношных титров - новая фишка, пока экспериментирую.
                Мои программные ништякиhttp://majestio.info
                  ExpandedWrap disabled
                    // Интерфейс объектов синхронизации
                    class ISynkObject
                    {
                    public:
                      virtual DWORD lock  (DWORD=INFINITE)=0;        // блокировка
                      virtual BOOL  unlock()              =0;        // освобождение
                    };
                     
                    // Интерфейс объектов синхронизации для межпроцессного использования
                    // Захват и освобождение ресурса наследуются
                    class TIPSynk: public ISynkObject
                    {
                    protected:
                      HANDLE synkObject;
                     
                       TIPSynk()         : synkObject(INVALID_HANDLE_VALUE){}
                       TIPSynk(HANDLE so): synkObject(so)                  {}
                      ~TIPSynk() { if (synkObject != INVALID_HANDLE_VALUE) CloseHandle(synkObject); }
                     
                      // Присваивание существующего объекта (подсчёт ссылок ведёт ОС)
                      BOOL     assign(HANDLE src);
                     
                    public:
                      // получить объект синхронизации
                      operator HANDLE() const { return synkObject; }
                      // захват
                             DWORD lock(DWORD timeOut = INFINITE);
                      // множественное ожидание
                      static DWORD wait(BOOL all, DWORD timeOut, const std::vector<HANDLE>& synks);
                    };
                  Одни с годами умнеют, другие становятся старше.
                    О! Это ещё лучше:
                    ExpandedWrap disabled
                      // Простой врапер над IDispatch без использования ITypeInfo
                      class Wrapper
                      {
                      protected:
                        IDispatch *autoObj;   // указатель на интерфейс автообъекта; дать доступ производным классам
                       
                      private:
                        // простая обёртка над IDispatch::Invoke()
                        HRESULT AutoWrap(WORD autoType, Variant *result, const std::wstring& strName,
                                         const initializer_list& args = initializer_list());
                        // вспомогательная функция для чтения свойства
                        Variant OleProperty(const std::wstring& name, WORD action)
                        {
                          Variant x;
                       
                          AutoWrap(action, &x, name);
                          return x;
                        }
                        // вспомогательная функция для чтения/записи свойства с параметрами
                        Variant OleProperty(const std::wstring& name, WORD action, const initializer_list& args)
                        {
                          Variant x;
                       
                          AutoWrap(action, &x, name, args);
                          return x;
                        }
                       
                      public:
                        /* Конструктор указателем на интерфейс. obj должен быть не NULL.
                           Формально тут должен быть подсчёт ссылок, однако не все автообъекты увеличивают счётчик
                           одинаково, поэтому это оставлено производным классам. */
                        explicit Wrapper(IDispatch* obj): autoObj(obj)
                        {
                          if (autoObj == NULL) throw std::runtime_error("Automation: IDispatch is NULL");
                        }
                        /* Освободить автообъект. Уменьшение счётчика нужно делать всегда. */
                       ~Wrapper() { autoObj->Release(); }
                       
                        /* Вызов методов IDispatch.
                           res  - возвращаемое значение; может быть NULL, если не интересует;
                           name - имя метода для вызова;
                           args - набор параметров для метода;
                                  опционален, по умолчанию пуст, но если присутствует, параметры должны быть указаны
                                  в обратном порядке.
                           Возвращает признак успешного вызова. */
                        HRESULT OleMethod(Variant *res, const std::wstring& name, const initializer_list& args = initializer_list())
                        {
                          return AutoWrap(DISPATCH_METHOD, res, name, args);
                        }
                       
                        /* Чтение свойства IDispatch.
                           name - имя свойства.
                           Возвращает значение свойства. При ошибке вернёт VT_EMPTY, но отчитается в лог. */
                        Variant OlePropertyGet(const std::wstring& name)
                        {
                          return OleProperty(name, DISPATCH_PROPERTYGET);
                        }
                       
                        /* Чтение свойства IDispatch с параметром.
                           name - имя свойства.
                           Возвращает значение свойства. При ошибке вернёт VT_EMPTY, но отчитается в лог. */
                        Variant OlePropertyGet(const std::wstring& name, const initializer_list& args)
                        {
                          return OleProperty(name, DISPATCH_PROPERTYGET, args);
                        }
                       
                        /* Установка свойства IDispatch.
                           name - имя свойства.
                           При ошибке отчитается в лог, поведение свойства зависит от реализации IDispatch. */
                        void OlePropertyPut(const std::wstring& name, Variant val)
                        {
                          OleProperty(name, DISPATCH_PROPERTYPUT, initializer_list() << val);
                        }
                      }
                    Одни с годами умнеют, другие становятся старше.
                      Я не парюсь. Visual Studio сама делает нужные отступы.
                      А ешё у нее есть функция "Отформатировать доkумент".
                      Мои религиозные убеждения не позволяют мне комментировать код.
                      Моё мировоззренье таково: в программе комментария ни одного!
                        Цитата Qraizer @
                        О! Это ещё лучше:

                        А, собственно, чем?
                        char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
                        for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


                        user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                          Показательностью предпочтений.
                          Одни с годами умнеют, другие становятся старше.
                            А можно помечать, что это вы опять о своих плюсах, а?

                            ...потому что во всех современных языках давно уже есть стандарты :jokingly:
                            user posted image user posted image user posted image
                              Отсутствие пометки весьма явно указывает, что плюсы есть самый что ни на есть стандарт.

                              ...а "все современные языки" являются аки геи в гейропе :oops:
                                Цитата Serafim @
                                ...потому что во всех современных языках давно уже есть стандарты

                                В расте нет :)
                                Подпись была включена в связи с окончанием срока наказания
                                  Цитата OpenGL @
                                  В расте нет

                                  https://github.com/rust-lang-nursery/fmt-rfcs :whistle:
                                  user posted image user posted image user posted image
                                    Это к rustfmt же, и он настраивается. По такой логике и в плюсах есть стандарты - во всех IDE есть какой-то свой дефолтовый способ автоформатирования кода :whistle:
                                    Подпись была включена в связи с окончанием срока наказания
                                      Цитата Qraizer @
                                      ExpandedWrap disabled
                                        // Интерфейс объектов синхронизации для межпроцессного использования
                                        // Захват и освобождение ресурса наследуются
                                        class TIPSynk: public ISynkObject
                                        {
                                        protected:
                                          HANDLE synkObject;

                                      Может оказаться весьма удобным обернуть классом вот это:
                                      ExpandedWrap disabled
                                          HANDLE synkObject;
                                      Подпись была выключена в связи с наложенным заземлением.
                                        Цитата Serafim @
                                        потому что во всех современных языках давно уже есть стандарты

                                        ...Иногда дебильные. Например, отступы в два пробела в скале. Из-за таких "стандартов" код становится абсолютно нечитаемым - сливается в сплошную стенку.
                                        Сообщение отредактировано: Da$aD -
                                          Цитата Da$aD @
                                          ...Иногда дебильные. Например, отступы в два пробела в скале. Из-за таких "стандартов" код становится абсолютно нечитаемым - сливается в сплошную стенку.

                                          Да ладно, вроде норм. Всё равно при грамотной организации методы на 5-6 строк максимум получаются, да и вертикальную отбивку никто не запрещал.
                                          user posted image user posted image user posted image
                                            Цитата Da$aD @
                                            Цитата Serafim @
                                            потому что во всех современных языках давно уже есть стандарты

                                            ...Иногда дебильные. Например, отступы в два пробела в скале. Из-за таких "стандартов" код становится абсолютно нечитаемым - сливается в сплошную стенку.

                                            я б скалку назвал перлом 21го века со встроенным обфурскатором.
                                            Редкий язык ТАК поощряет производство нечитаемого кода. Если это образец "современного языка", то я лучше побуду ретроградом :)
                                            Сообщение отредактировано: negram -
                                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                            0 пользователей:


                                            Рейтинг@Mail.ru
                                            [ Script Execution time: 0,1924 ]   [ 19 queries used ]   [ Generated: 18.07.19, 13:22 GMT ]