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

    +121

    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
    /// Разрезать строку на части длиной не более maxRecordLen
      private static void splitText(ref List<string> splitTextArray,  string text) {
        splitTextArray = new List<string>();
        for (; ; ) {
          try {
            string str = text.Substring(0, maxRecordLen);
            splitTextArray.Add(str);
            try {
              text = text.Substring(maxRecordLen);
            }
            catch (Exception) {
              break;
            }
          }
          catch (Exception) {
            splitTextArray.Add(text);
            break;
          }
        }
      }

    no comment.

    Запостил: diimdeep , 17 Июля 2013

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

    • мракобесье какое-то. оно вообще работает?
      Ответить
    • Исключительный код!
      Ответить
    • >ref List<string> splitTextArray
      Блядь, нечисть с сишки пришла. Запретить бы нахуй byref, зачем он вообще нужен?
      Ответить
      • Запрещать тоже не стоит. Вон в жабе его нет... так думаешь помогло? :)
        А вот хуй, вот такое говно ваяют:
        int[] ref = new int[1];
        some_func(ref);
        делаем_что_нибудь с ref[0];
        Так что не в рефе дело, а в тех, кто юзает его без повода.

        Тут что-то похожее на ситуацию с goto в сишке - если все время юзать, получится лапша, но если в меру, то от него только профит.

        P.S. Я ни в коем случае не оправдываю ref в данной ситуации. Тут однозначно надо было возвращать этот список через return.
        Ответить
      • например, если нужно получить 2 объекта.
        private bool ParseSelectedDates(ref DateTime sDate , ref DateTime eDate) {
                try {
                    if (string.IsNullOrEmpty(this.dpStartDate.Text) && string.IsNullOrEmpty(this.dpEndDate.Text))
                        return false;
                    CultureInfo c = new CultureInfo("ru-RU");
                    sDate = DateTime.Parse(this.dpStartDate.Text, c);
                    eDate = DateTime.Parse(this.dpEndDate.Text, c);
                    return true;
                } catch {
                    base.ShowBlickMessage(bm, Resources.Common.Error + ": Укажите обе даты в корректном формате (dd.mm.yyyy)", true, true);
                    this.updBm.Update();
                    return false;
                }
            }
        Ответить
        • Может, лучше out?
          А то так ненароком можно и пропустить инициализацию в блоке catch {...}
          Ответить
        • > например, если нужно получить 2 объекта
          В данном случае можно инкапсулировать обе даты в какой-нибудь DateRange, и снабдить его необходимыми методами - проверку на вхождение даты в диапазон и т.п. Код станет понятней и чище. :) И так почти всегда...

          Случаев, когда действительно необходимо вернуть 2 объекта не так уж много.

          P.S. А показывать сообщения в ParseЧтоНибудь это какой-то пиздец, простите.
          Ответить
          • >В данном случае можно инкапсулировать обе даты в какой-нибудь DateRange
            Это ODS для ASP.NET грида, в котором и так все поля по полочкам лежат :) просто, я передаю в этот метод два этих поля. А после этого поля в хранимую процедуру.

            >P.S. А показывать сообщения в ParseЧтоНибудь это какой-то пиздец, простите.
            сообщения показываются не в Parse. у пользователя появляется всплывающее уведомление, если он не стал пользоваться jQuery DatePicker'ом, и решил руками вписать даты - ему будет показано сообщение, что эти даты не удалось распарсить.

            или я неправильно понял суть проблемы? =)
            Ответить
        • Есть же Tuple а еще лучше сделать POCO и это можно вернуть из метода, ref out зло
          Ответить
          • > сделать POCO
            +1
            Если уж диапазон дат парсят, то скорее всего и передавать его потом будут в кучу мест, и проверять даты на вхождение в него, проверять интервалы на пересечение... И объект уберет кучу сопутствующего этим действиям говнокода.
            Ответить
          • Или Nullable<KeyValuePair<DateTime, DateTime>>.
            Но в этом коде лучше всётаки через Boolean. Т.к. при ошибки парса что-то делается с UI.
            DateTime start,end;
            if(ParseSelectedDates(out start,out end)) {...}
            Ответить
            • примерно так и работает
              if (ParseSelectedDates(ref sDate, ref eDate)) {
                          arg.isDateCkecked = true;
                          arg.StartDate = sDate;
                          arg.EndDate = eDate;
                      } else {
                          arg.isDateCkecked = false;
                      }
              Ответить

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