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

时间:2010-11-09 16:06:39

标签: delphi variables declaration pascal

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

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

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

5 个答案:

答案 0 :(得分:16)

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

我只需输入var,然后按CTRL + J并输入名称并输入IDE完成剩下的工作。

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

Mike Rozlog演示了实时模板:

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

答案 1 :(得分:15)

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

也就是说,在最新版本的Delphi you can declare a variable without moving your cursor by using the refactoring system中。

答案 2 :(得分:10)

甚至比Jens的Ctrl-J快捷方式更好。

  1. 编写代码,例如:

    I := 0;
    
  2. 请注意,“我”下面有一条红色的波浪线(意思是未声明)。

  3. 点击“我”并输入快捷键:Shift + Ctrl + V

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

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

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

答案 3 :(得分:9)

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

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

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

答案 4 :(得分:2)

从Delphi版本10.3 Rio可以声明变量和常量inline

甚至可以推断出类型。

示例:

procedure Test1;
begin
  var i : Integer;
  i := 10;
  WriteLn(i);
end;

可以内联和分配变量:

procedure Test2;
begin
  var i : Integer := 10;
  WriteLn(i);
end;

可以推断出内联变量类型:

procedure Test3;
begin
  var i := 10;
  WriteLn(i);
end;

内联变量的范围可以限制为开始/结束块:

procedure Test4;
begin
  var i : Integer := 10;
  WriteLn(i);
  if i < 20 then begin
     var j := 30;
  end;
  Write(j); // <- Compiler error “Undeclared identifier: ‘j’”
end;

可以在for-infor-to循环内使用内联变量:

procedure Test5;
begin
  for var i := 1 to 10 do
    WriteLn(i);
end;

常量也可以内联并且可以将类型推断为普通常量:

procedure Test6;
begin
  const i : Integer = 10;
  const j = 20;
  WriteLn(j);
end;