Doge
Не совсем бизнес логика в традиционном понимании, но и не инфраструктурная вещь.
Λ ll И K X
ну можно сказать утилитарное
Doge
ну можно сказать утилитарное
Я всё же его ближе к бизнес логике определеяю. Инфрастурктурных задач никаких он не выполняет, по сути чистый сервис, который занимается именно вычислениями.
Doge
о круто и как вам?
Но в целом общее впечатление, что это именно что системный язык и прям обычную бизнес логику на нём писать не очень удобно. То есть, когда я пишу какой-то очередной подтверждатель заказов, мне не хочется думать о том, кто там как памятью владеет, какой у кого лайфтайм и т.п.
Just
угу
Just
я думал на досуге выучить системный язык еще какой, С++ 14-17 выбирал и Раст
Just
ну С++ у меня базовые знания есть какие-то уже, а вот Rust с нуля надо учить
Doge
угу
Но из плюсов - даже очень наивный и тупой код даёт очень приличную производительность за которую в других языках приходится биться.
Doge
я думал на досуге выучить системный язык еще какой, С++ 14-17 выбирал и Раст
Ну и общий совет, не надо пытаться на расте писать как на шарпах или джаве. Вот это стиль с гигантскими графами ссылающихся друг на друга обьектов тут очень плохо работает.
Doge
Надо его воспринимать как некое странное слияние си и ML-подобного языка с линейными типами и тайпклассами.
Doge
И проектировать приложение соответственно.
Диёр
у меня ощущение будто правое ухо чуток оглохло или с наушниками что-то не так когда пробую чуток баланс направо сместить сразу чувствуется что звук очень резко сместился, будто он и был на правильном месте, но когда обратно всё меняю кажется будто баланс совсем чуть-чуть налево уполз
Диёр
это у меня мозги плавятся или шо
Viacheslav
Just
вот тайпклассы мне там понравились в расте
Диёр
Это опенспейс зло
у нас не опенспейс
Диёр
тут комнатки по 3-5 чел
Mark
Неужели три человека могут создать столько шума, чтобы сидеть в наушниках?
Диёр
Нет, просто музыку слушаю)
Mark
Ужас!
Диёр
написал тесты, выдался диалог из ряда: -ты чо совсем тупой, ты зачем сюда посылаешь строки, но просто разные? -два кейса, где одна структура и разные строки, я хочу проверить что жсон собирается в зависимости от содержания, а не как-то по рандому -ты чо это же одинаковый кейс -а как бы ты протестил функцию, которая принимает число и говорит положительное ли оно? -только три кейса: -1, 0 и 1
Диёр
я мб рили тупой, но если я хочу побольше кейсов покрыть, то эт хуево или шо
Диёр
и почему достаточно 3 кейсов для функции, которая говорит что число положительное, тоже понять не могу
Диёр
над подумать
Ilya
Самое время предложить им property-based тестирование!
Диёр
Я кстати предложил
Hog
Я кстати предложил
Ты чо совсем тупой?
Ilya
и почему достаточно 3 кейсов для функции, которая говорит что число положительное, тоже понять не могу
Напиши им функцию, которая только эти три варианта обрабатывает, а в остальных случаях кидает исключение.
Диёр
на такой кейс скажут "ты рили тупой"
Ilya
:(
Hog
походу(
ну, я просто продолжил мысль - если ты "вручную" несколько разных строк посылаешь, то чем это будет отличаться от N строк при property-based?
Ilya
Я вообще не понимаю, зачем такую функцию тестить.
Диёр
хотя я по идее при написании теста не должен ведь знать чем оно жсончики делает, не делает ли сайдэффекты и не выкинет ли панику если строка не той длинны будет
Ilya
Поэтому переходи сразу к интеграционным!
Ilya
Покажи им доклад Молдована.
Ilya
Пересади на F#.
Ilya
К пятнице управишься?
Roman
А вот с property based testing не ясно — как их правильно писать, чтоб в тестах не дублировать полностью логику?
Hog
К пятнице управишься?
хотя бы к следующей! :)))
Ilya
Как я понял, в тестах должна быть верификация, а не полностью логика. Но я тупой.
Roman
Пересади на F#.
должно быть нетрудно. У них вроде open minded команда, да и переход с пыхи на фшарп не такой уж радикальный
Ilya
Ну тогда точно к этой пятнице управятся.
Диёр
А вот с property based testing не ясно — как их правильно писать, чтоб в тестах не дублировать полностью логику?
надо свойства тестировать типа отрицательное + отрицательное = отрицательное, положительное + положительное = положительное, положительное - отрицательное = положительное
Диёр
и всё такое
Roman
Как я понял, в тестах должна быть верификация, а не полностью логика. Но я тупой.
я вот пока тока вижу это так примерно: тестируемая функция выполняет логику, а мы эту логику дробим на несколько простых составляющих, которые видимо и являются свойствами. И потом тестируем)
Roman
но возможно я как-то не так вижу это
Диёр
мне на ффпрофит глава про проперти бейзед тесты облегчила понимание как оно работает
Roman
о, в финку опять ищут пхпшника на 4к евро
Диёр
кидай ссылку
https://fsharpforfunandprofit.com/posts/property-based-testing/
Ilya
Так проперти тестирование не на одной простенькой функции лучше делать, вроде бы. Слишком запарно.
Диёр
там сложно будет
Диёр
пока тесты напишешь можно всё приложение переписать
Ilya
Поэтому надо где-то посередение!
Ilya
Я всё понимаю, но проперти тестирование для функции isPositive -- это ж маразм. Проще открыть метод и прочитать одну строчку кода.
Mark
и почему достаточно 3 кейсов для функции, которая говорит что число положительное, тоже понять не могу
Сколько угодно можно писать, но лучше ограничиваться хорошо известными значениями и значениями на границах. Типа, проверяешь сортировку на пустом массиве, из одного элемента и из двух. Большинство ошибок уже здесь и выцепишь. А вот 5 элементов или 7 уже разницы нет.
Диёр
на гошечке пишешь хрен поймёшь же оно пуляет куда-нибудь или нет
Mark
Ну, я не знаю, что за специфика. Пытаюсь объяснить ход мысли товарища, если вдруг что.
Диёр
ну и вообще функция принимает interface{}
Диёр
как её тестировать то
Диёр
хотя заранее известно, какой именно тип туда должен долететь
Mark
Многие тесты — многие печали. Всякий рефакторинг из быстрого и приятного занятия превращается в медленное и мучительное. Код переписал, сломалось триста тестов. Уж лучше бы сломалось сто, всё легче.
Mark
Ну это на будущее. Тесты то для этого пишут, чтобы потом рефакторить можно было как бы безопасно.
Диёр
Ну это на будущее. Тесты то для этого пишут, чтобы потом рефакторить можно было как бы безопасно.
Ну так рефакторинг это изменение реализации без изменения спецификации. Вот я и проверил что спецификация правильно выполнена и от разных строк ничего не падает. Тем более я всего 2 или 3 раза эту штуку написал.
Anonymous
а изменение реализации может изменить функционал (если спецификация покрывает не все кейсы)
Dr. Friedrich
https://github.com/dotnet/fsharp/pull/6805#issuecomment-578721290 > dsyme > Note I'm not particularly interested in this change supporting the SRTP-laden code that does (largely pointless) over-abstraction of code in the name of "maximal sharing" or simulating category theory - this tends to serve little actual value and makes code highly obscure, and SRTP was never designed for these purposes. Indeed if possible I'd prefer to disallow or deprecate that kind of code.
Dr. Friedrich
Батюшка наш родной, Дон Сайм, хочет задепрекейтить функциональных астронавтов.
Ilya
Ну фсё, закапывайте фшарп.