写点什么

NetBeans:Ruby 开发者的新伙伴

  • 2007-11-01
  • 本文字数:2986 字

    阅读完需:约 10 分钟

NetBeans 是一个广受欢迎且功能强大的 Java IDE,由 Sun Microsystems 在 2000 年开放源码。随着用户社区的增长,如今已成为行业中一个主要的 IDE。在 2007 年,NetBeans 开始将功能扩大到支持许多其他语言,包括 Ruby 在内。

在这个系列中,你会看到 NetBeans 为 Ruby 开发者提供的许多便利,其中一些特性还是其他 IDE 身上找不到的。我们还会谈到 Ruby 工具项目的一些背景,获取 NetBeans 软件的必要信息,如何配置 IDE,以及如何为这个项目贡献力量。

为什么 Sun 投资于 Ruby?

Sun Microsystems 向 Ruby 如此大手笔地投入可能有些令人惊讶,毕竟 Ruby 作为一种语言与 Java 有所竞争。为了理解 Sun 的动机,我们需要把 Java 看作是一个平台。Java 不仅是一门编程语言,还是一个虚拟机以及一整套 API。与过去不同,如今的 Java 虚拟机(JVM)支持多种语言。JVM 不再只是 Java 一家的事情,Sun 在 JDK 6 中捆绑了 Rhino JavaScript 解释器也明确体现了这一点。

Sun 认识到动态语言的价值——Java 语言仍然是大型企业应用的最佳选择,但 Ruby 这类动态语言在特定领域中非常高效,例如原型验证、Web 开发,或者粘合各种应用。在 2006 年,Sun 雇佣了 JRuby 项目的主要开发者——Thomas Enebo 和 Charles Oliver Nutter——去进一步探索将 Ruby 集成到 Java 平台的不同方式。(JRuby 是完全用 Java 编写的一个 Ruby 实现。)2007 年 6 月发布的 1.0 版标志着 JRuby 项目达到了一个重要的里程碑。

使用 JRuby,开发者可以得到 Java 平台的许多优势,比如访问 Java API 和方便的部署。Java 平台存在着大量的类库(其中大多数是开源的),因此 Ruby 开发者如果在 JRuby 之上运行 Ruby 代码,就能够享受到直接访问这些类库的便利。JRuby 能将 Ruby 带到之前不曾进入的领域。能想象在大型机上运行 Ruby 吗?JRuby 使之成为可能。Java 平台有许多解决伸缩性、安全、维护、部署等等企业应用问题的方案,同样由于 JRuby,Ruby 开发者也能够从中得益。

Sun 总是通过 NetBeans 为它的各种技术提供工具支持,JRuby 也不例外。即使你是纯粹的 Ruby 或者 Rails 开发者,对 JRuby 一点都不感兴趣,NetBeans 仍然是一件合适的工具。NetBeans Ruby IDE 用 JRuby 作为默认的运行时,但你可以在选项对话框中将 JRuby 换成原生的 Ruby——只要告诉 NetBeans 你的 Ruby 安装在哪里。因此无论是想探索动态语言领域的 Java 开发者,还是对 Java 一点都不感兴趣的 Ruby/Rails 开发者,NetBeans 都是值得尝试的。

NetBeans 中 Ruby 支持的三大亮点

让我们先看看我觉得在 NetBeans 中开发 Ruby 极其有用的三项特性:

1. 无处不在的代码完成

“代码完成”是一个上下文敏感的弹出窗口,给用户提示一些最可能的方法、类或者模块。用户可以在编辑器中按下“Ctrl-Space”来调用它。代码完成是 Java 开发者们熟知并深为喜爱的——所有现代 Java IDE 都提供了这个功能。然而,对 Ruby 来说,实现一个完善的代码完成功能是一件困难的任务,因为在 Ruby 语言里类型是没有声明的。因此 IDE 采用推断的方法去猜测类型,并据此提供代码完成中的选项。

代码完成会随着你的打字而减少可选项的数量,直接回车就可以把选中的文字填到编辑器里。

你可以看到每个方法的模块,以及方法接受的参数。除了帮你快速地补完方法 / 类 / 模块的名称,代码完成还可以给你帮很多忙。其中很有用的一项就是代码完成会显示每个类、方法、模块、关键字等等的文档(RubyDoc)。

对于初学者和从其他语言迁移过来的开发者,近在指端的文档是特别有帮助的——你可以用代码完成功能一边开发一边学习 API。这样去学习一门语言及其 API,比起预先学会所有的细节的方式要友好得多。而且,许多开发者都喜欢边实验边学习,Ruby 干净整洁的语言和 API 会让这个过程更加容易更加愉快。

代码完成在你输入 Require 语句的时候也能发挥作用:

NetBeans 的代码完成还有一个很有用的特性,它支持正则表达式。除非你能记住正则表达式所有的符号组合,不然这个特性是很便利的“

类似地,如果你记不住一个 $ 变量的名字和意义,或者 % 开头的转义代码,NetBeans 会帮你:

我在这里仅仅介绍了一些基本的特性,代码完成还有很多很多办法让你日子过得轻松一些。在用 NetBeans 进行 Ruby 开发的时候,你绝对会发现 Ctrl-Space 是你最爱用的快捷键。

2. 图形化的 Ruby 调试器

多数 Java 开发者都离不开调试器。然而,Ruby 的调试一直都是一大难题。NetBeans 给 Ruby 提供了一个图形化的调试器,与 Java 调试器很相像。你可以在代码里插入断点,然后以调试模式运行程序,程序就会如愿在第一个断点处停下来。此时你可以观察各种视图,如本地和全局变量;你可以加入监视条件;查看调用栈;切换线程,等等。如果你把鼠标停留到代码中的任何元素上,该表达式的当前值就会被计算出来立即显示在你面前。

