【问题标题】:Do ruby on rails programmers refactor?ruby on rails 程序员会重构吗?
【发布时间】:2010-12-25 00:08:22
【问题描述】:

我是一名 Java 程序员,一年前开始编写 Ruby on Rails。我喜欢语言、rails 本身以及它们背后的原则。但困扰我的是 Ruby 程序员似乎不重构。

我注意到 Ruby/Rails 中严重缺乏重构工具。一些 IDE,如 Aptana 和 RubyMine 似乎提供了一些非常基本的重构,但与 Eclipse 的 Java 重构相比并没有什么大不了的。

还有另一个事实:大多数 Railers(甚至是专业人士)更喜欢一些轻量级的编辑器,比如 VIM 或 TextMate,而不是 IDE。好吧,使用这些工具,您只需零重构(只有带有查找/替换的正则表达式)。

这给我留下了 Rails 程序员不重构的印象。当然,这可能只是一种错误的印象,但我想听听专业使用 ruby​​ on rails 工作的人的意见。

你会重构吗?如果你这样做,你是怎么做的,用什么工具?如果没有,为什么不呢?

【问题讨论】:

  • 所有程序员重构。这就是程序员和代码猴子之间的区别。当然除了 Jon Skeet,他的代码在编写时会自行重构,并且在第一次编译时是最优且无错误的。

标签: ruby-on-rails ruby refactoring


【解决方案1】:

肯定是的,工具差异有不同的原因


为 Java 构建 IDE 更实用

Java 的严格类型和文档化语法使得编写语言解析 IDE 工具成为可能

Ruby 的鸭式打字和由 Yacc 源记录的语法使得这样做非常困难。

Java 更需要 IDE

Java 的冗长使得代码编写和代码重写工具成为人们所渴望的。

Ruby 极其简洁的特性加上典型的无类型声明(当然它们确实与Type.new 内联)使这些事情成为可选的。

将两者结合...

因此,真的很难写加上实际上不需要的组合导致天平向人们最喜欢的编辑器倾斜。

我不想放弃 vi(1) 而使用 IDE,但我使用 Java 是因为我需要 IDE 来编写我的接口实现等,而且它解析 Java 的事实使它在代码中很有用完成。由于 Ruby 不能,而且我也不需要它,所以我坚持使用 vi(1) 和 TextMate。

总结

由于您没有埋没在代码中,因此可以通过一些合理的编辑来重构。但是关于“其他 Ruby 开发人员”的主题,我的 Ruby 问题是:为什么每个人(似乎除了我之外)都使用函数括号?因为在少数情况下需要它们,所以“不一致”令人不安?

【讨论】:

  • 很好的答案。关于函数括号的使用,我几乎总是使用它们,除非在使用诸如 Rails 验证之类的 DSL 时。没有括号,它们看起来像一条指令而不是方法调用。也许这就是我被教导的方式,但validates_presence_of :name 似乎比validates_presence_of(:name) 写在一行上更干净。我见过的大多数 Rails 代码都与此非常一致,但很难说每个人都在做什么。
  • 括号总是明确的,而没有括号的简单行总是英语。人们有普遍的偏好,而且背景总是起作用。特别是在 DSL 中,我们倾向于不使用括号:Rails Routes、RSpec、Rakefile、Gemfile、ActiveRecord Relations/Scopes、ActionController Filters、Sinatra。
  • @DigitalRoss 好答案。有一件事我有点困惑......我想知道,为什么 Rails 开发人员重构更少?假设由于我的域语言的更改,我决定稍微更改一个对象 - 我将不得不手动更改文件的名称,并在测试等中更改该对象的所有外观。在带有 IDE(如 Eclipse)的 Java 中,我只需更改文件名,其他一切都会自动完成。
【解决方案2】:

是的。

大多数 Rails 程序员首先尝试遵循测试,编写代码以通过测试,然后在进行下一个测试之前重构代码。

所有 rails/ruby 程序员……可能不会,但就这个社区的“氛围”或“感觉”而言,我会说这是一种被宣扬和实践的东西,以至于它发生的次数比不发生的次数多.

imo 不需要 IDE。对于 Ruby 和大多数 Rails 程序员来说,VIM、emacs 和/或 textmate 就足够了。我猜 Java 需要更多的编译或其他东西,不过我对此了解多少,因为我只用 Ruby 编程过。为什么所有 Java 程序员都使用 IDE(因为我是在概括)。

【讨论】:

  • pjammer 有一个很好的观点:作为 Ruby 文化一部分的测试鼓励测试,这会导致尽早且经常地进行重构。因此,我们通常不会让我们的代码变得臃肿到需要 IDE 的强大功能。
  • 那么,您手动重构,即使用编辑器移动代码?我同意这对于较小的重构(在红-绿-重构周期中)可能已经足够了,但是对于较大的设计更改,它不会变慢吗?
  • 就个人而言,随着应用程序的发展,我会根据自己需要的功能进行构建。当我添加第二个功能时,比方说,它可以使用第一个功能的一些方法(通常是一个或两个),我会将它们拉入 lib 库中自己的模块或类中。当他们更多地参与时,那就是你使用 gem 的时候......但是当你构建时,你会看到如何使用东西。所以是的,当我创建一个新模块时,老实说,我经常只是剪切和粘贴。至于文本编辑器,我们大多数人都知道键盘快捷键,这就是我们移动它们所需的全部内容(尤其是 vim)。
【解决方案3】:

RoR 开发人员做重构很多。但最重要的是,他们这样做是因为他们可以轻松做到。

如果你坚持 RoR 的主要原则 - 不要重复自己 - 并花一些时间在代码设计上(这意味着你没有碰巧创建大量的单体代码),没有什么能阻止你重写一个一段代码,无论你在想什么(泛化、加速、提高可读性等)。 Rails 的内置测试/基准测试/分析功能可随时检查您是否在不牺牲现有功能和工作功能的情况下实现了目标。

编辑器完全独立于代码,因此您甚至可以使用记事本进行编码(我不是命令行狂热者,我更喜欢 Gedit 等“图形”编辑器)。

【讨论】:

    【解决方案4】:

    在 Java 和 Ruby 上花费了很多时间(最近在 Eclipse 和 Textmate 之间进行了多次往返),我同意某些类型的重构在 Ruby 中更难。这与其说是因为 Ruby 的 IDE 较差,不如说是静态类型与动态类型的对比,以及为动态语言编写重构工具的难度。在很大程度上,手动/正则表达式驱动的重构在 Ruby 中比在 Java 中更容易,因为 Ruby 代码很简洁——只是更少——但是像重命名方法这样简单的事情在Ruby 就像它在 Java 中一样。到目前为止,Ruby 与 Java 的优势(imo)更大(您只需在生产环境中使用 Ruby 几个月才能真正感受到您会喜欢它的程度),但一个缺点是缺乏您在 IDEA 和 Eclipse 等工具中习惯的强大重构功能。

    编辑:为了清楚起见——我在 Ruby 本身中所做的重构并不比 Java 少,但似乎我对 Ruby 的需要更少。但是当我这样做时,我依赖单元测试而不是像在 Java 中那样的编译器。

    【讨论】:

      猜你喜欢
      • 2011-07-22
      • 2021-06-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多