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

    +141

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    public class ClassName : IMyInterfaceName
    {
        ...
        public IMyInterfaceName This
        {
            get { return this; }
        }
        ...
    }

    Дзен

    Запостил: Vadimyan, 29 Июля 2014

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

    • Собственно, Find usages ничего не нашёл, поэтому задумки автора я понять не смог.
      Ответить
      • Есть один фокус, когда оно надо, если не ошибаюсь.
        Ответить
    • Мы, царь всея руси
      Ответить
    • за то можно написать
      mph.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his.This.This.This.This.This.This.This.T his......This
      Ответить
      • 1000 строк в день!
        mph
          .This
          .This
          .This
          .This
          .This
          ....
        Ответить
    • this.varible 
      This.variable

      будут использовать разные переменные
      Ответить
      • this.variable
        Ответить
        • Чтоа? Не совсем понимаю мысль. Сравнение по ссылкам всё равно вернет True, все значения будут одинаковыми. Да и подозрительно выставлен наружу этот This.
          Ответить
          • http://ideone.com/PW6Y12
            Ответить
            • А, при явной реализации через IMyInterfaceName.Member - да, это из очевидных последствий. Не стал указывать в посте, что явной реализации не было чтобы не раздувать пример.
              По-моему, это всё смахивало бы на содомию.
              Ответить
            • А за такое почки вырезают. И вообще это уже говно именования, когда объект имеет два метода одинаково названных, но в совершенно разном контексте.
              Ответить
            • Тут можно руками скастить.
              Ответить
          • надо же снаружи как то обьект получать

            var knownObject = unknownObject.This;
            Ответить
            • unknown такой unknown, что аж ClassName. Который покладётся в переменную типа IMyInterfaceName, в коллекцию IMyInterfaceName, передстся в метод, принимающий IMyInterfaceName.
              Ответить
            • зачем ты пишешь var??? ЗАЧЕМ??? что тебе это дает?
              3 буквы, в описании типа, вместо его полного названия?

              ты никогда не думал о том ,как другие потом читают это? мне вот например не очень прикольно, когда я нахожу в интернете коды индусов, которые сука, на 100 строк 20 объектов используют с var, особенно когда это какой-нибудь factory pattern, и у них 50 интерфейсов и 100500 классов, которые наследуются друг от друга? вот классно дебаг запускать, и смотреть, что же в действительности скрывается под этим var
              Ответить
              • Может я еще из-за тебя венгерскую нотацию должен юзать? В студии при наведении на var показывается выведенный тип, если че.
                Ответить
                • Code review тоже в студии будешь проводить? Только не говори, что решарпер умеет выводить типы во время diff'а.
                  Ответить
                  • а почему нет? открыл отдельный файлик из проекта в студии и смотришь. Ай-ай-ай, как красиво

                    Даже если в блакнотике++ - тип переменной должен быть понятен из контекста и названия. Я же не виноват, что значащие переменные называют а
                    Ответить
                    • > открыл отдельный файлик из проекта в студии и смотришь
                      Ага, и созерцаешь весь код целиком, а не дельту, которую нужно было рассмотреть...
                      Ответить
                      • Товарищ борманд, уточните о чем мы говорим, я не совсем понимаю. Ну открыл весь код - никто же не заставляет его весь читать. Есть удобная навигация по классам, но методам, переходы к декларации.
                        Ответить
                        • > Товарищ борманд, уточните о чем мы говорим
                          Хех... Ну вот типичный случай для code review: ты дал коллеге-джуниору какое-то задание, он его выполнил и закоммитил результат в систему контроля версий. Тебе нужно посмотреть, что и как он замутил, ну и, возможно, что-то посоветовать или обсудить.

                          > открыл весь код
                          Ну и что дальше делаем? Глазками сравниваем старую и новую версии, юзая удобную навигацию по классам и методам? :)
                          Ответить
                          • тут да, согласен. Если он закамитил, а я сразу не посмотрел за его компом че он сделал
                            (Имхо-лучший вариант - приемник пиздюлей под боком ), то либо в VCS либо заставлять писать коменты "//Я ПИСАЛ КОД ЗДЕСЬ! ЗДЕСЬ!".

                            Я уже привык к var - в хорошем коде они нисколько не мешают.

                            Помню когда я последний раз сливал форки мне пришлось соседский код полностью переписывать(
                            Ответить
                            • >то либо в VCS либо заставлять писать коменты "//Я ПИСАЛ КОД ЗДЕСЬ! ЗДЕСЬ!".
                              это был сарказм?
                              Ответить
                            • > а я сразу не посмотрел за его компом
                              Ну ты ж не нянька, чтобы постоянно пялиться в монитор и смотреть чего он делает... У тебя и более интересные занятия есть. Пускай коммитит сколько влезет. Выдай ему отдельную репу-песочницу, а потом читай и перетаскивай его наработки в master.

                              > Помню когда я последний раз сливал форки мне пришлось соседский код полностью переписывать
                              Бывает... Просто заранее договаривайтесь, кто чего будет допиливать. Потом меньше проблем при мердже.
                              Ответить
                              • >>Ну ты ж не нянька, чтобы постоянно пялиться в монитор

                                не постоянно. В конце дня посмотрел че кого - дал указания че по чем. Ревизию все равно придется делать, лучше в присутствии человека чем в виде комментов
                                Ответить
                              • Есть же такой стиль типа парного программирования, или как там оно называется.
                                Ответить
                                • Экстремальное имеешь ты в виду?
                                  Ответить
                                  • > Экстремальное
                                    До последнего дня сёрфим инет, играемся, страдаем хуйней. В последний день садимся и пилим весь проект.
                                    Ответить
                                    • Это не экстремальное, это обычное
                                      Ответить
                                    • со мной работал коллега, говорил, что программистом стал по бразильской системе. когда в военкомат пришел, ему сказали - либо будешь у нас программистом, либо идешь в армию, и конечно же он выбрал первый вариант.
                                      вот и сидел он там с другими студентами, и писал софт, который будет подбирать им призывников по базе, которую конечно же им еще пришлось самим делать, так как про какие-нибудь SQL они тогда и не знали.
                                      что-то сломалось или заглючило - идешь в армию. норм мотивация такая =)
                                      Ответить
                                      • теперь у него рефлекс на всю жизнь - падать на пол, сворачиваться калачиком и кричать - не бейте, господин!
                                        Ответить
                                      • недавно собеседовали парня, который вместо нормальной армии отслужил год джава программистом
                                        только вместо книжек он, походу, устав зубрил
                                        Ответить
                                        • коры были? или только мрак пустоты бесконечности?
                                          Ответить
                                          • он был лишь живым подтверждением факта, что рабский труд по эффективности не превышает 1/10 от нормального
                                            за год мало чего сделал, и сам не вырос профессионально, отправили читать литературу

                                            теперь посматриваю в небо, вдруг очередной военный спутник мне на лысину упадёт
                                            Ответить
                                            • это не бага, это фича

                                              http://www.youtube.com/watch?v=Gnsp8fn-E9I
                                              Ответить
                                  • Даже не знаю, возможно. Я в таких извращениях не силён.
                                    Ответить
                                    • Там сам Фаулер руку приложил. Я бы занялся экстремальным программированием. Надо найти с кем
                                      Ответить
                                      • Так ведь доктор Стертор приглашал как-то покодить вместе.
                                        Ответить
                                        • Тогда не хотел. А может и в чем о стыдно было свой коддинг показывать)
                                          Ответить
                                      • > Надо найти с кем
                                        С коллегами. Ты работу нашел, кстати?
                                        Ответить
                                        • Временно летом работаю пекарем
                                          Ответить
                                          • > пекарем
                                            Играешь на ПеКа?
                                            Ответить
                                            • нет, хлеб пеку, белый, серый. 144 белого обычно и 30 серого. Иногда булочки
                                              Ответить
                                          • А на полную ставку чего не идёшь?
                                            Сейчас грамотных программеров не хватает, а у тебя голова хорошо варит.
                                            Ответить
                                            • Ах, не смущайте меня)

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

                                            http://habrahabr.ru/post/153225/

                                            Теперь и на хаскеле.
                                            OH SHI

                                            http://eax.me/haskell-bread-task/
                                            Ответить
                                            • Возьму на карандаш, классная статья.
                                              Ответить
                                            • >>Как джва программиста хлеб пекли
                                              Кстати а куда wvxvw подевался? Его интересно было читать
                                              Ответить
                                              • Наверное Стретор его увел. Кстати, сегодня перечитывал его пост про минусатор - 10 минут ржал как резанный
                                                Ответить
                                                • >перечитывал его пост про минусатор - 10 минут ржал как резанный
                                                  Что там смешного? Обычный раковый говнотред, коих тысячи.
                                                  Хотя о вкусах не спорят.
                                                  Ответить
                                                  • Я просто забыл, какой он - стертор. Думаю щас будет серьезный тред, а там... Первая половина, когда он обшался с нормальными людьми мне понравилось, а потом - мрак и тоска
                                                    Ответить
                                                    • >Я просто забыл, какой он - стертор.
                                                      Тред называется "Создание программного кода, автоматизирующего оценку пользователей, индуцированое перманентными болями в области ректума"
                                                      Ответить
                                        • > Ты работу нашел, кстати?
                                          Вы ему свою предлагаете?
                                          А, кстати... Можно же как тот мужик работу свою сплавлять разным кегданам с говнокодиков, а самому в это время писать комментарии. Если Вы так ещё не делаете.
                                          Ответить
                            • P.S. А еще бывает поза 69 взаимное review у равных по уровню. К примеру, чтобы твое изменение попало в master его должны одобрить еще 2 человека (не включая автора этого изменения).
                              Ответить
                              • Если дело дошло до такого, то наверняка в комманде уже используется CI и некий автоматизированный инструмент оформления и стилизации кода. А там такой финт ушами не пройдёт.
                                Ответить
                    • Птмчтн т к чтет ткй кд, дмт чт е нпс мдвж вонни ил ег дрг потачок.
                      Ответить
                      • И такое бывает. Не понимаю я вашу нелюбовь к варам.
                        Ответить
                        • Иногда бывает так, что проще читать не именования переменных. Т.к. разные авторы по разному именуют, а используемые типы.

                          Ещё один кейс связан с рефакторингом и возможностью получения неконтролируемой ошибки, когда в базовом классе тип данных изменился, а клиент предполагает использование первоисточника. Скажем, был Int16, а стал Int64.

                          Ну и как написал bormand, для кодревью может использоваться некий инструмент типа curcible.
                          Ответить
                      • Если бы тут был язык Вонни, это был бы первый говнокод на нём.
                        Фишк блыа в пнятнсти нпсианнго, а тут, словно архиватор Бабушкина был.
                        Ответить
                        • //Я тчк учс.
                          Псать>"Первт мры">псц;
                          Ответить
                          • Нужно пойти дальше - нужен упоротый язык. в котором конструкции тоже упоротые.

                            Ах да, J...
                            Ответить
              • Не согласен с вами. Даже в многомиллионностроковом проекте вары либо очевидны, либо не мешают читабельности. Куда как больше усложняют код повсеместные паттерны, рядом с которыми секунда выведения типа в голове ничего не стоит. Так что вар - добро. А в дебрях сложных многословных названий заблудиться и потерять нить даже проще.
                Ответить
    • // case insensitive THIS
      public IMyInterfaceName This { get { return this; } }
      public IMyInterfaceName tHis { get { return this; } }
      public IMyInterfaceName THis { get { return this; } }
      public IMyInterfaceName thIs { get { return this; } }
      public IMyInterfaceName ThIs { get { return this; } }
      public IMyInterfaceName tHIs { get { return this; } }
      public IMyInterfaceName THIs { get { return this; } }
      public IMyInterfaceName thiS { get { return this; } }
      public IMyInterfaceName ThiS { get { return this; } }
      public IMyInterfaceName THiS { get { return this; } }
      public IMyInterfaceName thIS { get { return this; } }
      public IMyInterfaceName ThIS { get { return this; } }
      public IMyInterfaceName THIS { get { return this; } }
      Ответить
      • public IMyInterfaceName Here { get { return this; } }
        Ответить
      • http://ideone.com/WpAhkV
        Ответить
        • или
          http://ideone.com/sDlIVy
          Ответить
          • Слишком сложно!
            Ответить
            • Мне наоборот кажется проще и нагляднее
              Ответить
              • Я бы согласился на компромисс.
                Объяснил бы хоть свой кулхацкель...
                Ответить
                • может так попроще

                  http://ideone.com/zzp6Ka

                  да я хаски только начал.
                  суть такова - разворачиваем слово и с помощью мар создаем массив функций типа

                  [\x->[("S"++x),("s"++x)],
                  \x->[("I"++x),("i"++x)],
                  \x->[("H"++x),("h"++x)],
                  \x->[("T"++x),("t"++x)]]

                  а потом сворачиваем через монадную связку и получается

                  [""]>>=(\x->[("S"++x),("s"++x)])>>=(\x->[("I"++x),("i"++x)]) и т.д

                  равно

                  ["S","s"]>>=(\x->[("I"++x),("i"++x)])

                  равно
                  ["IS","iS","Is","is"]

                  и так далее
                  Ответить
                  • еще чуть проще

                    http://ideone.com/t7hop7
                    Ответить
                    • > [([toUpper a]++x),([toLower a]++x)]
                      Сколько скобок... А ещё [x]++y вместо x:y.

                      Хватит курить уже! Вспоминается гость и его "привет поехавшим".
                      http://ideone.com/aTpPIw
                      Ответить
      • Прикольно, но, судя по всему, двух не хватает (tHIS и tHiS).
        И возвращать надо по цепочке, раз уж взялись за такое дело.
        Ответить
        • http://ideone.com/Foxwot
          Ответить
          • > Foxwot
            WAT FOX???

            Кстати, там действительно джвух, а не трёх не хватает, если я не путаюсь в правилах именования.
            http://ideone.com/0B1VD0
            Ответить
            • >>WAT FOX???

              Мне тоже понравилось

              Ты по что мою гениально-неоптимальную монадорограммину портишь, холоп?
              Ответить
            • а ещё повторы будут, если в тексте встретятся не-буквы.
              Ответить
    • код не является плохим. Такая конструкция вполне уместна.
      Ответить
      • код не является плохим. Просто он - говнокод.
        Ответить
        • ты мне щас логику сломал
          Ответить
          • Ты так говоришь, как-будто говнокод это что-то плохое.
            Ответить
            • Чем тогда плохой код от хорошего отличается?
              Ответить
              • К сожалению - ничем кроме сложности поддержки.
                Ответить
                • о, я смотрю ты уже постиг безоценочное мышление. Дзен?
                  Ответить
              • Хороший код выполняет своё предназначение, делает то, что нужно было. Плохой - нет.
                Например, была задача наливать рюмку водки роботизированной рукой. Если код загрузили, рука наливает, в полнолуние ничего не глючит, работает корректно - код хороший.
                Если была задача выложить исходники на гитхаб, показывать друзьям и хвастаться своим быстрым факториалом, то вон те лишние скобки и пробел говорят, что код плохой.
                Если была задача сделать сайт, а программист сделал библиотеку с идеальной архитектурой и фабрику фабрик, запросил уже пять миллионов, а сайта нет, код плохой.
                Ответить
                • ну так рука может наливать рюмку водки (россия, хуле - бухать с механической рукой), но при этом все остальное из бутылки на пол льется - это нормально?

                  или например перед тем, как налить - делает сальто и кричит за ВДВ!
                  Ответить
                  • Если пользователь просил такое делать - нормально. Если просил не делать - нет. Если не просил, а программист чувствовал и не спросил, надо ли - нет.
                    Ответить
                    • а если это побочный эффект? программист сам не знает почему, но болт забил на всякий случай
                      Ответить
                      • Если не противоречит требованиям - фиг с ним. Не так объяснили программисту предназначение, объясните ещё раз.
                        Ответить
                        • программисту сказали - сделай робота, который наливает рюмку водки
                          Ответить
                          • Программа не оправдала ожиданий, код никому не нужен, надо переделывать, всё плохо...
                            Ответить
                            • но ведь он наливает
                              Ответить
                              • Наливает, но не так. Не оправдывает ожиданий, создаёт плохие слухи о программисте, приносит разочарование.
                                Ответить
                                • все он так наливает. (зелено) это заказчик ебанутый, ноет и ноет, все ему не так
                                  Ответить
                                  • Всё относительно... Что программисту хорошо, то заказчику - не так.

                                    > (зелено)
                                    Карма ≥ 0
                                    Действие Создавать публикации в профильные хабы, писать комментарии с использованием html-тегов.

                                    Кармы не хватает? На ГК можно купить улучшенный аккаунт.
                                    Ответить
                • только программистам на пхп такое не говорите. Если начнется вона адовой смеси хтмл, php, js и фраз но он же работает. По хуй, что работает если при внесении изменений возникает желание на хуй все удалить и сделать с 0 код плохой.
                  Ответить
    • показать все, что скрытоvanished
      Ответить

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