На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (4) 1 2 [3] 4  все  ( Перейти к последнему сообщению )  
> считывание из файла чисел формата double
    Цитата _lcf_ @
    ну почти в любом коде-стайле есть какое-то соглашение на этот счёт, у нас стандартное m_
    да, и чистых сей у нас не так много, кутэ + куча своих враперов.

    Повторюсь, у нас нельзя использовать префиксы, в любом виде. У нас любой префикс - признак низкоуровневой библиотеки, а в таких библиотеках свои наборы соглашений.
    Цитата _lcf_ @
    и что-то я, блин, не вижу там обилия :: как и не страдаю от отсутствия каких-то подсказок

    Это скорее исключение из правил. Твои слова можно легко подтвердить или опровергнуть, для этого достаточно посадить за ваши исходники нового программиста, и посмотреть как он будет осваиваться в этом проекте. По его реакции и можно судить о том есть ли реальные страдания в процессе программирования или нет)
      Цитата VisualProg @
      для этого достаточно посадить за ваши исходники нового программиста, и посмотреть как он будет осваиваться в этом проекте

      ну я кагбэ 4 месяца тут работаю :)
        Цитата _lcf_ @
        ну я кагбэ 4 месяца тут работаю

        :o Если у тебя нет ни к чему притензий, значит проект действительно хорошо спроектирован. У меня же по чужим исходникам могут возникать различные вопросы, особенно когда под рукой нет полноценной IDE. Значит я просто не имею такого опыта в разработке как у тебя)
          Цитата _lcf_ @
          помоему это паранойя :) вспомнился анекдот про еврея, десять замков и цепочку. может оно, конечно, и правильно, но как по мне так избыточно.

          Это не паранойя, это здравый смысл, потому как потом, когда ты откроешь незнакомый тебе код и увидишь что то типа:
          ExpandedWrap disabled
            SomeMethod(...)
            {
               auto t = now();
               ...
               return t;
            }

          То будешь долго морщить лоб, и гадать - ээээ, а что такое now, и какого это все типа, и откуда это все взялось. Т.е. когда ты вот так открываешь неймспейсы, ты сразу в несколько раз ухудшаешь читабельность кода.

          Цитата _lcf_ @
          вот с точки зрения компиля аргумент интересный, но я в этом не силен. типо явное указание пространства как-то ускоряет парсинг, сокращает время сборки или что?

          Скорее просто компилятор отбросит весь мусор, который не подключен через пространство имен. А если подключит, то может не отбросит, ну и когда ты пишешь явно пространство имен, ты избегаешь колизий. Плюс читабельность кода возрастает в несколько раз.
          Вот например во многих конторах любят переписать работу со строками/потоками под себя, или еще с чем то, а потом ты сидишь и думаешь стандартный это класс или свой внутренний. Ясно что стандартный вроде, но иногда это здорово запутывает. А когда явно пишешь std::string, то сразу видно откуда он взятый.
            Цитата KILLER @
            Вот например во многих конторах любят переписать работу со строками/потоками под себя, или еще с чем то, а потом ты сидишь и думаешь стандартный это класс или свой внутренний. Ясно что стандартный вроде, но иногда это здорово запутывает. А когда явно пишешь std::string, то сразу видно откуда он взятый.


            Или стандартные коллекции со своими thread-safe плюшками :D
            Сообщение отредактировано: VisualProg -
              Цитата VisualProg @
              Если у тебя нет ни к чему притензий, значит проект действительно хорошо спроектирован.

              я не говорил, что претензий нет вообще, я говорил за неймспейсы ;)
              Цитата VisualProg @
              У меня же по чужим исходникам могут возникать различные вопросы,

              ну и опять же когда совсем туго есть тимлид.
              Цитата KILLER @
              когда ты откроешь незнакомый тебе код и увидишь что то типа:

              Цитата KILLER @
              То будешь долго морщить лоб, и гадать - ээээ, а что такое now

              эм, ну такое сплошь и рядом, ctrl+клик - в чём проблема? :-?
              ну а переписывать стандартные функции с тем же именем - это первая глупость. вторая - использовать их без явного указания пространства.
              Сообщение отредактировано: _lcf_ -
                Цитата _lcf_ @
                эм, ну такое сплошь и рядом, ctrl+клик - в чём проблема?

                Ну выдаст тебе 4-5 разных реализаций now с разных библиотек, включая стандартную, какую нибудь бустовскую, еще какую нибудь внутрению и еще парочку с каких нибудь ATL/MFC, и сиди думай - какая из них вызовется. Да, может ты догадаешься какая из найденных используется в твоем случае, но и время потеряешь. А если у тебя будет сразу указано откуда это взялось - тебе достаточно посмотреть на эту написанную строку, и не нужно ничего гадать и искать.
                  какой заяц, какой орёл, какая блоха!? (С)
                  вот не бывает у меня таких ситуаций почему-то, ну или я их не запоминаю... почему-то мне кажется, что если такая ситуация возникла, то надо давать пинка лентяйм-любителям auto, чтобы явно писали, что они вызывают.

                  Добавлено
                  и чем, кстати, запись:
                  ExpandedWrap disabled
                    auto d = blabla::some::get_iterator ();

                  будет отличаться от:
                  ExpandedWrap disabled
                    blabla::some::iterator d = get_iterator ();
                  Сообщение отредактировано: _lcf_ -
                    Цитата _lcf_ @
                    почему-то мне кажется, что если такая ситуация возникла, то надо давать пинка лентяйм-любителям auto, чтобы явно писали, что они вызывают.

                    ну или любителям открывать неймспейсы :D :rolleyes:

                    Добавлено
                    Цитата _lcf_ @
                    и чем, кстати, запись:

                    У Майерса написано что auto предпочтительнее, так как тип данных задает компилятор и он будет максимально соответствовать тому, что ты присваиваешь. А сам ты можешь написать так, а например iterator() у тебя возвращает какой нибудь константный объект.
                    Или например как любят писать некоторые:

                    ExpandedWrap disabled
                      std::vector<int> vint;
                      vint.push_back(1);
                      for( int idx = 0; idx < vint.size(); ++idx)
                      {
                      ...
                      }

                    Вот тут уже будет трабла, варнинг какой нибудь, а если ты напишешь так:
                    ExpandedWrap disabled
                      std::vector<int> vint;
                      vint.push_back(1);
                      for( auto idx = 0; idx < vint.size(); ++idx)
                      {
                      ...
                      }

                    То траблы не будет. В первом случае у тебя небезопасное преобразование из size_t(который unsigned int) в int, во втором случае все ок, idx будет типа size_t.
                    Ну и сокращает написание вот этих вот blabla::some::iterator d до 4 букв.
                      Цитата KILLER @
                      Вот тут уже будет трабла, варнинг какой нибудь,

                      фиксить надо. весьма рад, что на новой работе ворнинги запрещены. заелся на старой среди туевой хучи ворнингов искать еррор из-за которого не компилиться. причем ворнинги как раз похожие и были:
                      compare signed/unsigned, unused parameter...
                      Цитата KILLER @
                      Ну и сокращает написание вот этих вот blabla::some::iterator d до 4 букв.

                      ничего не сокращается, просто из левой части в правую переезжает.
                        Цитата _lcf_ @
                        ничего не сокращается, просто из левой части в правую переезжает.

                        В каком смысле из левой в правую переезжает? В правой части оно всегда почти есть, а в левой тебе или тип придется писать или auto или извращаться со всякими typedef'ами.
                        Например вот есть вот такой код:
                        ExpandedWrap disabled
                          std::map<std::string, std::vector<std::string>> GetCategories(const std::string& CatId)
                          {
                          }
                           
                          int main()
                          {
                              auto categories = GetCategories(CatId);
                              for(auto It = categories.begin(); It != categories.end(); ++It)
                              {... }
                          }

                        Попробуй переписать без auto.

                        Добавлено
                        Ну и самое наверное хорошее что несет в себе auto, это то, что если вдруг изменится тип, то по сути ничего переписывать не придется, ну если он конечно не кардинально изменился.
                          киля, дыва таки даёт о себе знать :)
                          Цитата KILLER @
                          Ну выдаст тебе 4-5 разных реализаций now с разных библиотек,

                          где в твоем куске кода какие-либо неймспейсы из которого вылазит GetCategories :whistle:

                          Добавлено
                          против auto я ничего не имею, кроме случаев, когда он порождает неоднозначность.
                            Цитата _lcf_ @
                            где в твоем куске кода какие-либо неймспейсы из которого вылазит GetCategories :whistle:

                            Ты тоже чтоль дыва пыхнул? :D
                            Ты перечитай о чем идет речь.
                            Смотри ты пишешь чем отличается написание: auto iterator = lala от trololo::lolo::bugaga iterator = lala;
                            Я тебе пишу тем то и тем то, плюс ко всем не нужно писать огород из всех этих trololo::lolo::bugaga, достаточно написать 4 буквы.
                            Ты мне в ответ написал что ниче там не сокращается, а " просто из левой части в правую переезжает. "
                            Я твоего ответа не понял, переспросил что ты имеешь ввиду и привел тебе пример. Причем тут вложенные неймспейсы?

                            Добавлено
                            при работе с итераторами в STL, основная проблема в ненаписании вложенных неймспейсов типа там std::chrono, основная проблема написать вот такие вот конструкции как выше, аля:
                            std::map<std::string, std::vector<std::string>>::const_iterator мать его.
                            Тут ты уже ниче не откроешь чтоб сократить запись до пары символов, тут придется или auto писать или какой нибудь typedef.

                            Добавлено
                            Я могу понять, когда некоторые называют свои пространства имен как хз кто, типа там:
                            ExpandedWrap disabled
                              namespace This_is_my_mega_super_puper_namespace
                              {}

                            Тогда да, задолбаешься такое набирать на каждой строчке. А когда неймспейс состоит из 2-4 символов, это только помогает быстро писать, с помощью того же автокомплитера и подсказок. Особенно когда у тебя куча всяких неймспейсов, а как там называется класс ты не помнишь, но помнишь первые несколько букв или даже слово.
                              Цитата KILLER @
                              Смотри ты пишешь чем отличается написание: auto iterator = lala от trololo::lolo::bugaga iterator = lala;

                              :no:
                              начинай сначала...
                              Цитата KILLER @
                              auto t = now();

                              Цитата KILLER @
                              Ну выдаст тебе 4-5 разных реализаций now с разных библиотек

                              то есть, подразумевалось, что надо написать:
                              ExpandedWrap disabled
                                auto t = some::foo::bar::now ()

                              так?
                              тогда я и спрашиваю, а чем, собсено, эта запись отличается от:
                              ExpandedWrap disabled
                                some::foo::bar::value_of_now t = now ();
                              Сообщение отредактировано: _lcf_ -
                                Тем, что во втором случае ты с лева почемуто написал всю цепочку неймспейсов, а now вызвал почему то без перечисления неймспейсов. А вообще выше я вроде ответил уже.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (4) 1 2 [3] 4  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0589 ]   [ 17 queries used ]   [ Generated: 18.04.24, 22:05 GMT ]