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

    +132

    1. 1
    System.Console.WriteLine(System.String.Concat(System.Security.Cryptography.MD5.Create().ComputeHash(System.Text.Encoding.UTF8.GetBytes("hello world!")).ToList().ConvertAll(b => b.ToString("x2"))));

    страшно?

    Запостил: daymansiege, 07 Ноября 2011

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

    • В чем гавно-код?
      Console.WriteLine(
          String.Concat(
              MD5.Create().ComputeHash(
                  Encoding.UTF8.GetBytes("hello world!")
               )
               .ToList()
               .ConvertAll(b => b.ToString("x2"))));


      Вот так чуть правильнее:

      Convert.ToBase64String(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes("hello world!")));
      Ответить
      • показать все, что скрыто>В чем гавно-код?
        В "лиспободобной" структуре кода. Правильно: Одна строка - одно действие.
        Ответить
        • показать все, что скрыто>Правильно: Одна строка - одно действие.
          Ты ёбнутый.
          Ответить
        • с чего вдруг? у вас монитор 400х300 и 12"?
          Ответить
          • о понятном и легко поддерживаемом коде(даже обезьянами) ты, конечно, не слышал?
            Ответить
            • команда-в-строку != понятный и легко поддерживаемый код

              расстояние между этими понятиями - парсек
              Ответить
              • Ну как бы рекомендуют так делать. "Clean Code" тот же, да и Макконнелл. А "оплотом" понятного кода мастера считают промежуточные переменные с descriptive-именами.
                Ответить
              • >расстояние между этими понятиями - парсек
                Если в строчке будет более одной команды, то там уже на порядок больше парсеков. С каждой лишней командой в одной строчке - вероятность обезьянке разобраться в коде за приемлемое время - уменьшается.
                Ответить
                • //Одна строка - одно действие.
                  Console.WriteLine( //одно  действие - вывод на экран
                      String.Concat(      //одно  действие - конкатенация
                          MD5.Create().ComputeHash(  //одно  действие - пощитать хеш
                  //итд...
                              Encoding.UTF8.GetBytes("hello world!")
                           )//0 действий
                           .ToList()
                           .ConvertAll(b => b.ToString("x2"))));


                  >даже обезьянами
                  Тебе в раздел с названием PHP, быдло. И там записывай себе одну итерацию, одной строкой.

                  >С каждой лишней командой в одной строчке - вероятность обезьянке разобраться в коде за приемлемое время - уменьшается.

                  То есть с тысячей строк ассемблерного кода абизьяне вроде тебя просто разобраться?
                  Ответить
                  • >//Одна строка - одно действие.
                    >//итд...
                    ты не верно оформил. Каждый результат отдельного действия нужно записать в отдельную переменную с говорящим именем
                    это основы самодокументирующегося кода

                    почитай Совершенный код Макконела на досуге
                    Ответить
                    • А отдельную итерацию цикла одной строкой в отдельную переменную с говорящим именем для лушей документируемости кода, не?

                      >Совершенный код Макконела
                      Не всё написанное там стоит принимать за чистую монету.
                      Ответить
                • ключевое слово - разобраться
                  касательно обезьянок - кто бы спорил
                  жить и писать код исходя из worst case - как-то глупо
                  Ответить
                  • а меня в школе на уроках математики учили: надейся на лучшее, расчитывай на худшее
                    Ответить
                    • Чет меня каким-то пределам да функциям учили, нелюди
                      Ответить
                      • (in-package :sarcasm)
                        не, меня в школе учили только тому, что реально в жизни пригодится
                        Ответить
        • >Одна строка - одно действие.
          Пшол нах, lucidfoxGovno.
          Ответить
      • Да, пожалуй, если убрать неймспейсы, добавить символов перевода строки - все намного красивей...
        На счет "ToBase64String" - результаты немного разные: "fc3ff98e8c6a0d3087d515c0473f8677" и "/D/5joxqDTCH1RXARz+Gdw==" соответственно :)
        Ответить
        • да, действительно. md5-хеш оканчиващийся на == выглядит более правдоподобно. так что я теперь даже не знаю что ОП имеет в виду
          Ответить
          • Не осмелюсь утверждать, что правильно понял Ваш комментарий. Вы думаете, что хеш лучше выглядит как Base64 строка?
            Согласно спецификации он должен быть представлен набором 128-ми бит и в подавляющем большинстве случаев представляется 32-ух символьной строкой из шестнадцатеричных цифр (например, "fc3ff98e8c6a0d3087d515c0473f8677").
            Лично я в виде Base64 никогда не встречал.
            Ответить
            • в общем, да, вы правы
              но для хранения и передачи х-битного массива его удобно заворачивать в строку, для этого чаще всего применяется base64
              гугл не против такой точки зрения http://www.google.com/search?q=md5+base64
              Ответить
              • Возможно и на самом деле удобней :)
                Просто не встречал дайджест в виде Base64.
                Ответить
            • Представить 128 бит можно как угодно, хоть в виде чёрно-белой картинки. Только у вас уж очень неправдоподобный результат.
              Ответить
      • неймспейсы объявлять надо и код будет на 90% короче и намного читабельнее
        Ответить
        • если неймспейс используется 1-2 раза то общепринятый стиль его не испортировать
          Ответить
    • Хех, к сожалению, код в функциональном стиле выглядит красиво только в тех языках, которые изначально проектировались для поддержки функциональных фишек.
      Ответить
      • (System.Text.StringBuilder(), "hello world!"B |> System.Security.Cryptography.MD5.Create( ).ComputeHash) ||> Array.fold (fun builder hashByte -> builder.Append(hashByte.ToString("x2"))) |> string |> System.Console.WriteLine

        неужели так лучше? :)
        Ответить
        • Конечно, нет! ОДНИ ФЛАЖКИ КАК ЭТО МОЖЕТ РАБОТАТЬ ВООБЩЕ АЛАЛАЛАХ АКККК тьфу бля заикаюсь БААР
          Ответить
          • Ну, собственно, сабж об этом :)
            Естественно, что читабельней было бы вот так:

            open System
            open System.Security.Cryptography
            open System.Text

            let getHash (inputBytes : byte array) =
            (StringBuilder(), inputBytes
            |> MD5.Create().ComputeHash)
            ||> Array.fold (fun builder hashByte -> builder.Append(hashByte.ToString("x2")))
            |> string

            getHash "hello world!"B |> System.Console.WriteLine
            Ответить
    • из-за таких длинных цепочек a.b.c.d.e() нифига не читается
      Ответить
    • Вот что ооп животворящее делает)
      Ответить
      • есть такая пословица: дай дураку хер стекляный в руки - он и хер разобьет и руки порежет. и ооп сдесь не при чем.
        Ответить

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