我已经创建了一个简单的计算器,将帮助创建从桌面RPG探路者魔术项目。这里是完整的需求,如果您想要一个更简洁的版本,这里是一个播放器生成的流程摘要。
我一直在尝试进入F#和函数式编程。我来自一个强烈的面向对象的背景,很难忽视这些习惯。请关注这是否是惯用的F#。我很想听听是否有更好的方法来写它。如果你找到窃听器,我也很高兴知道。
我觉得更好的几件事就是DC的计算。我不知道只有在项目被匆忙的情况下,才能使用rush函数。我也试图找到一个地方,我可以应用功能构图,但我认为我需要所有的中间步骤,我停止。
let baseDC casterLevel =
5 + casterLevel
let rush dc =
dc + 5
let ignoreRequirements requirements dc =
dc + (5 * requirements)
let getBuildPrice basePrice =
basePrice * 0.5
let getTime basePrice =
floor (8.0 * basePrice / 1000.0)
let getMinBonusForNoCursed dc =
dc - 6
let buildDaysWhileAdventuring isRushed buildTime =
let adventuringBuildTime = buildTime / 4.0
floor (if isRushed then adventuringBuildTime else adventuringBuildTime * 2.0)
[<EntryPoint>]
let main argv =
printfn "%A" argv
let isRushed = true
let casterLevel = 1
let requirementsIgnored = 1
let basePrice = 5000.0
let buildPrice = getBuildPrice basePrice
let buildTime = getTime basePrice
let daysAdventuring = buildDaysWhileAdventuring isRushed buildTime
let DC =
match isRushed with
| false -> baseDC casterLevel |> ignoreRequirements requirementsIgnored
| true -> baseDC casterLevel |> ignoreRequirements requirementsIgnored |> rush
let minDC = getMinBonusForNoCursed DC
printfn "Min/DC: %i/%i Cost: %.2f Days/Hours: %.1f/%.1f" minDC DC
buildPrice daysAdventuring buildTime
0 // Return code发布于 2017-05-01 00:40:19
我看到了一些问题,最值得注意的是,你有很多神奇的数字。
设baseDC casterLevel =5+ casterLevel if dc = dc +5 ignoreRequirements requirements dc = dc + (5 * requirements)让getBuildPrice basePrice = basePrice * basePrice getTime basePrice =楼层(8.0 *basePrice/ 1000.0)让getMinBonusForNoCursed dc = dc -6 buildDaysWhileAdventuring isRushed buildTime = let adventuringBuildTime = buildTime / 4.0层(if isRushed rush basePrice* 2.0)
按照顺序,我看到:
5 + casterLevel:5是什么?dc + 5:5是什么?和1号一样吗?5 * requirements:5是什么?和1号或2号一样吗?basePrice * 0.5:0.5是什么?是1 / 2还是别的什么东西?8.0 * basePrice:8.0是什么?#5 / 1000.0:1000.0是什么?dc - 6:6是什么?buildTime / 4.0:4.0是什么?adventuringBuildTime * 2.0:什么是2.0,是4.0 / 2,是#8 / 2中的4.0吗?对于一个功能程序来说,这还不算太糟。我不喜欢您使用if多少次(我总是喜欢使用match),但是当处理布尔类型时,它做得很好。
https://codereview.stackexchange.com/questions/162040
复制相似问题