zoukankan      html  css  js  c++  java
  • Delphi基础教程图文版之内联变量

    内联变量是Delphi Rio 10.3中引入的功能,这个功能其实在其他语言中并不新鲜,在第一次接触Delphi的时候如果非要让我吐槽点儿什么的话那就是变量的声明

    官方文档:http://docwiki.embarcadero.com/RADStudio/Rio/en/Inline_Variable_Declaration

    内联变量声明

    以前使用局部变量需要以下面的方式进行声明

    procedure Test;
    var
      I: Integer;
    begin
      I := 22;
      ShowMessage (I.ToString);
    end;
    

    现在使用内联变量的方式进行声明

    procedure Test;
    begin
      var I: Integer;
      I := 22;
      ShowMessage (I.ToString);
    end;
    

    针对第一种声明变量的两点吐槽

    (1)类似于 I 这种变量可能只是临时使用一下,然而它依然需要在前面提前声明,有的朋友可能会说这样的语法阅读性更高,但是当代码量大了反复拖动鼠标来查阅声明时的类型也很麻烦,个人反而觉得阅读性降低了

    (2)变量的作用范围,变量只要声明那它的作用范围即为整个函数、过程,但是某些时候仅仅需要在循环或者 if 语句中使用变量,无形中造成了资源的浪费

    参考阅读

    变量范围

    这里直接参考官方文档给出的代码示例

    procedure Test; // 在单个语句中声明和初始化
    begin
      var I: Integer := 22;
      ShowMessage (I.ToString);
    end;
    
    procedure Test1; // 多个内联声明
    begin
      var I: Integer := 22;
      var J: Integer;
      J := 22 + I;
      var K: Integer := I + J;
      ShowMessage (K.ToString);
    end;
    
    procedure Test2; // 范围仅限于本语句块
    begin
      var I: Integer := 22;
      if I > 10 then
      begin
        var J: Integer := 3;
        ShowMessage (J.ToString);
      end
      else
      begin
        var K: Integer := 3;
        ShowMessage (J.ToString); // COMPILER ERROR: “Undeclared identifier: ‘J’”
      end;
    end;
    

    在Test2这个过程中因为 J K 这两个变量是在对应的语句块中进行的声明,所以当超出了 f 语句范围外是无法进行访问的,同理 J 是在 if 块中声明的在else块内无法访问

    类型推断

    使用一些不熟悉的API时在定义接收其函数返回值的变量时需要反复的查看该函数的返回值类型是什么。不知道大家有没有感觉,反正我是被烦的不行。不过还好内联变量最后的一个特点就是可以进行类型推断(或者称为类型推导)。具体是什么东西看下面的代码

    procedure NewTest;
    begin
      var MyDictionary := TDictionary<string, Integer>.Create;
      MyDictionary.Add ('one', 1);
      var APair := MyDictionary.ExtractPair('one');
      ShowMessage (APair.Value.ToString)
    end;
    

    MyDictionary和APair这两个变量在接收其返回值时并不需要声明类型,根据等号右边的函数可以自动推导出其类型是什么,这就是类型推导

    当然了,虽然在声明变量的时候省去了类型的定义,但是还是需要知道它代表的是什么

    内联变量在循环中的使用

    个人感觉这是内联变量带来最便利的一个地方了。没什么废话,翠花上代码……

      for var I: Integer := 1 to 10 do
          ...
    
      for var Item: TItemType in Collection do
          ...
    
    

    至此内联变量的介绍就全部结束了,但是需要注意的是虽然官方宣称在Delphi Rio 10.3这个版本中进行了内联变量的支持,但是实际的情况是IDE有BUG,当你在这个版本内使用的时候会有烦人的红线虽然编译可以通过。在Delphi Sydney 10.4中已经修复了这个问题

  • 相关阅读:
    delphi point数据类型
    Sql Server 2008 R2链接服务器Oracle数据库
    ORA-28000 账号被锁定的解决办法
    [Oracle] sqlplus / as sysdba ora-01031 insufficient privileges
    Oracle的操作系统认证(/ as sydba 登录方式)
    Delphi使用线程TThread查询数据库
    oracle
    统计字符串中字符出现的次数-Python
    Jmeter保存下载的文件
    如何在Microsoft Store上免费获得 HEIF、HEVC 编码支持
  • 原文地址:https://www.cnblogs.com/coder163/p/14953564.html
Copyright © 2011-2022 走看看