• Замена EAV на JSONB в PostgreSQL
    0

    Если сделать колонку nullable, то никаких проблем не будет.

  • Замена EAV на JSONB в PostgreSQL
    +1
    Не нужно миллион джойнов, нужен один PIVOT

    Я всегда думал, что нужен один select, в котором в условии where будет id сущности. А джойнов надо всегда два, просто чтобы присоединить к таблице с сущностями таблицы с ключами и значениями. Хотя, честно говоря я не совсем понимаю, почему нельзя это всё сложить в одну таблицу.

  • Что мы делаем не так со Спрингом
    0

    Честно говоря, не знаю. Я делаю такой вывод из того, что конфигурация с аннотациями скорее всего будет делать component scan, что не очень быстро.

  • ФП vs ООП
    0

    Вы хотите сказать, что даже если в языке нет механизма для сокрытия данных, то объектно ориентированный код всё равно можно писать, если программист будет самостоятельно следить за тем, чтобы не изменять значения полей напрямую? А если значения полей изменяются напрямую, то код автоматически перестаёт быть объектно-ориентированным? Я с вами совершенно согласен, так и есть.

  • Что мы делаем не так со Спрингом
    0
    А XML это жесть.

    Но стартует быстрее, чем аннотации ))

  • ФП vs ООП
    0
    Вы все время уходите в сторону, и путаете «определение» с конкретным формулированием отношения ООП к сокрытию данных, данное автором этого термина.

    Не путаю. Мнение Алана Кея об отношении ООП к сокрытию данных содержится в процитированном вами определении ООП.


    Еще раз напомню — речь идет о сокрытии данных.

    Да, я помню.


    Процитируете «мою позицию»?

    Не могу, вы её не озвучили. Думаю, сейчас хороший момент это сделать. У меня из ваших комментариев создаётся впечатление, что ваша позиция в том, что утверждение об отсутствии необходимости скрывать данные в ООП — неверно. Однако, какой бы не была ваша позиция относительно сокрытия данных в ООП, использовать мнение Алана Кея для её обоснования, по той причине, что Алан Кей — автор термина, не совсем корректно.


    признав в первом утверждении существование современных «чистых» (в концепции Alan Kay) ООП-языков, вы автоматически оспорили свое второе утверждение.

    Нет, не оспорил. Из того, что существуют чистые по мнению Алана Кея ООП языки не следует, что большинство использует термин ООП в том смысле, в котором его использует Алан Кей.


    Значит, все-таки не все так считают.

    Да, я сказал об этом в предыдущем комментарии и в комментарии, который был до предыдущего.


    Вообще, это плохая привычка говорить от лица всех.

    Ааа, вы подумали, что когда я сказал, что всем очевидно, что сейчас под ООП имеют в виду не то, что имел в виду Алан Кей, я имел в виду всех людей на планете? Нет, я имел в виду большинство. Вообще чаще всего в разговорном русском языке когда в речи встречается слово "все", имеется в виду большинство.

  • ФП vs ООП
    0
    Вы уверены в том, что значение ООП, заложенное автором этого термина, не реализуется ни одним современным языком программирования?

    Нет, я уверен в том, что многие языки, которые общепризнано считаются объектно-ориентированным, не реализуют то ООП, которое имел в виду Алан Кей.


    Тут многое зависит не от самого термина, а от субъекта восприятия.

    Да, именно так. Для того, чтобы люди понимали, что им хотят сказать, нужно использовать термины в тех значениях, к которым они привыкли.


    Раз уж Вы убеждены в том, что Ваше мнение очевидно всем, то невольно напрашивается вопрос — чем Вы тогда здесь сейчас занимаетесь?

    Объясняю вам, почему я считаю, что моё мнение очевидно всем )). Хотя, конечно ещё раз отмечу, что если вы со мной не согласны, то явно моё мнение очевидно не всем, а только большинству.


    просто хотел напомнить, что мы обсуждаем не значение термина ООП, а должны ли данные быть скрыты для поддержания парадигм

    Да, совершенно согласен. Я просто хотел сказать, что использовать определение Алана Кея для доказательства своей позиции не совсем корректно, потому что сейчас под ООП имеют в виду не то, что имел в виду Алан Кей

  • ФП vs ООП
    –1
    то вы посягаете на первоисточность

    Нет, только на текущее значение аббревиатуры ООП. Слова ведь означают то, что договорились иметь в виду те, кто их использует ))


    Что говорит нам ООП устами автора этого термина — я вам озвучил.

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

  • ФП vs ООП
    –1
    Так всем очевидно, или Вам?

    Мне кажется, большинству, и в первую очередь Алану Кею.


    Вы говоритот е от лица всех? Интересно…

    Ну, если вы со мной не согласны, то точно не от лица всех )). Но сейчас мало кто не согласится с тем, что Java — объектно-ориентированный язык или с тем, что С++ поддерживает ООП. Но со слов Алана Кея, ООП систему на можно построить только на Лиспе или Смоллтоке.

  • ФП vs ООП
    +1
    Автору термина «OOP», Alan Kay, например, это не очевидно

    Но всем очевидно, что сейчас под ООП имеют в виду не то, что имел в виду Алан Кей )))

  • ФП vs ООП
    0
    Не в рантайме, а при компиляции.

    Хотелось бы именно в рантайме


    В рантайме в общем тоже можно, но тут уже вопрос, есть ли доступ к типаж-объекту. И мало кто таким занимается.

    Тут же всё равно придётся пересобирать код, если хочется добавить новый объект, я же правильно понял? Наверное именно поэтому это мало кому нужно.

  • ФП vs ООП
    0
    С генериками оно особо не нужно, как ниже показано.

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

  • ФП vs ООП
    0
    Не понял вопроса.

    Допустим функция into принимает параметр типа InterfaceType (где InterfaceType — интерфейс). И у нас есть другая функция — caller, которая примает параметр типа InterfaceType по имени a. Реальный тип a прикомпиляции неизвестен. Внутри caller написано Into::into(a). Будут ли вызываться разные функции в зависимости от реального типа a?


    Динамическая диспетчеризация в расте определенно есть, но её стараются избегать

    Мартин вот советует наоборот, почаще её использовать ))


    С тайпклассами и макросами она особо и не нужна.

    Макросы это насколько я понимаю инструмент времени компиляции. А вот насчёт тайплассов как?

  • ФП vs ООП
    0
    В расте это собственно и вынесли на уровень самого языка, и всем очевидно, что 1.into() и Into::into(1) это совершенно одно и то же.

    А если into() будет принимать интерфейс, то раст подберёт в рантайме функцию для переданной реализации?

  • ФП vs ООП
    0

    Тут важный момент, что это магия времени компиляции, а Мартин делает акцент на динамический полиморфизм. Что касается Хаскеля, то у меня сложилось впечатление, что у Мартина ФП автоматически означает Clojure

  • ФП vs ООП
    0

    Не похоже это на мейнстримный язык ))). Я правильно пошимаю, что эта функция возвращает то, что принимает? В джаве был бы дженерик, да?

  • ФП vs ООП
    0
    А как же перегрузка функций?

    Дальше из текста статьи понятно, что под функцией с именем f Мартин имеет в виду функцию с именем f, которая принимает параметр o какого-то конкретного типа. Наверное не счёл нужным уточнять.


    И как же статический полиморфизм с выбором реализации на основе типа возвращаемого значения, как это в ФП любят?

    Этой фишки в менстримных языках пока нет, поэтому средневзвешенный программист такого поведения не ожидает, кроме того Мартин дальше говорит, что для ООП нужен динамический полиморфизм.

  • Что мы делаем не так со Спрингом
    0
    Думаю, будет работать.

    Работать то будет, но если захочешь средствами IDE перейти к реализации, то будут проблемы.

  • Apple в 2019 году — это Linux в 2000 году
    0

    Толщина ноутбука тут не имеет большого значения, имеет значение угол, под которым предплечья наклонены к поверхности клавиатуры.


    Поясню примером, когда держишь мышку, нижний край ладони опирается на край стола, а предплечье наклонено вниз градусов на 30 или около того. Если подвинуть мышку вглубь стола и при этом оставить такой же наклон руки, то край стола будет давить на кости предплечья. Вот то же самое у меня с ноутбуком.

  • ФП vs ООП
    0
    обычно ООП подразумевает объект и изменяемым состоянием

    К этому все привыкли, но в последнее время неизменяемые объекты встречаются в коде всё чаще и чаще.


    можно конечно порождать новые объекты, но это будет некая новая разновидность ООП

    Ну, например в Джаве, для того, чтобы добавить в строку пару символов, нужно сделать новый объект и так было с момента появления языка. И строка там не единственный неизменяемый объект. Так что я бы не назвал это чем-то радикально новым.

  • Apple в 2019 году — это Linux в 2000 году
    0

    Хочу ещё задать странный вопрос.


    Я лет 5 пользовался ноутбуком 2011 года выпуска с маленьким тачпадом. Соответственно расстояние между краем ноутбука и клавиатурой тоже было маленьким.


    Получалось так, что когда я опирался краем ладони (тем местом на котором обычно возникает мозоль от использования мыши) о край ноутбука, я спокойно доставал пальцами до цифрового ряда.


    Потом ноутбук стал совсем медленным я пересел за новый. За это время Apple успела ввести моду на большие тачпады и из-за этого расстояние от края ноутбука до клавиатуры заметно увеличилось, теперь, если положить ладони на край ноутбука я достаю пальцами только до нижнего ряда букв. А если положить руки выше, то край ноутбука больно упирается в запястье, если руки не параллельны поверхности ноутбука. Это напрягает. На последних Thinkpad тачпад большой, вот мне интересно, есть у вас такая проблема?

  • Apple в 2019 году — это Linux в 2000 году
    0

    Через БИОС можно поменять местам Fn и Ctrl

  • ФП vs ООП
    0
    И зачем нужен движок игры — без самой игры и игрока?

    Чтобы встраивать в игру, в которую будет играть игрок ))


    движок игры — ФП. а все игры на нем написанные — что тогда?

    Да кто его знает. Мартин вот в статье пишет, что требования к референциальной прозрачности не распространяются на железо и внешний мир, я лично считаю, что не ФП, потому что гарантии, которые даёт ФП не распространяется на код, который дёргает железо и реальный мир.

  • ФП vs ООП
    +1
    Наверное, пора написать постик на эту тему [что сама по себе референциальная прозрачность бессмысленна].

    Я думаю надо написать, я вроде таких не читал.


    И правда, зачем нам готовый тайпчекер, если можно каждый раз писать (и поддерживать) его частный и кривоватый случай.

    Готовый тайпчекер слишком жёсткий, если сделать кастомный, то код получится проще и выразительнее

  • ФП vs ООП
    +1
    Где то внутри скрыт счетчик от начала файла, и хотя он и передается в скрытом виде через fp — поведение то у fwrite с математической точки зрения, все равно недетерменировано т.е. это «не настоящее ФП»

    Да, всё так, это классический пример нарушения чистоты функции.


    А где тогда существует настоящее ФП?

    Например в физических движках, или в вычислении дропа с монстра в играх, или в рассчёте процента по кредиту, собственно везде, где одинаковые входные параметры дают одинаковые результаты.

  • ФП vs ООП
    +1
    Вы (или я в своём комментарии) сразу постулируете полезность статической типизации как средства для того, чтобы избегать ерунды

    Собственно Мартин как раз говорит, что не так уж она и полезна. Хотя тут я с ним решительно не согласен.


    И получается, что некоторые каноничные ООП-фишки не очень хорошо работают с некоторыми ФП-фишками.

    В статье фишки ООП редуцированы до динамического полиморфизма, а фишки ФП до референциальной прозрачности. Вы, как я понимаю, хотите сказать, что статическая проверка референциальной прозрачности несовместима с полиморфизмом подтипов. Возможно так оно и есть, я об этом не думал.


    Но холивар ООП против ФП обычно ведётся на другую тему, зачастую с одной стороны говорят, что моделировать предметную область исключительно функциями будут только аутисты, а с другой строны, что декоратор абстрактной фабрики синглтонов — бред буйнопомешанного.


    Так-то вам никто не мешает на голом бестиповом лямбда-исчислении лиспе писать одновременно в ООП и ФП-стилях, держа все нужные ограничения в голове и проверяя их глазами.

    Кстати, если добавить сюда юнит тесты — точка зрения Дяди Боба.

  • ФП vs ООП
    0
    Естественно есть холивар и противопоставление.

    Если вы хотите получать какие-то статические гарантии о чистоте ваших функций (или, обобщая, статически контролировать ваши эффекты), то вам потребуются довольно нетривиальные системы типов, позволяющие вычисления на типах.

    Мне кажется, вы сейчас говорите о холиваре между статической типизацией и динамической типизацией. У Мартина есть рассуждения на эту тему и насколько я понял, он считает, что типизация ортогональна что ФП, что ООП.

  • ФП vs ООП
    0
    Вообще-то полиморфизм есть в обоих случаях.

    В статье специально оговаривается, что в первом случае никто полиморфизма не ждёт, а во втором ждут. Это потому что в мейнстримных языках динамического подбора реализации функции на основании переданных аргументов пока нет.


    Языки, в которых полиморфизм будет в обоих случаях, как вы справедливо заметили, есть, но в статье речь не о них. Если я правильно понимаю Мартина, то по его мнению мультиметоды — приём из мира ООП и, соответственно, в языках, где они поддерживаются и то и другой код будет объектно-ориентированным.

  • ФП vs ООП
    +2

    Результат работы f_init должен передаваться в функцию f, которая должна работать детерминировано. Тогда будет настоящее ФП

  • ФП vs ООП
    0
    Взаимоисключающая отогональность — оксюморон.

    Совершенно согласен. Но Мартин счёл нужным подчеркнуть, что из того, что эти понятие ортогональны не следует, что они взаимно исключают друг друга. Видимо часто встречался с противоположным мнением. Я решил перевести, как было.

  • ФП vs ООП
    +2

    Раскройте, пожалуйста, свою мысль. Почему ООП и ФП не ортогональны?

  • ФП vs ООП
    0

    Я, конечно, понимаю что это такое, но на всякий случай уточню, что термин употребляю не я, а Дяд Боб )))

  • ФП vs ООП
    –1
    На таком уровне и названий никаких нет.

    Ну в статье написано, что объекту передаётся сообщение с именем f, значит название таки есть ))


    Да и аргументы никуда не пересылаются, а просто кладутся в стек перед вызовом функции и удаляются из него после.

    Зависит от реализации. Но учитывая, что тут сообщение пересылается, корректно будет сказать, что аргументы тоже пересылаются, так как они являются частью сообщения. Вот так как-то.

  • ФП vs ООП
    0
    Мне кажется или полиморфизм вы представили в неком странном виде… в виде того, что у разных обьектов метод с одним и тем же названием — Полиморфизм…
    Именно в этом суть — один метод в рамках одной абстракции

    Мартин пишет, что объекту пересылается сообщение с названием и аргументами. На таком уровне абстракции интерфейсов уже не существует, они есть в коде и используются системой статической типизации, чтобы отсечь те сообщения, которые заведомо нельзя передать объекту.

  • Писатели про… Писатели про… Писатели прод, или Как в России вымерли и возродились фантасты
    0

    А что насчёт Пелевина? Как его книги?

  • Писатели про… Писатели про… Писатели прод, или Как в России вымерли и возродились фантасты
    +1

    Я зашёл в книжный магазин, оказывается Перумов написал таки Тысячу лет Хрофта, про котороую можно найти упоминание в примечаниях к Гибели Богов и ещё кучу продолжений. Тысячу лет Хрофта я прочитал — не хуже, чем раньше, остальное читать лень.

  • TDD: как правильно писать спецификации (describes)
    0

    Либо использовать Junit5 аннотацию @DisplayName

  • Apple в 2019 году — это Linux в 2000 году
    0
    К чему тогда вся эта ветка комментариев?

    К тому, что WinKey можно использовать в хоткеях.


    Просто захотелось что-то написать не по теме.

    Просто захотелось написать что-то по теме. Тем более, что речь в том числе про железо.

  • Apple в 2019 году — это Linux в 2000 году
    0
    Хорошо, расскажи мне

    Спонтанно перешёл на ты? Волнуешься? ))


    как мне в CLion или Eclipse привязать действия на WinKey+T или WinKey+Alt+1 например.

    Скажу честно, не знаю. Я использую WinKey в шорткатах в контексте всей системы, не в какой-то конкретной программе.

  • Apple в 2019 году — это Linux в 2000 году
    0
    А на винде вместо cmd — WinKey
    Нет, конечно, с чего вы взяли?

    Ну как, посмотрел на клавиатуру, а там WinKey. Посмотрел на клавиатуру от макбука, а там нет WinKey. Вот какая-то такая логика.