Тип конечно. Если F# выводит типы из всего, почему не воспользоваться?
module Client =
open System
[<Struct>]
type Id = { Value: Guid }
type T = { Id: Id; Name: string }
let create id name = { Id = id; Name = name }
let createId() = {Value = Guid.NewGuid()}
Функции create и createId без какой-то вообще аннотации типов имеют правильный тип. Разве не красота?
HFT>Функции create и createId без какой-то вообще аннотации типов имеют правильный тип. Разве не красота?
неплохо, хеллоуворды рулят)))
Я просто представляю сколько времени нужно, чтобы построить рабочее приложение на F# или там Elm,
достаточно взглянуть на примеры среднего масштаба.
А если нужно слегка изменить модель и логику, придется переделать практически всё.
редакторы F# поддерживают рефакторинг? например если удалить кейс из типа, то матчи подчистятся автоматом?
Здравствуйте, varenikAA, Вы писали:
AA>Здравствуйте, HFTMan, Вы писали:
HFT>>Функции create и createId без какой-то вообще аннотации типов имеют правильный тип. Разве не красота?
AA>неплохо, хеллоуворды рулят))) AA>Я просто представляю сколько времени нужно, чтобы построить рабочее приложение на F# или там Elm, AA>достаточно взглянуть на примеры среднего масштаба.
Судить о сложности проекта по размеру кодовой базе-неверно.
Какой-нибудь CRUD на несколько сотен форм может весить лям строк бойлер кода, а что нибудь вроде нахождения эквилибриума Нэша на вероятностных деревьях большой размерности, да еще с кодогенерацией под GPU для рекурсивного обхода дерева на GPU же-сильно меньше.
Только я гарантирую-что второе радикально сложнее и кривая обучения гораздо круче, несмотря на радикальное(разница в порядок и больше) меньшее количество кода
F# хорош для маленькой высокопрофессиональной команды(а уже для команды из одного человека и подавно-F# идеален), и для определенных предметных областей без требований к low latency. Хотя и в таком случае проще бывает прототип на функциональщине накидать для проверки гипотезы, а потом его тащить на императивщину, тратя часто бОльшее количество времени, чем написание самого прототипа(сужу по личному опыту). AA>А если нужно слегка изменить модель и логику, придется переделать практически всё.
Да ну нафиг. Если делать в чистом функциональном стиле, без аннотации типов, то изменения буду только в определении типов, да в местах явного использования этих типов(где есть аннотации либо использование имени типа). Всё.
Пишешь на F#-используй автовывод типов по максимуму! Указал тип там, где это не нужно на F# для компиляции-это автоматом говнокод, бить по рукам указкой!
AA>редакторы F# поддерживают рефакторинг? например если удалить кейс из типа, то матчи подчистятся автоматом?
Не, такого в Rider вроде нет. Компиляция все покажет
Общее правило: чем меньше зона видимости, тем короче имя. Т.е., для локальной переменной в блоке сойдет и id, и даже просто i. А для глобальной переменной имя должно быть descriptive.
Здравствуйте, HFTMan, Вы писали:
HFT>Судить о сложности проекта по размеру кодовой базе-неверно. HFT>Какой-нибудь CRUD на несколько сотен форм может весить лям строк бойлер кода, а что нибудь вроде нахождения эквилибриума Нэша на вероятностных деревьях большой размерности, да еще с кодогенерацией под GPU для рекурсивного обхода дерева на GPU же-сильно меньше. HFT>Только я гарантирую-что второе радикально сложнее и кривая обучения гораздо круче, несмотря на радикальное(разница в порядок и больше) меньшее количество кода
Ты случайно не путаешь просто объёмный код со сложностью алгоритма? Это как-бы тёплое с мягким.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Pzz, Вы писали:
Pzz>Общее правило: чем меньше зона видимости, тем короче имя. Т.е., для локальной переменной в блоке сойдет и id, и даже просто i. А для глобальной переменной имя должно быть descriptive.
i более привычно для индекса итератора, те если увижу i подсознательно буду вокруг искать цикл