我是Rust的新手,我一直在重新解决Project Euler个问题。问题是,我意识到我一直在构建整数类型(主要是i32
- i64
)以适应我的陈述; for iterators,in循环,函数输入,条件等等。这是正常的吗?
我猜我在通过PE进行一次性功能并主要使用动态类型语言时做错了。
我总是尝试使用尽可能小的(或最可行的)整数类型来解决问题,我觉得我应该只使用i64
来完成所有事情,而不是那么多地使用它。< / p>
哪种更好/推荐的方法,覆盖i64
类型或在代码中使用强制转换的合理整数类型?
编辑:在我想澄清的评论之后,这不是一个代码审查查询,而是关于最佳实践和可读性问题,因为这两个选项中的哪一个是首选。我认为,如果没有在循环中误用,铸造的性能影响可以忽略不计。
不相关的PS:我正在使用一系列素数因素做P4,结果没有任何回文是两个4位数素数的产物,而两个3位数素数的最大值是99899
答案 0 :(得分:5)
我总是尝试使用尽可能小(或最可行)的int类型来解决问题
你在这里。优化。 (因为你为什么还要那样做?)
Rust鼓励您考虑整数类型。这样可以更好地定义和显式的程序行为,有助于捕获某种类型的错误并让您进行优化。
但是来自一种不那么细致的语言,你可能会过度使用它。这就是我们的思维常常有效的方式:当我们遇到一些新的能力或技能时,我们会尝试在任何地方使用它。
这通常是Rust的一个问题。该语言将为程序员介绍某些新概念(安全借用,零成本期货),然后作为人们,我们匆匆忙忙地混淆我们几乎没有经验的东西,将自己借入一个角落或绝对无处不在地使用期货。
您正在尝试使用尽可能小的整数类型优化您的程序,即使您觉得它会让您的生活变得不那么舒服。如果您在stackoverflow上提出这个问题,那么我就会说出来,并且说,是的,你投入太多了!
你可能知道Knuth的座右铭,&#34; 过早优化是万恶之源&#34;。
不要让过度优化破坏您的编程体验。只有在您熟悉它时才能进行优化。当你想要时!
如果你害怕过早的悲观情绪,那么就要省去对算法的恐惧。请记住,在大多数动态语言中进行编程时,您不必过度优化自由,但动态语言程序仍然有效。