【Dart 学习 一】Hello, World,变量

Dart语言简介

Dart是一种强类型跨平台的客户端开发语言。
Dart是由谷歌开发的通用的编程语言,它常用于构建web服务器桌面移动应用程序
Dart是一种简洁清晰基于类的面向对象的语言,它是基于JavaScript的但是结构要比JavaScript要多。
Dart是一种面向对象的类定义的垃圾回收的语言。它支持接口mixin类对象具有化泛型静态类型, 动态类型等。

Hello World

每个应用都有一个顶层的 main() 函数来作为运行入口。
没有指定返回类型的方法的返回类型会推导为 void
你可以使用顶层函数 print() 来将一段文本输出显示到控制台:

1
2
3
void main() {
print('Hello, World!');
}

变量 vardynamicObject,

创建变量并对其进行初始化的示例

1
var name = 'Bob';

变量存储引用,调用的变量包含引用值为Bob的对象。
可以通过指定该类型来更改它,如果对象不限于单个类型,可以将其指定为Object(或dynamic)类型

1
Object name = 'Bob';

另一种选择是显式声明要推断的类型:

1
String name = 'Bob';

vardynamicObject都可以来声明变量,而不用显式指定它们的类型

1
2
3
4
5
var name = 'Voyager I';  // 如果没有初始值,自动获取一个默认值为null
var year = 1977;
dynamic name2 = ['Jupiter', 'Saturn', 'Uranus', 'Neptune'];
dynamic year2 = 1988
Object name='hello'; //如果没有初始值,会报错了

vardynamicObject之区别
var实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main() {
//var
var a = 'hello';
print(a.runtimeType); //打印结果:String
print(a); //打印结果:hello
a = 123; //除了字符串之外,定义数字或者其他数据类型,都会报错,说明类型是不可变的
a = '123';
print(a); //打印结果:123
var b; //没有初始值
b = 123;
b =[1,2,3,4];
print(b) // 打印结果:[1,2,3,4]
print(b.runtimeType); //打印结果:List<Object>

}

dynamic实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main() {
//dynamic
dynamic x = 'hello'; //编译时不会揣测数据类型,但是运行时会推断
print(x.runtimeType); //打印结果:String
print(x); //打印结果:hello
x = 123;
print(x.runtimeType); //打印结果:int,说明类型是可变的
print(x); //打印结果:123

x.foo();
// 通过它定义的变量会关闭类型检查,这段代码静态类型检查不会报错,但是运行时会crash,
// 因为x并没有foo()方法,
// 所以建议大家在编程时不要直接使用dynamic
}

Object实例

1
2
3
4
5
6
7
8
9
10
11
void main() {
//Object
Object x = "hello world";
print(x.runtimeType);//打印结果:String
print(x);//打印结果:hello world
x=1;
print(x.runtimeType);//打印结果:int 说明类型是可变的
print(x);//打印结果:1
// x.foo();静态类型检查会运行报错会报错
}

总结:
1、变量变化:即可以是变量的类型,也可以是变量的值
2、var & dynamic & Object的相同点和区别
var就是不关心变量的类型
dynamicObject都是动态类型
var当初始化的时候,会类型推断,并在后面不能更改变量的类型;dynamicObject则都可以改变

常量finalconst

如果你不想更改一个变量,可以使用关键字final或者const修饰变量

final:只能被设一次值,在声明处赋值,值和普通变量的设值一样,可以是对象、字符串、数字等,用于修饰值的表达式不变的变量;
const:只能被设一次值,在声明处赋值,且值必须为编译时常量;用于修饰常量。

虽然final对象不能被修改,但是它的字段可以被修改。相比之下,const对象及其字段是不可更改的
finalconst都是不可变的

创建和设置变量的示例:final

1
2
3
4
5
6
7
8
9
10
11
void main() {
final name = 'Bob'; // 没有类型注释
final String nickname = 'Bobby';
final x;
x = 123;
print(name); // 打印结果:Bob
print(nickname); //打印结果:Bobby
print(x); //打印结果:123
//下面是不能修改 final 变量的值:
name = 'Alice'; // //运行出错,因为final修饰的变量不能调用其setter方法,即:不能设值
}

创建和设置变量的示例:const
使用关键字const修饰变量表示该变量为 编译时常量。
如果使用 const 修饰类中的变量,则必须加上 static 关键字,
static const(译者注:顺序不能颠倒)

1
2
3
4
5
6
7
8
9
10
11
void main() {
const name = 'Bob';
const String nickname = 'Bobby';
//const x; //运行报错,因为不能没有初始值
// x = 123;
print(name); // 打印结果:Bob
print(nickname); //打印结果:Bobby
//下面是不能修改 final 变量的值:
name = 'Alice'; // 运行出错,因为final修饰的变量不能调用其setter方法,即:不能设值
}

总结:
finalconst:
final只能被赋值一次,一般都在第一次使用的时候
const在编译时值被固定了