Dart语言简介

Dart设计时应该是借鉴了Java和JavaScript,同时又引入了一些现代编程语言的特性,如空安全。
1.var关键字
类似于JavaScript中的var,它可以接收任何类型的变量,但最大的不同是Dart中var变量一旦赋值,类型便会确定,则不能改变其类型,和Swift一样。

var str = "hello world";

str = 1000;
//在dart中会报错,因为变量str的类型已经确定为String,类型一旦确定后则不能再改变其类型。
上面的代码在JavaScript是没有问题的,前端开发需要注意下。因为Dart本身是一个强类型语言,任何变量都有明确的类型,当用var声明一个变量后,dart在编译时会根据第一次赋值数据的类型来推断其类型,编译结束后其类型就已经被确定了,而JavaScript是纯粹的弱类型脚本语言,var只是变量的声明方式而已。

  1. dynamic和object
    object是Dart所有对象的根基类,也就是在Dart中所有类型都是Object的子类(包裹Function和Null),所以任何类型的数据都可以赋值给Object声明的对象,dynamic与object声明的变量都可以赋值任意对象,且后期可以改变赋值的类型。
dynamic t;
object x;
t = "hello world";
x = "hello dart";
//下面代码没有问题
t = 1000;
x =  1000;

dynamic与Object不同的是dynamic声明的对象编译器会提供所有的可能得组合,而Object声明的对象只能使用Object的属性和方法,否则编译器会报错

dynamic a;
Object b = "";
main(){
a = "";
printLengths();
}
printLengths(){
//正常
print(a.length);
// 报错 The getter 'length' is not defined for the class 'Object'
print(b.length);
}

dynamic的这个特点使得我们在使用它时需要格外注意,这很容易引入一个运行时错误,比如下面代码在编译时不会报错,而在运行时会报错

print(a.xx);//a是字符串,没有“xx”属性,编译时不会报错,运行时会报错

3.final和const
如果您从未打算更改一个变量,那么使用final和const,不是var,也不是一个类型。一个final变量只能被设置一次,两者区别在于,
const变量是一个编译时常量(编译时直接替换为常量值),final变量在第一次使用时被初始化。被final或者const修饰的变量,变量类型可以省略。

final str = "hello wordld";
//final String str = "hello world";
const str1 = "hello dart";
//const String str1 = "hello dart";
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容