在上面的截图中可以看到,NetBeans 还支持 RHTML 调试,你可以很方便地一步步检查 RHTML 页面。

3. Ruby 重构和快速修补

重构 Ruby 代码一直都繁琐到令人痛苦:要想改一个方法名,你不得不把它出现的所有地方都改一遍。在 NetBeans 里这个过程被自动化了,你可以搜索任何方法 / 类 / 变量的使用情况,也可以调用重命名重构功能去修改元素的名称。下面是使用查找使用情况命令的一个例子:

重命名重构功能让你在一个专门的视图里修改所有引用:

NetBeans Ruby 支持在以后的版本里,还会提供其他重构功能,包括提取方法、提取本地变量等等。

IDE 有时候会检测到代码里的变量冲突,可能使代码不符合用户的意图。在这种情况下,IDE 可以提供一个“快速修补”,让用户便捷地修正代码:

在上面的截图中,块变量和本地变量的名字相同,会导致代码出现副作用;于是 IDE 向你提供将变量改名的选项去解决这个问题。

这里只是 NetBeans 让你过得更加轻松的几个例子。我会在本系列的后续文章中继续介绍其他编辑功能。

从哪里获得 NetBeans Ruby IDE

要获得 NetBeans Ruby 支持有几种方式。其一是访问 NetBeans 6.0 下载页面获取 NetBeans 完全版,里面已经包括了 Ruby 支持: http://dlc.sun.com/netbeans/download/6.0/milestones/latest

如果你只想安装精简版的 Ruby IDE,你可以从这里下载: http://deadlock.netbeans.org/hudson/job/ruby

获取 Ruby 模块的还有一种方式是先安装基本的 Java IDE,然后转到 IDE 中的插件管理器(Tools | Plugin Manager),让 NetBeans 从网上下载并安装各种模块。

目前,NetBeans Ruby 支持还只是一个预览版。不过我们知道很多开发者已经在商业应用开发中使用它,还有很多 Bug 等着在最终版中修复。如果你发现任何 Bug,请向 NetBeans 的 Issuezilla 系统报告: http://www.netbeans.org/kb/articles/issuezilla.html

更多信息

你可以在 Wiki 页面上找到 NetBeans Ruby 支持的更多信息。

我们也录制了一些截屏录像,重点演示了各种新特性: http://www.netbeans.org/download/flash/jruby_on_rails/jruby_on_rails.html http://www.netbeans.org/download/flash/jruby_editing/jruby_editing.html

其他演示和教程请移步 Ruby 文档主页

在本系列的后续文章中,我们将讨论更多 Ruby 支持的特性,以及其他一些主题,比如如何影响这个项目和它的未来计划。与此同时,请务必试试 NetBeans 中的 Ruby 支持。如果你经常用 Ruby 开发,你会发现 NetBeans 正是你一直在寻找的 IDE!

查看英文原文: NetBeans: Ruby Developer’s New Best Friend

2007-11-01 23:363320
用户头像

发布了 225 篇内容, 共 63.5 次阅读, 收获喜欢 50 次。

关注

评论

发布
暂无评论
发现更多内容

N皇后问题的回溯法实现(C++)

老王同学

用Queue实现Stack,Moya网络框架,Sublime列操作,网络通信协议 非阻塞网络I/O NIO 数据库架构原理 John 易筋 ARTS 打卡 Week 11

John(易筋)

ARTS 打卡计划 数据库架构原理 网络通信协议 Moya 非阻塞网络I/O

第九周总结

晨光

Android |《看完不忘系列》之okhttp

哈利迪

android

这是我迄今为止读过的最有价值的技术书,却一行代码都没有

废材姑娘

程序的机器级表示-算术与逻辑运算

引花眠

计算机基础

入门WebGL,看这一篇就够了

Geek_6y2vrc

大前端 WebGL

Docker 网络

北漂码农有话说

Docker

Python 多进程之间共享变量

AlwaysBeta

Python 进程

你该知道的Docker-compose

北漂码农有话说

ARTS Week10

时之虫

ARTS 打卡计划

图解+代码|常见限流算法以及限流在单机分布式场景下的思考

yes

分布式限流 单体限流 限流算法

第九周作业

赵龙

架构师训练营第九周学习总结

qihuajun

RRedis系列(八):缓存到底该如何做到高可用?

z小赵

redis 分布式系统 高并发系统设计

JVM 垃圾回收原理

飞雪

速览国内主要银行区块链技术应用现状

CECBC

应用落地 区块链+金融 信任 部署与维护

复杂事件处理简介

星际行者

分布式 流计算 CEP 复杂事件处理

区块链行业发展月度新动态

CECBC

产业落地 政策扶持 差混高新技术 应用场景广泛

第九周作业

晨光

架构师训练营第九周作业

qihuajun

创业公司技术体系建设-APM

星际行者

APM

编程经典案例之函数

顿晓

函数式编程

极客时间 - 架构师培训 - 9 期作业

Damon

第九章作业

武鹏

这一周,我肝了公司的聚合代扣支付网关!

诸葛小猿

微信 支付宝 周期扣款 委托代扣 协议扣款

稳定匹配:幸福不靠等,脱单要主动

KAMI

生活 算法 方法论

LeetCode题解:70. 爬楼梯,DP遍历数组,JavaScript,详细注释

Lee Chen

大前端 LeetCode

JVM垃圾回收

羽球

第九周学习总结

赵龙

基于 opentracing + Jaeger 实现全链路追踪 ----理论部分

是老郭啊

全链路监控 OpenTracing Jaeger Go 语言

NetBeans:Ruby开发者的新伙伴_Java_Roman Strobl_InfoQ精选文章