1. Куча / Говнокод #11700

    +121

    1. 1
    2. 2
    3. 3
    4. 4
    ignore(MainForm.g.Items.Add
    			(
    				if(! $['A'..'Z'].Concat($['а'..'я']).Concat($['А'..'Я']).Concat($['a'..'z']).Contains(tok[0])) $"#$code" else tok
    			));

    Запостил: LispGovno, 04 Сентября 2012

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

    • А как это написать правильно?
      Ответить
      • Вот так конечно же:
        if (!"ABCDEFGHIJKLMNOPQRSTUVWXYZабвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuvwxyz".Contains(tok[0]))
        Ответить
        • Я про говнокод из топика:
          Таки от Concat можно избавится.
          Тем более глупо создавать 4 списка букв каждый раз при вызове этой функции при каждой итерации цикла.
          Тем более глупо делать операцию О(n) поиска элемента в каждом списке, вместо О(1) обычного сравнения диапазонов.
          Ответить
        • Кстати, некоторые считают, что так и нужно писать. Это кросплатформенно. В некоторх языках буквы не идут подряд. Например в русском языке unicode или в cp866:
          http://ideone.com/9V3Ak
          import Char
          main = print $ map ord ['А', 'Я', 'Ё', 'а', 'я', 'ё']
          [1040,1071,1025,1072,1103,1105]
          Ответить
          • Ну вообще охренеть... Я ещё и ошибку нашел в коде этого говнокода... Мде.
            Ответить
    • Что это за язык?
      Ответить
    • Похоже это уже привычка. Ты уже не имеешь права постить обычные говнокоды. Их сразу минусуют. Тебе можно постить только говно из языков. Проклятье говна.
      Ответить
      • Теперь это модно.
        А ещё забавно, когда постят боян и плюсуют, а когда первый раз постили пару лет назад - минусовали. Говнокод, опередивший своё время!
        Ответить
    • Сегодня пробовал проектировать на ADT в Nemerle иерархию серьёзного хелоуворлда. Понял, что кроме Хаскеля это у меня нигде не получается (и то я там серьёзные хеловорлды ещё не пробовал). В итоге получилась иерархия с обычным ООП. Или ADT вообще говно, или ADT конкретно в Nemerle говно или мой мозг говно зашкварен ООП. Что посоветуете?
      Ответить
      • А ещё идея вывода конкретных типов в Немерле и только для локальных функций (не как в Хаскеле) - не менее унылое говно. А в скале абстрактные общие выводит? Или тоже конкретные?
        Ответить
        • Решил прятать ADT внутрь ООП классов, как низкоуровневое говно. Подругому и не знаю как сделать
          Ответить
          • Без сорцов тебе вряд ли кто-то что-то может подсказать...
            Наследование, кстати, вообще многое усложняет.
            Ответить
            • >Наследование, кстати, вообще многое усложняет.
              Что например, кроме того, что с ним больше кода?
              Ответить
            • ADT Nemerle - этакие taget unions. То есть структура с открытыми данными. Антиинкапсюляционно. Не знаю как сделать конструктора приватными, чтобы не творили с ними непотребство.
              Ответить
              • В хаскеле делалось тупо - не экспортировать конструктора за пределы модуля.
                Ответить
                • Знаю. Немерле не осилил.
                  Ответить
                  • Даже вот так написать не могу:
                    variant ololo
                    	|T
                    		a:string
                    	|T1
                    		b:int
                    	public f():bool
                    		def g(T(a))
                    			true
                    		def g(T1(b))
                    			false
                    		g(this)

                    А хочу так:

                    variant ololo
                    	|T
                    		a:string
                    	|T1
                    		b:int
                    def f(T(a))
                    	true
                    def f(T1(b))
                    	false
                    А скала умеет последний вариант записи?
                    Паттерн-матчинг не предлагать.
                    Ответить
                    • Scala не умеет паттерн-матчинг в определении функций. Нужны языки, в которых можно определять функции в несколько клозов, а это в основном семейство ML и Erlang
                      Ответить
                      • >семейство ML
                        Помоему среди них есть один выродок - F#
                        Он вроде так не умеет
                        Ответить
              • Зачем делать конструкторы приватными? Вся суть как раз в том, чтобы конструирование объекта выглядело в точности так же, как сопоставление с образцом.
                Если очень хочется инкапсуляции - в Scala есть экстракторы, некий view, позволяющий осуществлять сопоставление с образцом, сохранив инкапсуляцию. Вот тебе пример: http://ideone.com/2xA5xW
                Ответить
                • >в Scala есть экстракторы, некий view, позволяющий осуществлять сопоставление с образцом, сохранив инкапсуляцию
                  Даже в хаскеле ж такого нет? Штука хорошая
                  Ответить
                  • Хорошая, в haskell нет. Особенно удобно использовать их в regex: значение каждой группы можно привязать к переменной одной строкой.
                    Ответить
                    • А в хаскеле или скале с атд как то так можно?
                      variant T
                      	| T1
                      	| T2
                      
                      variant G : T
                      	| T3

                      То есть добавлять конструктора
                      Ответить
                      • В Scala это называется case-классы у них обычно общий абстрактный родитель. Наследников можно добавлять где угодно (наследуйся от базы и вперёд), но только если базовый класс не помечен как sealed - в этом случае наследников можно объявлять только в том же исходном файле.
                        Специального синтаксиса с пайпами там нет, всё через наследование.

                        В Haskell тоже нельзя добавлять.
                        Ответить
    • Как можно жить в языке в котором этого по умолчанию нет и выглядит композиция (.) и id как:
      module Utils
      public compose[FD,GS,GD](f:GD->FD, g:GS->GD):GS->FD
      			x => f(g(x))
      		public id[T](x:T):T
      			x

      Nemerle к вашим услугам
      Скала что может этому противопоставить?
      Ответить

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