Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如codeacademy课程所示,重构是否有性能优势?_Ruby_Refactoring - Fatal编程技术网

Ruby 如codeacademy课程所示,重构是否有性能优势?

Ruby 如codeacademy课程所示,重构是否有性能优势?,ruby,refactoring,Ruby,Refactoring,我目前正在学习CodeAcademy Ruby课程,并且已经进入了重构部分 例如 如果1是,那么单行程序更像是一种Ruby-ist方式。不过,您可以使用基准测试模块了解自己的速度 自己查看速度差异: require 'benchmark' iterations = 100000000 Benchmark.bm do |bm| # joining an array of strings bm.report do (1..iterations).each do

我目前正在学习CodeAcademy Ruby课程,并且已经进入了重构部分

例如


如果1是,那么单行程序更像是一种Ruby-ist方式。不过,您可以使用
基准测试
模块了解自己的速度

自己查看速度差异:

require 'benchmark'

iterations = 100000000

Benchmark.bm do |bm|
  # joining an array of strings
  bm.report do
      (1..iterations).each do
          if 1<2
      true
    end
    end

  end

  # using string interpolation
  bm.report do
      (1..iterations).each do
        true if 1<2
    end
  end

   # using string interpolation
  bm.report do
      (1..iterations).each do
         1 < 2 ? true: false
    end
  end
end

这是我的观点,但我不同意“保持简单并留下一个for循环似乎更有意义”这一观点。我想如果你为自己编写代码,而不是专业地编写代码,那就好了。然而,下面的约定是使代码可共享并可供他人访问。以个人舒适优先的风格编写的代码,无论背后的驱动因素如何,维护它或继承您的项目的任何人通常都不太喜欢使用它。我最不喜欢的,也是最常见的错误是忽略模块化的约定,导致不可导航的代码。尼尔,你说得很对,我想当我当时思考这个问题时,我更关心我自己的代码,因为我现在处于学习的早期阶段,这是一个错误。你是100%正确的,我应该考虑到其他开发人员,坚持惯例是一个很好的方法。感谢您让我思考这个问题。考虑到获得这些值所需的迭代次数,以及可能包含的比较运算符的成本,这里显示的没有任何有意义的差异会超出代码风格的考虑。但是+1表示如何在Ruby中进行测量,这始终是“什么更快?”的可靠答案。确切地说,我甚至没有指出最快的方法,因为差异非常小,如果您多次运行基准测试。。这三个编译器中的任何一个都可能是最快的。任何一个半好的编译器(我敢肯定至少Rubinius和JRuby+Truffle和JRuby,也可能是MagLev)都会完全优化所有的循环,这样你就基本上得到了相当于for(inti=0;I++;I<100000000){//empty}
的程序集。瞧,您正在进行基准测试,CPU增加寄存器的速度有多快。也许,编译器甚至会完全优化循环,因此您基本上是在基准测试
bm.report do;end
@JörgWMittag:Ruby(MRI)不编译-至少不编译为本机代码-不确定它将在这里优化什么。理论上,您可以用Ruby编写代码,使1大于2。所以这并不明显。@NeilSlater:Ruby是一种语言,语言不编译,编译器编译。有几个Ruby实现可以编译,事实上,目前所有的都可以(MRI是唯一一个没有编译的,但是MRI已经过时了,不再被维护)。JRuby+Truffle、JRuby、Rubinius、IronRuby、MagLev、MacRuby、Topaz,它们最终都编译成本地代码。几年前,Rubinius的一位开发人员进行了一次演讲,展示了YARV testsuite中的一个基准测试是如何编译成完全空的
       user     system      total        real
   5.850000   0.020000   5.870000 (  5.885982)
   5.780000   0.020000   5.800000 (  5.826295)
   5.600000   0.020000   5.620000 (  5.640354)