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中已经修复了这个问题

  • 相关阅读:
    linux日常管理-rsync后台服务方式-1
    linux日常管理-rsync_ssh方式
    linux日常管理-rsync常用选项详解
    linux日常管理-rsync格式
    socket 服务端 | socket 客户端 -->黏包现象
    udp 服务端 | udp 客户端 --循环发消息
    udp 协议 服务端 | udp 客户端
    socket tcp 服务端 | socket tcp 客户端 -->之循环
    socket tcp 服务器 | socket tcp 客户端
    计算器写法 | '1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
  • 原文地址:https://www.cnblogs.com/coder163/p/14953564.html
Copyright © 2011-2022 走看看