Задать вопрос
  • Как скомпилировать хоть 1 проект с гитхаба на с/с++?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    Судя по ридмихе, нужно просто уметь пользоваться gcc и make.
    Ответ написан
    Комментировать
  • Как обновить git для windows?

    Krasnodar_etc
    @Krasnodar_etc
    fundraiseup
    Download and install Git for Windows 2.37.2(2) [N/y]?

    Вас спрашивают, хотите ли вы установить новую версию? Нажмите "y" (от yes) и enter
    Ответ написан
    3 комментария
  • Какую IDE выбрать для разработки на Java?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    https://www.jetbrains.com/idea/
    CE подойдет
    Ответ написан
    Комментировать
  • Зачем задавать приватный модификатор доступа для свойств класса?

    Adamos
    @Adamos
    class VeryOpenOne
    {
    public $property;
    }
    $voo = new VeryOpenOne();
    $name = 'pro' . 'perty';
    $voo->$name = 'Пытаясь отрефакторить тот класс, ' .
      'ты хрен найдешь, что в этой строчке меняется эта переменная. ' .
      'Никакое самое умное IDE не поможет';
    Ответ написан
    1 комментарий
  • Зачем задавать приватный модификатор доступа для свойств класса?

    Maksclub
    @Maksclub Куратор тега PHP
    У вас очень логичный вопрос на счет сеттера: сеттер полностью уничтожает задумку с инкапсуляцией. Правильно это называется "семантическое нарушение инкапсуляции" — то есть как-бы мы инкапсулировали, но по факту назад открыли прямую запись в свойство напрямую. Все доводы "ну мы можем в сеттере валидировать" не корректны

    Правильным способом будет не использовать сеттеры. Вот моя статья на эту тему:
    https://habr.com/ru/post/469323/

    Более подробно: каждый класс нужно проектирвовать так, чтобы данные внутри были максимально связаны. Например каждый метод работать должен в хорошем случае с максимальным числом полей класса, тогда у него высокий cohesion... В тоже время снаружи наужно работать с максимальн омалым числом метода, тогда будет низкая связанность (coupling). Это пара принципов из GRASP.
    Когда вы делаете сеттеры и геттеры, то у вас данные внутри между собой почти никак не взаимодействут: с геттером работают снаружи, с сеттером работаю снаружи — весь класс нараспашку, а в нем в 100% случаев появляются данные, которые вместе не должны находиться и никак не связаны — анрушена и абстракция и инвариант и много чего еще...

    Про инвариант отдельно: например есть платеж, у него есть значение, с которым платеж инициирвоан (initValue), есть значение холда (holdAmount) и есть значение чарджа на списание (chargeAmount)
    Когда вы работаете с платежом, контролируя ивнариант в самом классе, то ваш каждый метод првоеряет др значения и позволяет перейти к др состоянию... методов будет 2-3, все инкапсулировано и безопасно.

    Например:
    class Payment {
         pub func charge(amount int) void {
              if (this.holdAmount < amount && this.initAmount < amount) {
                   throw new PaymentException('Unavailable charge amount')
              }
    
               if (this.status === PaymentStatus:finish) {
                   throw new PaymentException('Payment already fisnished')
              }
    
              this.chargeAmount = amount
              this.holdAmount -= amount
              this.status = PaymentStatus:finish
         }
    }


    Тут в одном методе полные проверки и класс сам контролирует все состояние внутри, также соблюдается закон Деметры. У даннго кода высокий cohesion (из GRASP), тк внутри идет плотная работа с внутр данными (значит они корректно тут закроекны) и низкий coupling ( с теми данными для данного кейса только один метод работы, все внутри)

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

    DevMan
    @DevMan
    лучше бы вам в голову пришло не пользоваться для этого регулярками, а нормальными инструментами: DOM и xpath.
    Ответ написан
    Комментировать
  • Как улучшить код, который проверяет наличие элемента в массиве и его значение?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Моя задача такова, хочу проверить, существует ли данный ключ в массиве


    Для этой проверки нужно использовать функцию array_key_exists

    Потому что

    $array = ['key' => null]
    isset($array['key']) // false
    array_key_exists('key', $array); // true
    Ответ написан
    2 комментария
  • Как спроектировать базу данных с расписанием?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    --пользователь (userId, username, group, year)
    Уже лажа, так как группы у вас отдельные сущности, со своими свойствами, группы будут связаны с пользователями через пивот таблицу, так как наверняка будут пользователи, входящие в разные группы.
    --курсы (интовое значение)
    Курс - это сущность. Какое интовое значение?
    --группы (количество групп напрямую зависит от курса)
    Ваще до ручки сколько и что от чего зависит. Группы так же связанны таблицей отношений с курсами, как с юзерами. Отдельный пивот.
    --дата проведения занятия
    Собсно таблица расписаний дата/начало/конец/айди группы/айди предмета/кабинет.
    В зависимости от нюансов, которых я не знаю, таблицы могут быть с меньшим отношением, например не многие ко многим, а один ко многим, что немного меняет структуру, но в целом смысл останется примерно тот же.
    Ответ написан
    5 комментариев
  • Как mysql/mariadb сортирует одинаковые значения?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В программировании различают понятие стабильная сортировка (stable sort) когда подряд идущие одинаковые ключи в массиве при сортировке также идут в той-же последвательности со значениями. Но это работает только для массивов.

    Реляционная алгебра не определяет никаких массивов. Собственно мы не знаем порядка как хранятся кортежи в таблице. Более того. Оптимизация пространства в БД может их тасовать как колоду карт. Тот-же вакуум в Постгресе. Или работа пакетов DBMS_SPACE для Oracle. Или любое delete+insert может сломать порядок который был раньше.

    Поэтому применительно к БД такой вопрос лишен смысла. Если вам нужен какой-то дополнительный ранг сортировки - вводите новое поле (sequence_num) и сортируйте по field,sequence_num. Тогда будет порядок.
    Ответ написан
    Комментировать
  • Почему лагает, глючит жесткий диск?

    @VT100
    Embedded hardware & software.
    Возможные ответы для тэга "железо":
    • Дрянной SATA-кабель?
    • Блок питания "устал"?
    • "Южник" (SATA-порты) "отваливается"?
    Ответ написан
    Комментировать
  • Как отсеять сгенерированные email?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    2yiwuei3827ryifg2i28ftiwegfi@yandex.ru или такие vladimir_saveliev_98@mail.ru, natalia_blohina_93@list.ru
    А с чего вдруг их не принимать? Они валидны и соответствуют RFC. Какой смысл их удалять? Или точнее, какой смысл удалять работающие емайлы? Вам не пофиг как выглядит емайл, если он рабочий? Или есть какой-то особый смысл в красивых емайлах?
    Ответ написан
    4 комментария
  • Какие подводные камни есть в том, чтобы просто подавить вывод "Trying to get property 'someProp' of non-object" через error_reporting?

    vesper-bot
    @vesper-bot
    Любитель файрволлов
    Best practice - валидировать входящие данные. И да, если что-то хотя бы теоретически возвращает null или ещё какую-то чушь, всегда проверяете, вернулась ли чушь, иначе рано или поздно огребете серьезный баг, и хорошо ещё, если последствия будут всего лишь падением пхп. Серебряной пули, естественно, нет, но есть статические анализаторы, которые могут помочь найти места в коде, где валидации на чушь не хватает.
    Ответ написан
    Комментировать
  • Нужна ли в университете дискретная видеокарта?

    yakovlev_13
    @yakovlev_13
    Шаманство, экзорцизм и некромантия.
    конечно нужна ) не только ж учиться)
    как говорится : Делу - время, потехе - видяха!
    Ответ написан
    3 комментария
  • Как правильно сделать свайпер в PHP?

    scottparker
    @scottparker
    ты же понимаешь, что в данном случае пхп лишь генерирует html-разметку беря данные из бд? ты можешь сделать этот же слайдер просто на html? если да, то посмотри какую разметку сделал (без применения js)
    Ответ написан
    Комментировать
  • Умножить один столбец на другой, а затем вывести сумму?

    iMedved2009
    @iMedved2009
    Не люблю людей
    SELECT SUM(сount_v * price) FROM table;
    Ответ написан
    Комментировать
  • Есть актуальные книги по Си?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    Бен Клеменс - Язык С в XXI веке
    Принц, Кроуфорд - Язык C
    Стивен Прата - Язык программирования C
    Хэзфилд, Кирби - Искусство программирования на C
    Ответ написан
    1 комментарий
  • Какой ноутбук выбрать для начинающего программиста?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    любой, который устроит лично тебя по бюджету, клавиатуре и монитору.
    Ответ написан
    2 комментария
  • На чем сейчас делают сайты с простым редактированием?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    просто собирать из блоков страницы

    А вы уверены, что вам нужны именно это? Судя по последнему предложению, предположу, что вам нужно просто добавлять/удалять товары-услуги и прочее. Не лучше вместо того, чтобы заставлять менеджера, с большой долей вероятности, обладающего максимум средним "чувством прекрасного", редактировать блоки, дать ему обычную формочку, через которую он будет добавлять/удалять данные, не меняя структуры сайта.
    В целом - с этом справится любая CMS. В том числе и WordPress. Либо что-то самописное.
    Вроде сейчас все делают на Node JS, но это не подразумевает удобное редактирование?

    А куча железной руды, песка и резины подразумевает автоматическую коробку передач? Ну, если из всего этого сделать машину, то возможно.
    Иными словами - нода просто голый инструмент, используя который программист может создать то, что нужно заказчику. В том числе и интерфейс для "удобного редактирования".
    Ответ написан
    Комментировать
  • Как спарсить m3u8 плейлист в массив на php?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    $arr = file("./playfile.m3u8", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);

    Каждая строка будет в отдельном элементе. Не благодарите. Нет, реально, не надо благодарности, потому что такие элементарнийшие знания... Учебники почитайте, что-ли.
    Ответ написан
    Комментировать