1. C# / Говнокод #16649

    +135

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    public string ExportToFile(string filename, string filepath, DataSet dsInput)
     {
         string sFlag = "Error";
         System.IO.StreamWriter sw = new StreamWriter("");
         try
         {
             if (filename.Trim() != "" && filepath != "" && dsInput.Tables[0].Rows.Count != 0)
             {
                    sw = new System.IO.StreamWriter(filepath + filename + ".xls");
                     int iCol = dsInput.Tables[0].Columns.Count;
                     for (int i = 0; i < iCol; i++)
                     {
                         sw.Write(dsInput.Tables[0].Columns[i]);
                         if (i < iCol - 1)
                         { sw.Write("\t"); }
                     sw.Write(sw.NewLine);
                     foreach (DataRow dr in dsInput.Tables[0].Rows)
                     {
                         for (int i = 0; i < iCol; i++)
                         {
                             if (!Convert.IsDBNull(dr[i]))
                             {
                                 sw.Write(dr[i].ToString());
                             }
                             if (i < iCol - 1)
                             { sw.Write("\t"); }
                         }
                         sw.Write(sw.NewLine);
                     }
                     sw.Close();
                     sFlag = "Success";
                 }
             }
             return sFlag;
         }
         catch (Exception)
         {
             return sFlag;
         }
     }

    С какого-то китайского сайта:
    http://www.datazx.cn/Forums/en-US/2d129cdc-2705-4035-90e2-063c4c399ae5/action?threadDisplayName=wpf-datagrid-remove-whitespace-from-string-on-clipboard-copy&forum=wpf
    Нафиг эксепшены, лучше вернем строку "Error"! Ну или "Success", если этот чудо-код еще и не грохнется.

    Запостил: yamamoto, 05 Сентября 2014

    Комментарии (45) RSS

    • Спасибо дружище, название переменных умиляет. Ещё когда учился, то училка опыт которой в промышленном программровании ноль, говорила называть переменные с первой буквой типа, который она содержит, при этом в строго типизированных языках ;)
      Ответить
      • Только автор оказался непоследовательным: filename и filepath почему-то без буквы «s».
        Ответить
      • ну так и делают что было понятно что за хрень там написана. с утиной типизацией смысла не имеет.
        Ответить
        • > с утиной типизацией смысла не имеет.
          Orly? Имхо, осмысленность этой венгерской херни совершенно не зависит от языка и типизации. А если подумать - для утиной она даже полезней, т.к. никакой инфы о типах помимо документации там нет, а что попало передавать никто не разрешал.
          Ответить
          • typeof юзать. А какой смыл называть переменную intX если там может быть и число или строка. Лучше называть переменные более информативно.
            Ответить
            • У меня typeof в мозг не вкомпилен...

              Мы же обсуждаем точку зрения человека, а не рантайма.
              Ответить
        • И немного по поводу утиной тупизации - как же я ее ненавижу... Особенно после событий прошлой недели.

          Копаться в проекте в 25k LOC с неявной питуизацией, без доки по классам/методам (включая приватные) - злейшему врагу не пожелаю такой участи...
          Ответить
          • >>Копаться в проекте в 25k LOC

            в библиотеке конгресса?!!!
            Ответить
            • Нет, всего лишь небольшой опенсурсный демонёнок на питоне.

              > в библиотеке конгресса
              Она такая маленькая? Фи.
              Ответить
              • Low orbit cannon?
                Ответить
              • даже комментов нет?
                Ответить
                • > опенсурсный
                  > даже комментов нет?
                  Это риторический вопрос.

                  А вообще - в main'е есть годный и большой вводный коммент с описанием архитектуры, но его малость недостаточно. Остальные комменты - по мелочи, в сложных местах.

                  P.S. В принципе, я ничего не имею против такого стиля документирования. Я и сам почти всегда так делаю - большой вводный коммент по модулю + подсказки в сложных местах. И на языках со статической типизацией этого более чем достаточно...
                  Ответить
                  • >>P.S. В принципе, я ничего не имею против такого стиля документирования. Я и сам почти всегда так делаю - большой вводный коммент по модулю + подсказки в сложных местах. И на языках со статической типизацией этого более чем достаточно...

                    Грамотный код не нуждается в комментариях и документации. вот только писать такой код могут не только лишь все....
                    Ответить
                    • > вот только писать такой код могут не только лишь все....
                      А читать - тем более.
                      Ответить
                      • в чем проблема читать красивый код? типа душа все равно просит говна?
                        Ответить
                        • Да в том же, в чем и некрасивый.

                          Нету хотя бы краткой доки по рахитектуре и идеям - читай весь код @ восстанавливай мысли автора. А влом же.
                          Ответить
                          • >>Да в том же, в чем и некрасивый.

                            ну это уже проблема компетентности программиста. может он больше поломойка чем программист

                            >>Нету хотя бы краткой доки по рахитектуре и идеям - читай весь код @ восстанавливай мысли автора. А влом же.

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

                            С другой же стороны если код адовый и был писан бухим марсианином - никакая документация не поможет
                            Ответить
                        • > в чем проблема читать красивый код?

                          В том, что его нужно читать. У меня лично мало желания читать тыщи строк кода на каждый чих. Хороший код обычно можно и не комментировать (в основном за счёт правильных имён, а выбор правильных имён, как известно, является одной из двух основных проблем в информатике), но вот любые интерфейсы нужно документировать тщательно.

                          Ну и один из самых лучших видов документации - примеры использования для типичных сценариев.
                          Ответить
                          • >>Диаграмма классов, краткое описание модулей, классов и паблик методов - норм.

                            мне обязательно было дописывать интерфейсы, проперти, енумы и т.д?
                            Ответить
                            • Диаграмма классов ни нужна. только для ЧСВ разраба. Описание интерфейсов.
                              Ответить
                              • ER модель бд тоже нинужна?
                                Ответить
                              • Это, если проект небольшой.

                                http://root.cern.ch/root/htmldoc/TPad.html - и так без бутылки не разберёшься, но если бы не было той маленькой диаграммки, понадобился бы ящик.
                                Ответить
                            • > интерфейсы, проперти, енумы и т.д?

                              Я имел в виду интерфейсы в широком смысле, не в узком. Любые интерфейсы, границы библиотек, модулей, протоколы, etc.
                              Ответить
                  • Мне иногда, особено под вечер, становится в тягость что-то значимое в код вносить, а до боя курантов еще час-полтора осталось. Я в такой ситуации в артист-мод рисую всякие схемы-чертежи того, как то что я написал работает. Или пилю документацию в Латексе, даже не потому, что кто-то будет читать (практически наверняка не будет), а потому, что в Латексе красиво получается.
                    Ответить
                    • Говорят, что латеховцы очень злятся, когда продукт так называют.
                      Ответить
                      • А нефиг было x вместо h писать.
                        Ответить
                      • Не знаю, я по-русски вслух не говорил уже лет пять минимум... а с людьми занимающимися Латексом - вообще никогда. Вообще, технология называется "тэк", "латек" - это набор макросов для "тэка", типа как Ява и Ява для тырпрайза. Но я еще не встречал кого-то, кто-бы как-то по-особенному реагировал на разные варианты произношения.
                        Ответить
                        • Да это так же как питон и пайтон. Пока фанбои спорят, как он правильно читается, остальные просто юзают его.
                          Ответить
                        • Insiders pronounce the χ of TeX as a Greek chi, not as an ‘x’.
                          Ответить
                • P.P.S. Ну и я, конечно же, сгущаю краски. За пару-тройку дней я внёс в этот код все нужные нам изменения - так что всё норм, проект был неплохого качества, хоть и сыроват немного, и функции по 100-150 строк напрягали...

                  Просто с явной типизацией я бы это сделал быстрее.
                  Ответить
                  • Совсем не показатель. У нас клиентская часть восновном пишется на АС3 - т.е. статическая типизация, пусть и довольно убогая, но тем не менее, и сервер - Джанго.
                    В код сервера я заглядываю достаточно редко - это не моя работа, - только когда нужно обновить локальную среду разработки, мигрировать таблицы, добавить недостающие шаблоны и т.п. Не смотря на то, что Джанго сам по себе не маленький, и наши написали там еще кучу всего, как правило, я довольно быстро справляюсь с настройками.
                    Флешевая часть написана с использование Флекс + ПурЭмВэЦе, писатели смогли так запутать все ходы и выходы, что после полгода работы я просто забил на ту чать проекта, за которую мне не отвечать. Чтобы объяснить почему так получилось, представим типичный пример использования:

                    facade.sendNotification(GlobalConstants.SOME_CONSTANT, new SomeData());


                    где-то хз. где:

                    registerNotifications([GlobalConstants.SOME_CONSTANT, ...]);


                    и где-то там же:

                    function handleNotifications(notification:Notification):void {
                        switch (notification.type) {
                            case GlobalConstants.SOME_CONSTANT: ...;
                            ...
                        }
                    }


                    Т.е. от того, что все типы проставлены, никому легче не стало. Типы не предохраняют от ошибок типа registerNotifications() случилось после того, как facade.sendNotification(). Более того, типы не описывают смысл происходящего в приложении - от того, что я знаю какой тип у GlobalConstants.SOME_CONSTANT, или у SomeData ровным счетом ничего не меняется - мне это не дает никаких преимуществ в смысле поиска зависимостей и понимания смысла происходящего.

                    Т.е. у типов есть возможность их использовать для того, чтобы сделать код более понятным, но их использование само по себе не реализует эту возможность. В конце концов можно написать всю программу используя только численные типы, или, например, только числа и хеш-таблицы. От того, что типы будут проверены на этапе компиляции такая программа лучше не станет.
                    Ответить
          • ну обычно перед классом пишут чего нибудь. перед методами тоже.
            Ответить

    Добавить комментарий