• Шпаргалка для собеседования .Net
    0
    Вообще строка это просто класс String у которого все его методы не изменяют его внутреннего состояния а только возвращают новый инстанс этого класса. Вы собственно можете сами такой же иммутабельный класс как String написать. Например так (Так для справки — всегда валидируйте входные параметры в публиных методов в реальном коде. Тут просто примитивный пример):
        class MyString
        {
            private readonly char[] _value;
    
            public MyString(IEnumerable<char> value)
            {
                _value = value.ToArray();
            }
    
            public MyString Add(MyString str) => new MyString(_value.Concat(str._value));
    
            public MyString Reverse() => new MyString(_value.Reverse());
    
            public override string ToString() => new string(_value);
        }
    
  • Математика, красота, любовь — история одной валентинки
    0
    Первым делом убрать всякие магические константы. Сделать вывод буквы более универсальным. Кривые Безье и так в типографии используются — вполне вероятно что можно найти готовую библиотеку с данными для них для любой буквы на любом языке и через эту библиотеку опорные координаты сделать чтобы можно было любой текст выводить. Сейчас не до того. На работе делаю важную вещь + по вечерам делаю сложный пет проект. Имена переменных поменял бы еще. Да там даже на первый глаз много что можно сделать лучше. Например я сейчас уже не понимаю зачем я через делегаты сделал вызов логики. Это можно убрать и сделать прямой вызов.
  • Математика, красота, любовь — история одной валентинки
    0
    Спасибо
  • Как Amazon тратил по $500 млн на разработку провальных игр и почему ничего не вышло
    +1
    При прочтении статьи у меня почему-то начали всплывать ассоциации с нынешним Disney. Прям есть что-то такое Диснеевское.
  • Почему в InVision затаскивают микросервисы обратно в монолит
    0
    Про «Идиократию» в точку. Хотя у меня лично пословица вспоминается: Научи дурака богу молится — он себе лоб расшибет. Тобишь будет делать неправильно.
  • FizzBuzz по-сениорски
    0
    Хватит уже с ветрянными мельницами воевать. При старте приложения тот же SimpleInjector проверяет валидны ли все зависимости. Как и AutoMapper можно при старте прогнать на валидность все маппингов. Просто научись в уже в стартапе это прописывать и все. Реальная проблема может возникнуть только с либами что подключаются когда уже приложение запушено. Плагины всякие. С таким мне приходилось работать только когда сервер для игры писал. Обысно в Тырпрайсном приложении никто никаких либ не загружает в рантайме.
  • История английского языка буквально на пальцах
    –1
    Ми ми ми какая милота :)
  • История английского языка буквально на пальцах
    0
    Рекоменду Метод Тичера от puzzle english. Годнота. да и сами Puzzle English норм. Ну и DuoLingo я сам сейчас занимаюсь. Тоже прикольная вешь.
  • Так ли токсичен синтаксис Rust?
    –2
    Хай, родной — оцени уровень ненависти к себе — у сбера есть школа 21 и там есть люди что учатся. Тобишь они идут дофига времени учится у сбера чтобы потом работать на сбер. Фаталити! :) Если серьезно — зря ты так банки ненавидишь.
  • Коллеги, вы меня огорчаете
    –1
    Я мокаю X чтобы протестировать Y. Надо свой код протестировать на то как он себя ведет с различными входными данными. Если ты не умеешь писать чистый код и у тебя Ввод Вывод ака IO перемешан с твоей логикой то ты ССЗБ.
  • Коллеги, вы меня огорчаете
    –2
    Все фигня кроме ёжиков потому что ёжики не фигня. Ты Балдурс Гейт 3 видел? Я смотрел стримы и по моему годнота. Хочу поиграть ток ранний доступ и забагованно все к чертям. Да и только первый акт открыть. Я теперь жи буду это — в нетерпении ждать пока не выйдет полная версия. В принцыпе пока что можно в Дивинити 2 поиграть. БД 3 таки очень на Дивинити похожей вышла. Один фиг, растравили мне душу теперь руки чешутся по скорее поигать.
  • Коллеги, вы меня огорчаете
    –1
    Вообще с тестами это на практике приходит. Я лично вижу и как сделать чтобы покрыть тестами и какие граничные варианты. Начиная писать код с желанием максимально покрыть его тестами и сделать поведение предсказуемым я потихоньку научился код писать тестируемым и расширяемым. Тесты они меняют твой стиль кода и начинаешь в принцыпе писать код так чтобы он был тестируемым и с маленькими понятными Юнит Тестами.
  • Коллеги, вы меня огорчаете
    0
    Вообще фишка маленьких чистых методов и функций (вроде того же метода на сравнение по From и To) что для них можно такие же маленькие и Проперти базед тесты писать.
  • Коллеги, вы меня огорчаете
    0
    Почему нельзя код что тут на скриншоте вынести в функцию и покрыть ее проперти тестами? Почему нельзя замокать веб сокет и прочую петрушку? На самом деле надо завязывать — один фиг без глубокого погружения и не видя всего кода со всей задачей мне сложно тебе рассказать как тут правильно сделать.
  • Коллеги, вы меня огорчаете
    –3
    А ты почему проявляешь пассивную агрессию? Ты чего такой токсичный? Что это за грязные намеки такие, а?
  • Коллеги, вы меня огорчаете
    0
    Это как раз пример «логов вместо отладки» который я говорил. Когда хочется в логах видеть, как идет флоу и в какой момент он пошел не так, как должен был. Юнит тесты тут вообще не при чем, эта функциональность на регрессе проверяется.

    Так тестами можно было этот флоу описать. Что если вот так то должно делаться вот так. Если есть входные и выходные данные из логов то можно было реально с ними продебажить в специально созданном тесте — просто в моки и стабы данные нужные выставить и дебажить. Ну как тест — это уже просто экспериментальный запуск. Хотя там такое, я всего кода не вижу. Может там дофига внешнего взаимодействия и написать моки/стабы был бы дикий гемморой.
  • Коллеги, вы меня огорчаете
    0
    Ты чего такой токсичный? Если там этот кусок кода для тебя был как родной и тебя эта моя фигня сильно задела то прости. Забей вообще на мой комментарий. Люблю тебя.
  • Коллеги, вы меня огорчаете
    –1
    В этом куске кода вообще все что происходит это взаимодействие одного офсета с другим + откуда-то timeZone прилетает + логи лишние.
  • Коллеги, вы меня огорчаете
    –1
    Да забей, про фу говнокод это была шутка. Обычный такой середнячек. Я тебе более ООП вариант предложил. Тут более процедурный. Можно вообще весь этот метод в пределах класс PikapTimeSlotOfset поместить а логи оставить только снаружи на входные данные и получившийся результат.
  • Коллеги, вы меня огорчаете
    –2
    Тут еще у вас логи странные. Надо тесты писать. Логи пиши на выходе из вне (сеть файл) либо при отправке результата во вне (сеть файл) внутри самой системы это странно потому что и так можно зафиксировать результаты при известных входных данных через тесты. Нужен тесто что при таких вот входных данных вот такой вот итоговый результат получаем. Ну и новый разраб что придет увиде что вот тест говорит что если вот так то так а не будет по странным логам которые по середине логики торчат бродить.
  • Коллеги, вы меня огорчаете
    0
    Не понимаю, давай код.
    Так просто превратить весь этот кусок кода в функцию которая возвращает это офсет как свой результат. Вместо того чтобы в этом куске кода в нескольких места его устанавливать. Я так понял это не сработает потому что ниже и выше он и опять высталяется или что-то в этом роде. Не видя всего кода сложно сказать.
  • Коллеги, вы меня огорчаете
    –1
    А вот это с моей тз не улучшение, а ухудшение. Констуктор принимает минимум информации который ему нужен, про вот эти LocaleFrom он не знает и знать не должен, это вообще не его зона ответственности.
    Хм, тогда почему у конструктора уже есть параметр localeFrom?
  • Коллеги, вы меня огорчаете
    –1
    Тут надо целиком смотреть. Если бы я знал все варианты и всю задачу то возможно сделал бы все на типах без огромных ифов и вставлением в процедурном значении в трех местах этого офсета. Я так понимаю помимо этого куска кода который можно было бы в функцию завернуть он там еще в двух местах выставляется? Про код конструктора — ну метод Copy тогда. Ты так и так эти параметры в этот конструктор передаешь. Может ты меня не понял. Я имел в виду для удобства добавить доп метод в конструктор который вызывает конструтор этого же класса через: this( просто с доп параметрами. И таки да — обязанность конструтора создавать объекты из набора каких-то данных. Тут все в порядке. Он этим и продолжает заниматься просто новый набор входных параметров приобретает.
  • Коллеги, вы меня огорчаете
    –1
    Я вообще по тебе, хирролоту и по доге соскучился. Надо в офтопик возвращаться. :) Видел запись где хиррлот выступает на ютубе с такими длинными волосами. Прикольно. Такой милый няша. Ми ми ми.
  • Коллеги, вы меня огорчаете
    –3
    Тыж мой маленький, пузатенький, сладенький пирожочек. Просто ты меня игнорил вот и хотел привлечь внимание. XD
    Не видя полностью код и не зная полностью контекста и задачи сложно. Вообще у PickapTimeSlot есть свой тип добавить в этот тип PickapTimeSlotOfset сравнение по полям From и To. Дальше уже в условии проверять через вызов этого метода. Не делать выставление через вложенный if а просто сделать метод и возвращать нужный pickupTimeOffset. Сделать проверку в начале и в начале запись в лог и прерывание метода. Тогда не будет вложенных if и сразу понятно что с этого место дальше просто уже ничего не выполняется. Добавить в PickapTimeSlotOfset доп конструтор который принимает другой объект и вот эти timeZone, LocaleFrom. В общем мелочи такие всякие. Ну это так, возможные улучшения на первый взгляд.
  • Коллеги, вы меня огорчаете
    –3
    Господи что за говнокод. Вы так в прод пишите? Хотя кто бы говорил. У нас и похуже код есть. Да что уж там, у нас в проде вообще логи уровня Information и ниже не пишутся. Это если что не мое решение.
  • Меня перевезли в другую страну и через две недели выставили на мороз — потому что передумали нанимать
    0
    Ну на самом деле даже более простой вариант — «Должна быть одна причина по которой должен поменяться код этого класса» это такое себе определение. Довольно расплывчатое. Для того же репозитория пользователей это будет что-то вроде «Изменился способ работы с хранилищем где лежат пользователи» так и может быть набор причин — Изменился способ сохранения пользователя. Изменился способ поиска пользователя в хранилище (БД).
  • Коллеги, вы меня огорчаете
    0
    Куда идти? Кого бить? А вообще, тут я узнал что я внезапно Гном-Воин. Хотя вроде как работаю магом и люди меня считают тролем. Да фигня это все ваши психологические тесты в интернетах, ИМХО.
  • Коллеги, вы меня огорчаете
    0
    Это может потому что у одного сладенького пирожочка кривые руки? :)
  • Коллеги, вы меня огорчаете
    0
    По статистике того же круга — в Мск средняя зп 160к. Для всего айти вместе с 1С и тестерами ручниками. Не надо тут!
  • Коллеги, вы меня огорчаете
    0
    Как вы протестировали бы Х (например метод для деления целых чисел). Какие граничные случаи тут есть. Моки чем от стабов отличаются. Какие библиотеки для тестирования, для геренерации тестовых данных использовали. Ну вот в общем.
  • Scala мертва?
    –1
    Расказы про F# у меня всегда вызывают улыбку потому что язык вообще никакой да еще и абсолютно мертвый. Количество ПР да и вакансий раз в 5 меньше чем даже у Хаскеля.
  • Сказка о парадигмах программирования
    0
    Хм, не надо очень широкое понятие объекты сужать до того что под ним в Java понимают. Как собственно и типы это очень широкое понятие.
  • Почему так важна иммутабельность
    +2
    Про иммутабельность без упоминания ФП. Хм, вау.
  • Как некорректное делегирование отравляет IT-индустрию
    –1
    Что-то часто вижу статьи от VDSina. Хотя, один фиг статься хорошая так что норм.
  • Мне надоело, что индустрия зависит от прихоти создателей языков программирования. Сообществу нужно больше власти
    +1
    О какую годноту на хабр подвезли. Спасибо вам однако!
  • Почему разработчики влюбляются в функциональное программирование?
    –3
    Я вам пытался объяснить. До вас все равно не доходит. Как об стенку горох. Смысла учить таких ограниченных людей как вы не вижу.
  • ВОЗ считает, что выгорание на работе стало большой проблемой
    +2
    Хм, вообще выгорание это про завышенные ожидание от начальства и про попытки эти ожидания оправдать. Типо начальник решил пообешать заказчику что на неделю сделаете и вы стораетесь во всю сделать за неделю. Не успеваете, нервничаете. Перерабатываете. Перегораете. Выгорание явный признак плохого начальника. Если у него часто выгорают подчиненные значит это некомпетентный руководитель и его надо менять. Все.
  • Почему разработчики влюбляются в функциональное программирование?
    –1
    Заучили баз ворды и теперь повторяете их как попугай. Тратить на вас время бессмысленно. Все равно не поймете.
  • Почему разработчики влюбляются в функциональное программирование?
    0
    Ну тут уже кидали ссылку на статью объясняющую что любая частично примененная функция ака каррированная, это по сути объект с одни методом. Ну а про то что ООП оно про стейт это вы в самое яблочко. Вся суть ООП это работа со стейтом и везде где надо работать со стейтом начинается в той или иной форме ООП. Да вон фул ФП либа doobie возвращает объект Conection котоырой хранит в себе стейт тех операций с БД что надо сделать. Дальше у него вызываются методы ака он передается функциям в качестве основного параметра и т.д. Да тот же List в Хаскеле это объект такой типичный. Просто вот что стейт обязательно мутабельный этот прям ЛОЛ. Даже в ООП Java тот те паттерн стейт реализуют через возврашение мового стейта. Тобишь вместо того чтобы мутировать текущий просто создают новый с новым стейтом.