IDE可以通过代码带来的最令人印象深刻的技巧是什么?[关闭]


18

现代的IDE有很多技巧可以帮助编写代码,重构和搜索。所有这些都非常有帮助,但是几乎没有一个看起来像真正的“魔术师”,让我觉得“哇!它是如何解决的?”

您能否命名任何令人印象深刻的IDE代码自动化(或其他)功能,这些功能在您第一次看到它们时就大为震惊?


3
很好的问题,不过还是希望看到更多答案。
Tamara Wijsman 2010年

我不知道这是否是答案,但是为什么我看不到IntelliJ IDEA的任何提及?
Mark C 2010年

5
真正的程序员使用蝴蝶。
2010年

防止我产生错误;)
特拉维斯·克里斯蒂安

这不应该被关闭,这是一个完美的问题,恕我直言
NimChimpsky

Answers:


29

向后调试

Visual Studio 2010(现在是2012)使我可以使用IntelliTrace 向后调试

我再也不必重新体验击打F10多次的那一刻,而不必重新启动调试。


2
我还没有使用过,但是我想要。
AShelly

我也没有使用过(我使用RAD Studio for Delphi),但这听起来像是梦想成真。(但这是对这个问题的有效答案吗?它更多是调试器功能而不是代码编辑器功能。嗯,它是IDE的一部分,所以也许...)
Andreas Rejbrand 2010年

+1000:非常有用。
卡勒姆·罗杰斯

它有COME FROM命令吗?:)
Joonas Pulakka

2
问题是您只能使用MS语言(托管)而不是使用C ++进行此操作
开辟道路

16

代码完成

当您看到的只是文本编辑器时,这真是令人印象深刻


3
实际上并没有那么令人印象深刻,您可以仅通过分析TAGS文件来做到这一点。
替代

2
我喜欢的是嬉皮展开...它是深刻的更有用我比代码完成。
保罗·内森

2
@mathepic究竟有多少人知道这样做?
TheLQ 2010年

2
如果您从大型机时代开始就一直在编程,那将给您留下深刻的印象。
AShelly

4
伙计们,如果您认为此答案没有吸引力,请投票给另一个答案,而不要在评论中表示不同意。这是一个主观的问题,因此给出的答案也可能也是。
JBR威尔金森

16

ReSharper猜测我想要一个名为的变量能力继续让我惊讶。这是一个非常简单的示例,但您明白了。

替代文字


1
您能为那些从未在行动中看到它的人提供一些示例吗(我)
serg

9
如果您的文本编辑器可以代替您编写代码,那么我有个坏消息……
P Shved 10'9

3
foreach(var matche in regex.Matches(str))。也设置matcheobject而不是Match,不是很有用。
卡勒姆·罗杰斯

1
@Callum:是的,但这仅仅是因为它MatchCollection是一个无类型的集合。对于正确的收藏,var效果很好。(虽然我还是不喜欢它)
配置器

1
这也是eclipse的功能。
NimChimpsky

12

初次使用Eclipse的重构工具时,我印象非常深刻。从大量代码中提取方法(当您正在学习更好的设计时,这种情况很常见)的能力非常出色。


12

代码气泡。http://www.andrewbragdon.com/codebubbles_site.asp

