我可以在线而不是在函数顶部声明变量吗?

Vib*_*nRC 3 delphi variables pascal declaration

我大约5年前使用过visual basic.

但是我已经开始使用5年前的delphi(当大多数开发人员从delphi跳到visual studio时)delphi就像vb一样容易,同时它也很强大.自从pascal以来Delphi有很多变化(例如:字符串必须以不同的方式组合在pascal而不是仅仅使用+)才能更快地编写脚本.

但为什么在delphi中我们必须声明var在顶部,当我为一个过程编写许多语句时,我必须向上滚动并声明一个var并再次下降.delphi是世界上最好的(有时是唯一的)MOST RAPID'est'IDE之一,但为什么他们不支持在vb c#etc中的任何地方声明变量

Jen*_*off 16

可以使用代码模板在过程的中间声明var,并且默认情况下也可以在较新的Delphi版本中使用Live模板启用var.

我只需键入var然后按CTRL + J并输入名称并键入IDE执行其余操作.

对我来说没什么大不了的.

Mike Rozlog演示了实时模板:

http://edn.embarcadero.com/article/40284


Cra*_*ntz 15

如果你必须滚动,你的方法太长,可能需要重构.

也就是说,在最近的Delphi版本中,您可以通过使用重构系统来声明变量而无需移动光标.

  • +1表示真正的问题.你应该努力使你的功能:小,尽可能少的参数,只做一件事. (6认同)

lke*_*ler 10

甚至比Jens的Ctrl-J快捷方式还要好.

  1. 编写代码,例如:

    I := 0;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 请注意,"I"下面有一条红色波浪线(意思是未声明).

  3. 单击"我"并键入快捷方式:Shift + Ctrl + V.

  4. Up会弹出一个声明变量窗口,通常会为你找出正确的类型.

  5. 如有必要,请更改类型,然后按Enter键关闭窗口.

我喜欢这条捷径并一直使用它.


Nic*_*ges 9

你问过这个问题:"为什么他们不支持在vb c#etc中的任何地方声明变量"

这就是答案:因为语言设计者觉得内联声明变量令人困惑且难以阅读.如果所有变量都是在方法级别声明的,那么它们的声明很容易找到,并且它们的类型很容易确定.他们认为内联声明使得难以跟踪变量及其类型.

其他语言设计者更喜欢内联声明变量的能力,但代码和变量声明之间的清晰划分是许多人更喜欢Pascal的原因之一.

  • 我认为这可能是一个很好的论据,支持在方法的顶部声明变量但我不认为这实际上是Delphi继承Pascal方式来声明变量的原因.据我所知,这与语言设计决策有关,它允许一种简单的方法来实现快速单步自上而下的编译器. (3认同)
  • @Nick - 有些语言根本不需要声明。变量是动态计算出来的。但声明它们更好,因为这样编译器可以正确优化它们。 (2认同)
  • 我不认为德尔福的做事方式更容易阅读.特别是那些来自重度面向对象背景的人.比可读性更重要的是变量的隔离,这对于面向对象的设计是必不可少的.如果我想在for循环中明确使用**x**,**x**应该完全_inaccessible_到该循环之外的任何东西.回顾当地在全球范围内的重要性.我更倾向于支持特立尼达的回应. (2认同)