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

问题描述 投票:0回答:6

我大约 5 年前使用过 Visual Basic。

但我从 5 年前开始使用 delphi(当时大多数开发人员从 delphi 跳到 Visual Studio)delphi 和 VB 一样简单,同时又非常强大。自 pascal 以来,Delphi 发生了许多变化(例如:在 pascal 中必须以不同的方式组合字符串,而不仅仅是使用 + ),以便使脚本编写更快。

但是为什么在delphi中我们必须在顶部声明var,当我为一个过程编写许多语句时,我必须向上滚动并声明一个var然后再次向下滚动。 delphi 是世界上最好的(有时也是唯一的)最快速的 IDE 之一,但为什么他们不支持在任何地方声明变量,就像在 vb c# 等中一样

delphi variables declaration pascal
6个回答
16
投票

可以使用代码模板在过程中间声明 var,并且在较新的 Delphi 版本中,Live 模板也默认启用该功能。

我只需输入

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

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

Mike Rozlog 的实时模板演示:

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


15
投票

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

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


10
投票

这个比 Jens 的 Ctrl-J 快捷键还要好。

  1. 编写您的代码,例如:

    I := 0;
    
  2. 请注意,“I”下方有一条红色波浪线(表示它未声明)。

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

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

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

我喜欢这个快捷方式并且一直使用它。


9
投票

您问了这个问题:“为什么他们不支持在任何地方声明变量,就像在 vb c# 等中一样”

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

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


4
投票

从 Delphi 10.3 Rio 版本开始,可以声明变量和常量内联

连类型都可以推断出来。

示例:

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-in
for-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;

-1
投票

所以我无法发表评论,因为我没有足够的业力。我在 Delphi Rio 上使用内联声明会引发错误。我怎样才能激活这个?

© www.soinside.com 2019 - 2024. All rights reserved.