【dart学习】-- Dart之元数据

一,概述

  • 元数据概述

    元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

  • 元数据定义

    元数据(Metadata)是描述其它数据的数据(data about other data),或者说是用于提供某种资源的有关信息的结构数据(structured data)。元数据是描述信息资源或数据等对象的数据,其使用目的在于:识别资源;评价资源;追踪资源在使用过程中的变化;实现简单高效地管理大量网络化数据;实现信息资源的有效发现、查找、一体化组织和对使用资源的有效管理。 

  • 元数据(MetaData)如何理解
    元数据是用来描述数据的数据(Data that describes other data)。单单这样说,不太好理解,我来举个例子。

    (她)年纪已经不轻,三十岁上下,个子高挑,身材匀称,黑黑的眉毛,红红的脸蛋--一句话,不是姑娘,而是果冻,她那样活跃,吵吵嚷嚷,不停地哼着小俄罗斯的抒情歌曲,高声大笑,动不动就发出一连串响亮的笑声:哈,哈,哈!
    
     这段话里提供了这样几个信息:年龄(三十岁上下)、身高(个子高挑)、相貌(身材匀称,黑黑的眉毛,红红的脸蛋)、性格(活跃,吵吵嚷嚷,不停地哼着小俄罗斯的抒情歌曲,高声大笑)。有了这些信息,我们就可以大致想像出瓦莲卡是个什么样的人。推而广之,只要提供这几类的信息,我们也可以推测出其他人的样子。

    这个例子中的"年龄"、"身高"、"相貌"、"性格",就是元数据,因为它们是用来描述具体数据/信息的数据/信息。

二,dart中元数据

  • 使用元数据给代码添加更多的信息。
  • 元数据是以@开始的修饰符,在@后面接着编译时的常量或调用一个常量构造函数。
  • 目前dart语言提供三个@修饰符:
    • (注解) - @deprecated 被弃用的。  
      • 含义:若某类或某方法加上该注解之后,表示此方法或类不再建议使用,调用时也会出现删除线,但并不代表不能用,只是说,不推荐使用,因为还有更好的方法可以调用。
      • 作用:因为在一个项目中,工程比较大,代码比较多,而在后续开发过程中,可能之前的某个方法实现的并不是很合理,这个时候就要新加一个方法,而之前的方法又不能随便删除,因为可能在别的地方有调用它,所以加上这个注解,就方便以后开发人员的方法调用了。
        class Television {
          @deprecated
          void activate(){
            turnOn();
          }
        
          void turnOn(){
            print('Television Turn On!');
          }
        
        }
        
        main(){
           dynamic tv = new Television();
           tv.activate();
           tv.turnOn();
        }

        打印结果:

        [Running] dart "/var/folders/l1/jvw4fvds26320gck06xj7xdh0000gn/T/tempCodeRunnerFile.dart"
        Television Turn On!
        Television Turn On!
    • (注解) - @override重写。
      • 帮助自己检查是否正确的复写了父类中已有的方法
      • 告诉读代码的人,这是一个复写的方法
        //动物类
        class Animal {
            //动物会吃
            void eat(){
              print('动物会吃');
            }
            //动物会跑
            void run(){
              print('动物会跑');
            }
        }
        //人类
        class Human extends Animal {
          void say (){
             print('人会说话');
          }
        
          void study(){
            print('人类也会吃');
          }
        
          @override 
          void eat(){
             print('人类也会吃');
          }
        }
        
        main (){
          print('实例化一个动物类');
          var animal = new Animal();
          animal.eat();
          animal.run();
        
          print('实例话一个人类');
          var human = new Human();
          human.eat();
          human.run();
          human.say();
          human.study();
        }
    • @proxy 代理。
  • 定义自己的元数据

    • 通过library来定义一个库,在库中定义一个相同名字的class,然后在类中定义const 构造方法。  
      // 定义
      library todo;
       
      class todo {
        final String who;
        final String what;
       
        const todo(this.who, this.what);
      }
       
      // 使用
      import 'todo.dart';
       
      @todo('seth', 'make this do something')
      void doSomething() {
        print('do something');

三,总结

  元数据可以修饰以下内容

    • library(库), 
    • class(类), 
    • typedef(类型定义), 
    • type parameter(类型参数), 
    • constructor(构造函数), 
    • factory(工厂函数), 
    • function(函数), 
    • field(作用域), 
    • parameter(参数),
    • variable declaration(变量声明)。

猜你喜欢

转载自www.cnblogs.com/lxlx1798/p/11022305.html