一,概述
元数据概述
元数据(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 代理。
@required 来标记一个参数,表示这个参数必须要传值。
告诉编译器这个参数必须要传值
告诉读代码的人,这个参数必须要填写
MyScaffold({Key key,@required this.items}):super(key:key);
定义自己的元数据
通过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
(变量声明)。