Си диез / Говнокод #8443 Ссылка на оригинал

0

  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 daymansiege, (Updated )

Комментарии (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!")));
    Ответить
    • >В чем гавно-код?
      В "лиспободобной" структуре кода. Правильно: Одна строка - одно действие.
      Ответить
        • о понятном и легко поддерживаемом коде(даже обезьянами) ты, конечно, не слышал?
          Ответить
          • команда-в-строку != понятный и легко поддерживаемый код

            расстояние между этими понятиями - парсек
            Ответить
            • Ну как бы рекомендуют так делать. "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 - как-то глупо
                Ответить
                • а меня в школе на уроках математики учили: надейся на лучшее, расчитывай на худшее
                  Ответить
    • Да, пожалуй, если убрать неймспейсы, добавить символов перевода строки - все намного красивей...
      На счет "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
          Ответить
    • есть такая пословица: дай дураку хер стекляный в руки - он и хер разобьет и руки порежет. и ооп сдесь не при чем.
      Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8