我喜欢Visual Studio和Eclipse,因为它们为我提供了更改代码的工具,但是Code Bubbles确实使我能够导航和查看我的代码而感到兴奋。太糟糕了,它不是公开可用的=-{


2
哇。那个视频...我流口水。请问我可以使用C ++吗?
2010年

我只能说哇。
Icode4food 2010年

1
+1尽管我不喜欢当前的GUI,但该概念本身非常令人惊讶……
Tamara Wijsman 2010年

这真的有效吗?带有部分代码的小盒子。要使用它,您需要具有墙大小的显示器。
IAdapter 2010年

我希望这不会在Emacs中实现。我的左小指不喜欢那样。
右边

7

我听说过的最令人印象深刻的编程环境是Genera操作系统。

您可以单击窗口系统中的任何小部件,并获得该项目的源代码和文档的完整读取。作为一种动态编程语言(Lisp),您可以即时编辑小部件的源代码。

Lisp Machine领域的ZMACS仍然被认为比Emacs更好,它是一个没有同行的编辑器环境。


大学毕业后我的第一份计算机工作是使用符号工作站(使用属),相信我有一个没有赶上的原因!
FinnNk

3
哦,详细点!
Mark C 2010年

是的,我想知道Genera为什么也没有赶上
流行

@FinnNk:也许您可以详细说明?
保罗·内森

6

直观地显示程序的结构(程序/功能/例程/ ...)

替代文字


那是哪个编辑器?
保罗·内森


运气不好...(在截取屏幕截图的那一刻,您就收到了邮件。)但这不是一项非常高级的功能。当然,它可能非常有用,但并不是很“令人印象深刻”。
Andreas Rejbrand 2010年

@Andreas Rejbrand-对不起,Andreas,但是什么邮件呢?什么截图?恐怕我不明白你在说什么。
Rook

@Rook:他正在谈论您的答案中的图像以及右下角的小蓝框,它似乎是来自Outlook的电子邮件通知。。。
Tim Goodman 2010年

4

ReSharper的重构能力。完全公开而言,由于我认为带有Eclipse的Java已有这种功能已有一段时间了,所以我可能会走在后面,但是我经常不使用Java。

ReSharper添加到Visual Studio的功能差是如此之大,令人难以置信。我知道我听起来像是一则广告,但我认为我永远都不会回到没有ReSharper的情况下使用Visual Studio的常规安装。

更普遍的是,对代码语义理解会在任何一天取代普通的旧文本编辑器。这导致诸如“查找变量的用法”或“内联函数”或“使用惯用模式的机会”之类的东西。


有人在工作中被告知:“没有ReSharper,朋友不能让朋友编程。”
Frank Shearar

4

Smalltalk的调试器:

  • 对整个调用堆栈的完全访问权限(该对象3发送者在堆栈中的此实例变量是什么?)
  • 在调试器中编辑被测代码,重新启动并继续执行程序,就像什么也没有发生。

在Smalltalk中,花费大部分时间从调试器中编写代码是很正常的。

(我记得在使用Visual Age for Java的那一天,由于运行方法,看到错误,对其进行更改,然后再次运行该方法而没有重新启动应用程序而感到震惊,因为VA4J是用Visual Age for Smalltalk编写的。)

Smalltalk的方法查找器

使用“方法查找器”,您可以询问“我可以发送哪些消息以获取这些参数并获得此结果?” 问它'abc'. 'def'. 'abcdeb'.,它告诉你'abc' , 'def' --> 'abcdef'。问它#(0 1 2 3),它说#(0 1 2 3) sum --> 6。*所有的发件人,实施者–查找消息的所有(*)发件人或实现该消息的所有对象。

(*)除非您在运行时执行诸如创建消息名称之类的事情:self perform: (#foo, #bar)向自己发送消息#foobar-在这种情况下,您知道自己在做什么,并且您不介意将自己悬挂在自己的野鸭上的潜力。


4

Whyline

当我看到Java时,Whyline确实给我留下了深刻的印象。它是一个动态分析工具,可让您询问有关程序输出的问题,不仅是文本,还包括图形。例如,您可以问“为什么那条线是红色的?” 或“为什么未调用paint方法?”

它通过检测程序并记录运行来工作。例如,假设有一个可以重现的错误。您可以使用Whyline检测程序,在Whyline中运行该程序以重现该错误,然后在退出该程序时,可以使用Whyline检查执行历史记录。

录制和播放并不是什么新鲜事物,但是Whyline的实现方式非常漂亮。您可以根据特定事件查看历史记录(例如,仅关注鼠标拖动事件或仅按下键盘事件)。它还将输出与程序的输出部分相关联,因此您可以从输出导航到代码。

为了工作,它使用程序切片,因此您可以专注于代码中实际上相关的部分。CMU现在拥有一项专利,我不知道他们的计划是什么,但是我希望我们可以在生产中看到更多。这是一个内存消耗,但这很可能是因为它是原型并且可以改进。

您应该在线观看该演示,但也应该自己尝试一下以获取完整的体验。如果有的话,在线演示不胜枚举。


3

我认为我见过的最令人印象深刻的IDE功能是SyncEdit,AFAIK仅在Delphi中可用。


这不只是重命名成员吗?Eclipse就地执行此操作。编辑:哦,我知道了,您可以在选择范围内完成。
马特·奥莱尼克

1
Eclipse也有(一直使用)。有用-非常。神奇-不太确定。
塞格2010年

@Serg:哦,Eclipse也有吗?我不知道 我不使用Java。我知道VS没有它……
梅森·惠勒

@Matt:您可以在选择中进行操作,并且由于可以在选择中进行操作,因此您可以根据需要在整个文件中进行操作。它不受重构解析器对成员重命名的范围或其他约束的限制。
梅森惠勒

Netbeans也有这个。通常是ctrl-r。
艾伦·皮尔斯

2

我希望在IDE中看到以下功能:

  • 以我习惯的方式显示代码(与实际格式化方式无关)
  • 允许在代码中嵌入表格(例如,可以使用读取Excel表格sheet[A3])和代码中的图形,并像访问任何变量一样访问它们。
  • 允许省略括号和其他不必要的代码,这些只是为了使解析愉快。
  • 使用类似Google的引擎搜索代码(尤其是在35毫秒内获得搜索结果)
  • if以表格形式显示复杂条件(仍在搜索链接)。
  • 重构工具可以找到相似的代码,提取差异并将其减少到最大。
  • 支持遵循语言规则的代码生成(请考虑:创建Java类的所有getter和setter方法,除非已经存在具有相同名称或依赖于注释的方法)

“除非存在同名的方法,否则请为Java类创建所有getter和setter方法”我认为eclipse可以做到这一点……
Hila 2010年

“以惯常的方式显示代码”和“允许省略花括号”兼容的目标吗?
TRiG

@Hila:是的,但是代码可见。我想要的是编译器在编译Java源代码时才生成它们。我不希望他们使信息混乱。
亚伦·迪古拉

@TRiG:恕我直言,两者之间有很大的重叠。我缩进所有代码;牙套完全没用。
亚伦·迪古拉

如果也许IDE保存了花括号但不显示它们,那可能会起作用。
TRiG 2010年

2

动态语言的类型检查

只要您的代码不会太“元”,那么用于Ruby或Python的IDE应该可以运行一个后台任务,该任务可以:

  • 对于给定的函数,确定将作为参数传递的所有可能的类
  • 对于这些类,请确保它们响应该函数调用的所有方法
  • 列出了不兼容的类以及需要实现的缺少方法的列表

我还没有看到执行此操作的IDE。


您的意思是您还没有看到可以执行此操作的R / P IDE或任何其他IDE吗?
Mark C

我从来没有在任何地方看到过这个,但是我也没有看起来很辛苦。
AShelly

Roel Wuyts的RoelTyper和Lex Spoon的Chuck对Squeak进行了这种分析。
Frank Shearar

这可能必须建立在某种类型推断系统上,并且要使用从未为类型推断设计的语言。
Lie Ryan 2012年


2

Eclipse的自动构建是我最欣赏的功能。...7年前。现在,我认为这是理所当然的。


intellij仅在v12中提供此功能。几乎唯一的食能会做得更好
NimChimpsky

2

Xcode 4修复了分号和拼写错误,并使用箭头显示了错误发生的方式。

例如:

NSString *a = [[NSString alloc] init];
[a release];
int l = [a length];

从会绘制一个箭头[a release][a length]以显示您为什么不能使用[a length]


此行为取决于clang静态分析器。您可以将其作为单独的命令运行,并在浏览器中查看输出。虽然没有花哨的箭头。
2013年

1

代码模板和扩展,例如DevExpress的CodeRush。在C#中,DependencyProperty创建a 是一个主要的麻烦,因为语法可能变得很冗长,但是只需键入“ dp”会带来类似于代码段的内容,您可以在其中填充类型,名称和默认值,并且所有其他操作都已完成-包括添加任何必要的“使用”语句,并在可能的情况下添加项目引用。

好处在于创建自己的模板,对于经常重复使用或重写的代码(例如INotifyPropertyChanged属性的简单实现),只需为模板指定要使用的属性的名称和类型(如果没有其他扩展器就可以使用)。 ,并处理其余的工作,包括创建后备变量。


1

Pex做一些非常酷的自动化单元测试生成。它跟踪您的代码,确定分支点,使用条件求解器生成击中每个可能分支的输入,然后让您将结果导出为可重复的单元测试。它可以羞辱复杂的字符串处理代码。


真好!虽然,我希望它更多地用于测试数据生成,而不是整个测试用例![测试数据+预期的输出=测试用例。]也就是说,自动生成预期的输出意味着它实际上并没有在测试您的想法。需要由了解规格的人员进行验证。
Macneil 2010年

1

在Eclipse中,自动生成SEtters和getters,类似地从接口的Implements类中创建方法


1

IntelliJ Idea对JPA的支持

提到您有一个DatabaseEntity:

@Entity
public class Customer{
[...]
String lasName;
[...]

现在您有一些JPA查询

Query q = "selecct s from Customer c where c.lasName=:lastName"

看到一段时间后,您在实体中输入了错字,并决定将lasname重构为lastName

该IDE也将重构JPA-Query。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.