Куча говна / Говнокод #25718 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
Чем обусловлена течка по сильной типизации, если она крайне неудобна?
К примеру, в "PHP" я могу спокойно написать код, подобный приведённому ниже,
и не надо будет придумывать всё новые и новые названия для переменных:

$count='microsoft,apple,amazon';
$count=explode(',', $count);
$count=count($count);
$count=$count.' шт.';

Запостил: SteadfastTinCock SteadfastTinCock, (Updated )

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

  • Вроде никто и не течёт. В C/C++/C# было бы странно, если так можно было.
    Ответить
    • Хотя есть же хуета типо std::any, ноя ни разу не использовал, может не в тему
      Ответить
    • В дельфятине есть тип данных Variant. Фактически это запись (структура) из двух полей: первое поле –— дескриптор типа (номерок, указывающий на то, какой тип данных в данный момент хранится), второе поле (неограниченного размера) –— собственно данные.

      Это как в сишке написа́ть:
      typedef struct {
          int current_type;
          union{} data;
      } variant;


      И хранить в data разные значения в зависимости от того, какое число лежит в поле current_type.

      Только в дельфятине ещё был синтаксический сахарок, чтобы самому не заполнять и не проверять дескриптор типа.
      Ответить
      • в сишечке я тоже такие структурки видал
        прочитаешь первое поле и поймешь, что лежит во втором
        Ответить
      • В алгол-68 на юнионах основаны обобщённые функции, но правда они там сами знают, значение какого типа хранят, например print принимает юнион. Что интересно: у операторов там допустима перегрузка для различных типов, а у функций —– нет.
        Ответить
  • это отсутствие сттической, а не сильной типизации
    не тупи
    Ответить
      • строгая

        когда ты не можеш написать 22 + "пиво"
        Ответить
        • Бесит, что в "Python" нужно писать ",".join(map(str, huis)), а не просто ",".join(huis)
          Ответить
          • да
            питонячя тупизация строга, но не статическа
            Ответить
              • не понял, что не так?
                в питоне нельзя строку неявно кастнуть к инту
                "1" не равно 1
                нельзя из "1" вычесть 1

                в питоне типизация строгая (в отличие от джс и пхп и перла)
                Ответить
        • Кстати, в восьмой строке именно пример слабой (нестрогой):
          $count=$count.' шт.';

          Потому что $count неявно преобразовывается в строку, чтобы оператор кокококонкатенации имел смысл.

          В шестой, в седьмой и в восьмой пример динамической: $count на лету меняет тип.
          Ответить
            • String.format("%s шт", count);

              Но луше бы была строковововоая итерплоляция
              Ответить
              • Влажной интерполяцией я и в "PHP" не пользуюсь - сильно ухудшает читаемость кода. Лучше не полениться и проставить пару кавычек и пару точек.
                Ответить
          • именно потому я за строковоую интерповоляцию

            вот скажем в коко тупизация статическая и строгая, но

            val age = 99;
            print("Мне {age} лет")


            неявный каст
            Ответить
            • Коко это шо такое? Котлин? Я думаю, там не неявный каст, а вызов какого-нибудь метода toString()
              Ответить
              • Неявный каст именно так тут и происходит: для интеджера там свои правила, а для обычного объекта вызоут toString
                Ответить
                  • ты прав, а я обосравси

                    у Int в коко toString() есть, а кастануть его в строку нельзя

                    это в жаве у примитивов методов нету, у коко сахар завезли

                    так что там правда вызывается toString
                    Ответить
                    • Ну кстати, если так, то в Котлине это выглядит единообразнее, чем в Жабе.
                      Ответить
                      • да) в коко можно делать вид что ты всегда работаешь с враппером и не думать о примитивах воще

                        методы у инта есть много где
                        и в сишарп, и в руби
                        жаль что в жабе их нет
                        Ответить
                        • Даже в статически типизированном «Free Pascal» появились классы-хелперы, которые можно ассоциировать с примитивными типами безо всякого наследования:
                          https://www.freepascal.org/docs-html/current/ref/refch10.html

                          Пример:
                          {$mode objfpc}
                              {$modeswitch typehelpers}  
                              uses SysUtils;
                               
                              type
                              TPetuh = type helper for LongInt
                                  function AssString(const aFormat: String): String;
                              end;
                               
                              function TPetuh.AssString(const aFormat: String): String;
                              begin  
                                Result := Format(aFormat, [Self]);  
                              end; 
                               
                              begin
                                  WriteLn(LongInt(42).AssString('Ответ на главный вопрос: %d.'))
                              end.


                          http://ideone.com/lelkC1

                          А в языке «D» вообще есть «Uniform Call Syntax» для текучего междумордия.
                          Ответить
                          • Смахивает на трейты.

                            В D вообще много чего есть, только никто им не пользуется почему-то
                            Ответить
                            • Хорошо, буду смахивать в другую сторону.

                              Языком «D» никто не пользуется, потому что «Фейсбук» и «ВКонтакте» написаны на «PHP».
                              Ответить
                                • Трейты — это всё-таки не то. Они работают в противоположную сторону. Трейт — это что-то типа интерфейса, но только не чисто абстрактного, а уже с реализацией. Трейты используются как основа для построения более сложных классов.

                                  Хелпер же позволяет добавлять методы в чужой класс, не наследуясь от него.
                                  Ответить
                                  • > Трейт — это что-то типа интерфейса, но только не чисто абстрактного, а уже с реализацией
                                    > Хелпер же позволяет добавлять методы в чужой класс, не наследуясь от него.

                                    - чот не вижу разницы, если говорить про семантику
                                    Ответить
                                    • Трейты, миксины — это кирпичи. От них нужно наследоваться, чтобы построить новый класс.

                                      Хелперы, экстеншны же позволяют привязывать методы к существующему классу без необходимости создавать новое имя класса.
                                      Ответить
                                      • Боже, сколько ненужной хуйни придумали оопбляди.
                                        Зачем всё это?
                                        Ответить
                                        • Потому что у каждой предыдущей хуйни обнаруживался фатальный недостаток™.
                                          Ответить
                                          • И теперь вместо того, чтобы обсуждать технические проблемы или пробемы computer сайнс, мы обсуждаем разницу между миксином и трейтом и наследованием
                                            Ответить
                                            • Алгоритмы обсуждают математики, но математику изучают только в рашке.

                                              Технические проблемы обсуждают сисадмины и заправщики картриджей.

                                              А программисты обсуждают разницу между миксином и трейтом.
                                              Ответить
                                      • Не понял, трейты и миксины нельзя добавлять к существующему классу?

                                        Rust:
                                        https://doc.rust-lang.org/rust-by-example/trait.html
                                        Swift:
                                        defailt implementation, уже много раз про них писал здесь
                                        Dlang:
                                        https://dlang.org/articles/mixin.html - это вообще кодогенерация вперемешку с препроцессингом
                                        Special guest - Go:
                                        https://github.com/golang/go/issues/16254
                                        - гобляди рассказывают, что "Mixins, traits used in OOP. Also I know that in Go language there are no such thing as OOP and inheritance." И именно поэтому они не нужны.

                                        Может, ты имеешь в виду конкретно пхп.

                                        Но вообще это очень сильно зависит от ЦЯ. Я когда-то любил говорить, что экстеншены, трейты и миксины это одно и то же, пока не прочитал документацию. Так шо в чём-то ты прав
                                        Ответить
                                        • Еще миксины есть в руби
                                          https://ruby-doc.com/docs/ProgrammingRuby/html/tut_modules.html

                                          Это просто модуль, который запихнули в класс

                                          Есть они и в Python,но там они реализованы просто с помощь. множественново наследования, как и в С++

                                          Отдельново синтаксису нет
                                          Ответить
                                            • Меня всегда мучает вопрос: если бы я хотел выразить что-нибудь из вышеперечисленного посредством UML, то я бы нахуй сходил с такими пожеланиями?
                                              Ответить
                                              • в UML это всегда было бы extends: стрелочка такая кажется белая
                                                Ответить
                                                • Ок, с одной стороны был бы класс, а с другой? Как показать protocol/trait default implementation в UML? Тоже "коробочку" класса намалевать?

                                                  UML устарел, вот что я хочу сказать
                                                  Ответить
                                                  • >>>"Как показать protocol/trait default implementation в UML? Тоже "коробочку" класса намалевать?"

                                                    Зачем, блядь, что-то показывать? Зачем, блядь, что-то малевать? Просто пиши процедурный код, коноёб твою мать.
                                                    Ответить
                                                    • Согласен, всегда так и делаю.

                                                      Вместо vcs тетрадка в клеточку.
                                                      Вместо IDE - карандаш и ластик.
                                                      Дебажу прямо на бумаге.
                                                      Когда надо сделать билд и выкатить в продакшен, навожу ручкой то, что раньше написал карандашом.
                                                      Чтобы отдать заказчику продукт, вырываю листок, комкаю и бросаю в форточку.

                                                      По итогу езжу на мазерати, ебу хрюш и топ-моделей, конярду недавно нанял за еду чистить туалеты на моей вилле. Иногда, сидя на толчке, слышу его вскукареки из канализации про последовательный процедурный код, написанный говном пальцем на кирпичной кладке.
                                                      Ответить
                                                  • В UML есть класс и интерфейс/абстрактный класс (Кажется, он италиком пишется)

                                                    Так что да, другого там ничегонет.
                                                    UML вообще редко юзают, зачем что-то рисовать если надо хуяк=-хуяк?
                                                    Ответить
                                                    • Я бы с удовольствием юзал UML чаще, если бы его адаптировали под современные нужды.
                                                      Ответить
                                                      • >>>"Я бы с удовольствием юзал UML чаще, если бы его адаптировали под современные нужды"

                                                        Это ещё что за хуйня? Бляяяя, сколько говна понапридумывали...
                                                        Ответить
                                                      • У UML есть много диаграм, не только для классов

                                                        Например sequence диаграммы я иногда юзаю.

                                                        Вообще есть UML2, там есть то, чего не былодо этого
                                                        https://flatis.moe/uploads/uploads/uml.pdf
                                                        Ответить
                                                        • Всего лишь книжка на 300 страниц, чтобы объяснить нотацию.
                                                          Ответить
                                                            • Погуглил, пишут, что 14. +/-

                                                              Это значит, что на каждый тип диаграммы в книжке не менее 15 страниц. Лев Толстой писал эту книгу, да.

                                                              По ссылке слишком тривиальный пример, что ты хотел им сказать?
                                                              Ответить
                                                              • Там могут быть еще картинки на парустраниц.

                                                                Я хотел сказать что есть референс без книжки

                                                                Интересно, что в книге про UML 1 были коты и котята, а в книге про UML 2 были уже обе3ьяны (как в книге про VB програмированне под Win32API).

                                                                Вот например книга где обезьяна (!) сама себе дрочит (!!) ногой (!!!)
                                                                И это книга про UML!!!
                                                                https://covers.oreillystatic.com/images/9780596102081/lrg.jpg
                                                                Ответить
                                                                • –— Товарищ прапорщик, но ведь рукой удобнее!
                                                                  —– А мне не надо, чтобы вам было удобнее. Мне надо, чтобы вы заебались.
                                                                  Ответить
                                                          • Вообще я тут подумал: миксины, хуиксины это всё деталиреализации

                                                            В мире архитектуры есть два понятия:

                                                            IS-A
                                                            и
                                                            HAS-A

                                                            они и отражены в UML. А как этот сраный IS-A реализуется в твоем языке это уже не важно
                                                            Ответить
                                                            • Ещё есть параллельная реальность, в которой нет ни миксинов, ни хуиксинов, ни трейтов, ни классов, ни "IS-A", ни "HAS-A", ни "UML". Там ты просто программируешь последовательным процедурным кодом и течёшь от наслаждения. Там тебе не надо лихорадочно рыться по десяткам директорий, искусственно разделять примитивный алгоритм из десяти строк на контроллеры, модели и интерфейсы, писать Unit-тесты и заниматься иной непродуктивной хуйнёй. Вообще, меньше читайте "Habr", дебилы.
                                                              Ответить
                                                            • Ну так-то да, диаграмма классов худо-бедно покрывает основные принципы ООП, но мне кажется именно в том, что она сильно абстрагирована от реализаций, кроется слабость её практического применения.
                                                              Ответить
                                                              • Да вот хуй знает, может быть в том-то и её сила.

                                                                Если я хочу сказать что Конардо это частный случай копрофила и частный случай гея и частный случай педофила, то я просто рисую от него три стрелочки к этим сущностям, и мне совершенно не важно как именно оно реализовано: множественным-ли наследованием или миксинами

                                                                Куда важнее понять ЧТО, чем понять КАК.
                                                                Я вообще даже не всегда знаю, на чем буду писать программу заранее
                                                                Ответить
                                                                • Однако при этом в терминах UML всё же есть разделение на класс и интерфейс, хотя с точки зрения моделирования и то то это по сути контракт. Так что с одной стороны вроде как и абстракция, а с другой стороны бегите за тряпкой и тазиком
                                                                  Ответить
                                                                  • Будь я автором UML, я бы ввел только две сущности: контракт и его реализацию.

                                                                    Совершенно не важно на самом деле, является-ли контракт формальным (как интерфейс в джаве) или неформальным (как, например, в утке)

                                                                    Не важно так же как именно он 0писан, и как реализован,

                                                                    Более того: ООП вообще не обязано тут быть.


                                                                    Контракт "приложение Win32API" имеет реализцию "пасьянс", а "клиент фейсбука п0д иос" это реализация контракта Mach-O, а у контракта ELF есть реализация nginx.

                                                                    У контракта "веб бров3ер" реализация Chrome
                                                                    ну ты понел
                                                                    Ответить
                                            • да, в перле надо блессить референс и наследование через @ISA

                                              В Lua тоже ООП не классическое (во всех смыслах) и тоже протопопоное как в джс
                                              Ответить
                                          • Атлантическая миксина[1], или европейская миксина[1] (лат. Myxine glutinosa) — вид бесчелюстных из семейства миксиновых.

                                            Атлантическая миксина обитает в восточной Атлантике от западной части Средиземного моря и Португалии до Северного моря, Скагеррака, Каттегата и Варангер-фьорда[2]. В западной Атлантике — от острова Баффинова Земля на юг до Северной Каролины[3].

                                            Длина тела достигает 76 см. Недоразвитые глаза скрыты под кожей. Спинного плавника нет. Вокруг рта расположено 6 усиков. На боковых сторонах тела одна жаберная щель[3]. На поверхности тела в общей сложности от 88 до 102 пор, из которых сочится слизь[2].

                                            Атлантическая миксина — хищник, она выедает внутренности и мышцы у ослабевших рыб, вгрызаясь в жертву с помощью мощного языка с роговыми зубцами[2][3].
                                            Ответить
                                            • >Что это и нахуй оно въеблось?
                                              тебе правда интересно?
                                              Ответить
                                      • Блядь, что вся эта хуйня означает и чем она лучше последовательного процедурного кода?
                                        Из-за вас, блядей, я вынужден каждый раз, сталкиваясь с очередным ООП-проектом, по часу-по два искать в Интернетах, как конкретно в этом фреймворке (или его конкретной версии) выполнить ссаный запрос к базе данных, ибо они не допускают такой роскоши, как "mysql_query" - там обязательно надо использовать какую-то поебень типа "$db->table(...)->where(...)->first()" или "DBO::Query(...)", и вся эта абракадабра совершенно непредсказуема. Если же документацию найти не удаётся, я, опять же, часами вынужден искать, где в этом фреймворке зарыт файл с классом базы данных, чтобы понять, как, блядь, здесь выбрать одну запись из таблицы.
                                        Бляди, дети блядей и внуки блядей.
                                        Ответить
                                        • Тю, так это ж охуенно, когда ты мучаешься. Надеюсь, у тебя, рака, в жизни будет побольше ооп
                                          Ответить
                                          • Вообще хочу вот что сказать:

                                            * Наследование реализации это почти всегда плохо
                                            * Наследование реализации с со стоянием это почти всегда очень-очень плохо
                                            * Виртуальные методы это почти всегда плохо
                                            * Невозможность использовать метод без привязки к данным и невозможность использовать ево с другими данными (как в джаве например) это плохо
                                            * Мысль хранить данные вместе с методом для их обработки это далеко не всегда хорошо

                                            Все остальное в ООП -- ок
                                            Ответить
                                            • > Виртуальные методы это почти всегда плохо

                                              - нормально ты щас ObjC приложил.
                                              Ответить
                                              • В ObjC вообще не методы, а сообщения, а метод у каждого класса один и он называется диспетчером сообщений. Это если рассматривать ObjC с точки зрения других ЯП.
                                                Ответить
                                              • >- нормально ты щас ObjC приложил.
                                                Я скорее джаву приложил:) но я согласен что и в обжс дипатчица метод в рантайме и зависит от
                                                Ответить
                                        • Чем больше времени ты ебешся с ООП -- тем меньше времени ты распостраняешь ЦП

                                          профит!
                                          Ответить
                          • Такая хуня есть и в C# и в Koтлин и аже в ObjC есть экстеншены (правда, все таки не спримитивными)
                            А уж в руби так это вообще используют в хвост и в гриву.

                            Хорошо решает вопрос дискаверабилити.

                            Допустим, у меня есть класс Petuh, и я хочу найти как сделать из него жареные крылышки

                            Очевидно, у питуха метода такого нет
                            Как быть в жабе? Искать всё, что работает с питухом

                            Как быть в кокок? Сказать pituh., и IDE найдет все экстеншен методы
                            Ответить
                              • Согласен.

                                В "си" таких проблем нет, и именно по этому я за "си"
                                Ответить
                                  • Как это нет?
                                    В асемблере есть байт, врот, дубльврот, куворт
                                    Ответить
                                    • Я за фрот, там кроме ячеек памяти ничего нет, вся типизация в голове программиста.
                                      Ответить
  • "microsoft,apple,amazon".split(',').length.toString() + ".шт";

    воще без всяких переменных

    это джс
    Ответить
    • Да, от "JavaScript" мои трусики тоже частенько мокреют (хотя встречаются и спорные моменты).
      Ответить
    • Как сложно, в "PHP" я могу написать '3.шт' и течь. Именно поэтому я за "PHP".
      Ответить
    • Ах да:
      ,&'.шт'":>:+/','='microsoft,apple,amazon'
      Бдядь, просто запятые посчитай.
      Ответить
    • split(/,/, 'microsoft,apple,amazon') . ' шт.';


      Учитесь у отца всех ваших скриптоподелок: Perl. Тут не только смена типа на ходу, тут еще и контекст меняется.
      Ответить
  • РУССКАЯ ИСТОРИЯ. Еще раз разоблачена брехня Москвы о «разгроме» немцев под Прохоровкой в 1943 году

    Никакого триумфа Красной армии в «крупнейшем танковом сражении Второй мировой войны» под Прохоровкой 12 июля 1943 года, которое якобы стало кульминацией грандиозной стратегической операции, вошедшей в историю, как Курская битва, в действительности не было, сообщает Die Welt, ссылаясь на историков, обнаруживших немецкие разведывательные фотоснимки.

    «Результаты последних исследований, основанных на подлинных фотографиях, подтверждают: под Прохоровкой не было ни советской победы, ни мощного танкового сражения в целом. На самом деле, на поле к западу от Памятника Победы (звонницы на Прохоровском поле, увенчанной позолоченной фигурой Богородицы), более 200 танков 29-го танкового корпуса совершили атаку в стиле камикадзе», - говорится в статье. И там же делается вывод, что теперь этот памятник «в сущности должен бы быть снесен».

    О том, что никакой победы русских в том сражении не было не раз уже говорил немецкий военный историк Карл-Хайнц Фризер, а теперь его версию подтвердил и британский ученый Бен Уитли, обнаруживший в американском Национальном архиве Колледж-Парка (штат Мэриленд) немецкие разведывательные фотографии с восточного фронта. Они «с максимальной ясностью доказывают катастрофическое поражение Красной армии под Прохоровкой», - говорится в статье Die Welt, которую цитирует InoPressa.
    Ответить
    • «Согласно многолетней версии битвы под Прохоровкой, 12 июля 1943 года в ходе немецкой наступательной операции «Цитадель» в бою столкнулись 850 советских и 800 немецких танков. При этом, по данным советской пропаганды, якобы было уничтожено 400 боевых машин вермахта, - говорится в статье. - На самом деле, против 672 советских танков боролись 186 немецких боевых машин; вечером того дня потери составили 235 танков у Красной армии и 5 у вермахта - и это на нескольких квадратных километрах».

      В статье Die Welt утверждается, что командующий 5-й гвардейской танковой армией генерал Павел Ротмистров при наступлении игнорировал наличие естественного препятствия в виде рва глубиной 4,5 метра, и в результате советские танки столпились перед узким мостом, став идеальной мишенью для двух батальонов 2-го танкового корпуса СС.

      «Это был ад из огня, дыма, горящих Т-34, убитых и раненых», - писал участвовавший в сражении Рудольф фон Риббентроп, сын рейхсминистра иностранных дел. Только 4 тяжелых танка «Тигр» под командованием Михаэля Виттманна уничтожили 55 советских танков.

      Через несколько дней в район боя были направлены немецкие самолеты-разведчики, который засняли место боя 14 и 16 июля 1943 года. На них видны рядом с глубоким рвом более 100 разбитых средних танков Т-34 и легких Т-70. Чуть вдалеке - еще 55 уничтоженных «Тиграми» танков (32 Т-34, 12 Т-70 и 11 британских «Черчиллей».
      Ответить
    • Конечно брехня, немцы на самом деле побелили, а нас поместили в матрицу.
      Ответить
  • Попробуй писать код в IDE, а не в notepad++ или виндовом.
    Ответить
      • В языках со статической типизацией будет идеально работать автодополнение + рефакторинг.
        Ответить
        • иенно потому я пишу на языках со статической тупизацией и кукареку
          Ответить
    • IDE нахуй не нужны. Все те возможности, о которых кукарекается в их беспрерывной рекламе, доступны и вполне стандартными средствами - код редактирую через "Notepad++" (где есть подсветка синтаксиса и нет даунского автодополнения), файлы на сервере обновляю через "WinSCP", отладка с помощью гениальной функции "error_reporting(E_ALL)". Да, на мне нет илитного ярлыка "он работает с JetBrains", зато код работает и все довольны. А вы продолжайте что-то там тестировать, "рефакторить", "коммитить"...
      Ответить
      • >>коммитить
        кстати, а ты ведь вершн контролем тоже не пользуешься?
        Ответить
        • Ни разу не пользовался ни "SVN", ни "Git". Когда попадались клиенты, упоминавшие необходимость работы через одну из этих хуен, я обходил их за километр.
          Ответить
  • Есть языки, в которых вообще переменных нет.

    Такая концепция подошла бы для стекового языка. В воображаемом стековом языке пример кода выглядел бы так:
    PUSH 'microsoft,apple,amazon'
    PUSH ','
    explode
    count
    PUSH ' шт.'
    concat
    Ответить

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

Переведи на "PHP", guest!

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


    8