Задать вопрос
  • Для чего нужен полиморфизм?

    bingo347
    @bingo347
    Crazy on performance...
    Полиморфизм бывает разный:
    Полиморфизм подтипов - этот тип как раз таки и подразумевают в контексте ООП. Суть в том, что сущность некоторого класса так же может представляться базовым классом или интерфейсом. Это позволяет переиспользовать код, отдавая в один и тот же метод/функцию сущности с разными классами, но с общим интерфейсом.
    Параметрический полиморфизм - используется уже не только в ООП, но и в других парадигмах. Опять таки полиморфная функция принимает аргумент разных типов, при этом сам тип так же передается как параметр функции, а следовательно функция может оперировать составными типами на основе переданного. Или например возвращать результат того же или производного типа, сохраняя тем самым тип для вызывающего кода. Чаще всего представлено дженериками, но могут быть и другие формы (например template в C++). Как правило не имеет смысла в языках с динамической типизацией. А еще часто сопровождается контрактами на получаемый тип (например типами высшего порядка или типажами), что позволяет с одной стороны ограничить возможные типы, а с другой - воспользоваться характеристиками типа обусловленными контрактом.
    ad-hoc полиморфизм - способность функции предоставить разную реализацию в зависимости от запрашиваемой сигнатуры. Чаще всего выражено перегрузкой функций/методов. Как правило не реализуем средствами языка с динамической типизацией, хотя может быть реализован в рантайме (например в js функция всегда принимает произвольное количество аргументов и может проанализировать их в рантайме с помощью arguments).

    В общем случае полиморфизм нужен для переиспользования кода. Соблюдения практик SOLID и DRY не возможно без полиморфизма. Например в языке Go отсутствие полиморфизма в любом виде приводит к загрязнению кодовой базы и большому количеству копипасты.

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

    UPD: Примеры:
    правда я не шибко хорошо знаю конкретно Python, поэтому абстрактно напишу псевдокод:

    Полиморфизм подтипов, как уже говорил, это про ООП. Допустим у меня задача реализовать класс, который читает бинарные данные, проверяет, что они валидный utf-8 и выдает прочитанное как строку. Откуда он читает их? Да мне все равно, это не относятся к моей задаче. Конкретную реализацию я приму в аргументах, а уж откуда она будет читать, из файла или из сети - мне все равно. Главное чтоб эта реализация умела читать байты.
    // ok мне нужно что-то, что умеет читать байты, опишу это интерфейсом
    interface IByteReader {
      readBytes(): BytesIterator;
    }
    
    // и мой метод:
    readAsString(reader: IByteReader): string {
      var iterator: BytesIterator = reader.readBytes();
      // ну и тут как то с ним работаю, трансформируя байты в строку
    }
    теперь вызывающий код может передать в мой метод инстанс любого класса, реализующего мой интерфейс, и мне теперь не нужно дублировать логику чтения строки для файла и для сети.
    Еще один яркий пример тут - функция len() в Python, которая принимает любой тип реализующий одноименный магический метод.

    Параметрический полиморфизм, это про дженерики. Напишем 2 функции, обе будут принимать на вход массив, одна из них будет возвращать начальный элемент, а другая конечный. Но массивы бывают для элементов разных типов. Без параметрического полиморфизма, нам бы пришлось писать реализацию для каждого нужного типа, но благодаря ему мы можем это сделать в обобщенном виде:
    // T - это параметр типа
    fitst<T>(arr: [T]): Option<T> {
      if(arr.has(0)) return Some(arr[0]);
      else return None;
    }
    
    // давайте предположим, что некоторые виды массивов у нас могут быть бесконечными
    // тогда нам понадобится контракт, что можно передавать массивы только с известным размером
    last<T>(arr: [T]): Option<T>
      where [T]: WithKnownSize
    {
      var length: size = get_length(arr);
      if(length == 0) return None;
      else return arr[length - 1];
    }


    ad-hoc полиморфизм, это про перегрузку функций, пусть мы хотим функцию print которая умеет печатать числа и строки:
    print(value: string) {
      stdout.write(value);
    }
    print(value: int) {
      stdout.write(value.to_string());
    }
    Ответ написан
  • Перспектива рынка веб разработки с появлением Webflow?

    DevMan
    @DevMan
    перспективы цветут и пахнут: сейчас практически всё мигрирует в веб.

    но задающие подобные вопросы люди обычно стоят где-то в сторонке.
    Ответ написан
    Комментировать
  • Как реализовать иерархию категорий в урле django?

    @Realmixer
    Full stack Python (Django) web-developer
    URLs:
    path('<path:categories>/', viewsCategoryDetailView.as_view(), name='category')

    Views:
    def get(self, request, *args, **kwargs):
        categories = kwargs.get('categories').strip('/')  # 'cat/subcat/sub-subcat'
        categories = categories.split('/') # ['cat', 'subcat', 'sub-subcat']
        ...
    Ответ написан
    Комментировать
  • Как сделать так что бы написанный мной калькулятор на Java в Idea запускался на андроид устроистве?

    CellycoMobiles
    @CellycoMobiles
    indi developer @CellycoMobiles
    Как портировать ваше JavaFX приложение на Android и iOs читайте здесь.
    Активное комьюнити. Очень быстро отвечают на вопросы.

    Можно еще в web. Но это другой ответ.
    Ответ написан
    4 комментария
  • Знает ли кто то где найти разраба или готовое решение для WhatsApp/Telegram clone под Android?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Jabber разверните
    Ответ написан
    Комментировать
  • Какое направление выбрать?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Ищете вакансии в вашем городе.
    Питон или С++ разработчик.
    Ходите на интервью.
    Если устроитесь за первые десять интервью, значит действительно неплохо знаете.
    Продвигаете английский.
    Ответ написан
    Комментировать
  • Как привязать прогресс бар к проверки файлов на диске os.walk()?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ну вот объясните, или это тут надо отдельным вопросом задавать?
    Почему я нашел готовое разжеванное решение прямо по формулировке вашего вопроса в гугле в виде ссылки на отличную подробную статью?
    https://habr.com/ru/post/81532/
    Почему я нашел, а вы нет?
    Ответ написан
    Комментировать
  • За что забанили пользователя sprashivatel?

    pragmatik
    @pragmatik Куратор тега Тостер
    Как и вы, указанный пользователь является владельцем, еще как минимум 3 других аккаунтов, которые (как и ваши) были заблокированы за систематические нарушения правил данного Сервиса, включая самые грубые: оскорбления в адрес пользователей и сотрудников службы поддержки.
    Вот уж, воистину, "рыбак рыбака". Ваше поведение и характер нарушений настолько сходятся, что я бы заподозрил в вашем аккаунте его очередного альта.
    К сожалению, ваше требование разбанить указанного пользователя не подлежит удовлетворению.
    Ответ написан
    Комментировать
  • Почему нельзя поставить минус в статье?

    Boomburum
    @Boomburum Куратор тега Хабр
    Местный
    Судя по всему, кармы достаточно — поставить минус так и не получилось? Если нет, то попробуйте перезагрузить страницу, возможно, скрипты не прогрузились. Если не получается — напишите обращение в форму обратной связи с описанием окружения, возможно, какой-то баг.
    Ответ написан
    1 комментарий
  • Какая разница между базой в csv и sql?

    2ord
    @2ord
    Вставка/удаление невозможны без перезаписи файла CSV целиком.
    Ответ написан
    Комментировать
  • Какая разница между базой в csv и sql?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    csv - формат файла, sql - язык запросов. Как их можно сравнивать? При желании можно и к csv-файлу написать sql-запрос.

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

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    В IT диплом, как и любое образование в целом, все больше и больше становится просто бонусом. Сейчас не составляет труда за короткий промежуток времени базово оценить знания и навыки человека. Если ты хоть что-то знаешь и умеешь, способен решать задачи (не олимпиадные, лол), то у тебя не будет много проблем с трудоустройством.
    Ответ написан
    Комментировать
  • Нейросеть на WordPress?

    Jump
    @Jump
    Системный администратор со стажем.
    Нейросеть это компьютерная программа.
    WordPress это движок для управления отображением веб-страниц.
    Поскольку нейросеть не является веб страницей задача не выполнима.
    Ответ написан
    5 комментариев
  • Как оптимизировать код из многочисленных элементов принадлежащих одной переменной?

    @bbkmzzzz
    Использовать словарь, например.
    security_papers = {
      "акция": "1",
      "пай": "2",
      "офз": "3",
      "корпоративная облигация": "4"
      }
    user_input = str(input("Введите тип инструмента (Акция, ПАЙ, ОФЗ, Корпоративная облигация)"))
    if user_input.lower() in security_papers:
      print(security_papers[user_input])
    else:
      print('incorrect input')


    Оборачивайте код в тег code
    Ответ написан
    Комментировать
  • Не справляется nginx?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Итак, что мы имеем - туча всякого на одном сервере что уже плохо. Отличное время задуматься о масштабировании. Что можно сделать для старта:
    1. взять несколько более дешевых виртуалок
    2. разнести отдельно nginx, rabbitmq
    3. подумать о том чтобы избавиться от докера. последний раз я видел чтобы он хорошо работал в больших облаках вроде AWS ECS, но не на отдельных VPS
    4. настроить горизонтальное масштабирование и dns-round-robin


    также:
    • напомню что число портов ограничено и при большом числе одновременных соединений они могут тупо закончиться
    • слой с приложением тоже стоит масштабировать
    Ответ написан
  • Как закрыть доступ к сайту и настроить инвайты?

    DevMan
    @DevMan
    да фигня вопрос - прост при регистрации спрашиваем код инвайта.
    элементарно реализуется на любом яп'е.
    Ответ написан
    2 комментария
  • Как достучаться до вложенной функции?

    php666
    @php666
    PHP-макака
    Как реализовать такую архитектуру?
    это не "архитектура", а жуткий говнокод, за который надо быть по рукам или вообще уволить.
    Ответ написан
    3 комментария
  • До какого уровня нужно выучить программирование, чтобы получить хоть какую-нибудь работу?

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

    Из моего опыта, самый быстрый способ, какой я наблюдал - за полгода можно научиться до хоть какого-то уровня в C#/Js/SQL, чтобы найти первую работу, а там уже при достаточном уровне любопытства развитие идёт гораздо быстрее (например я, по ощущениям, за первый месяц на первой работе получил примерно такой-же объём знаний, что я получил за пару лет учёбы до этого).

    Сначала имеет смысл определиться, какое направление больше всего привлекает, попробовать по-немного разные сферы, а потом учиться в ней (не страшно, если на этом этапе будут ошибки - перейти в другое направление не сложно)
    Ответ написан
    Комментировать
  • Как сделать чтобы начисления происходили не зависимо от посещения пользователем сайта?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Что нужно поменять в скрипте, чтобы бонус выдавался раз в 24 часа,
    не зависимо от того зашел пользователь на сайт или нет.
    Ваще ничего, тупо отсчитывать количество дней от начала вашего "аттракциона невиданной щедрости" и выдавать это количество как монеты. Можно показывать только тогда когда юзер за ними зашел, ну и в тот же момент вносить в бд )
    Ответ написан
    Комментировать