dart 变量

本文主要介绍了Dart语言中的变量使用,包括变量的声明、类型推断、动态赋值以及final和const的区别。Dart中,大多数变量不需要显式类型,类型由赋值决定。与Java不同,Dart变量在未赋值时可接受多种类型,但赋值后不能改变类型。此外,dart.dev提供了官方示例帮助理解。final和const修饰的变量有所不同,final变量必须在构造函数前初始化,而const用于创建不可变的常量。
摘要由CSDN通过智能技术生成

 

 

目前市面上关于flutter的资源还是不多的,其实很多资料都是从官网上学习的,个人认为官网是很好的学习资料,也是你个人学习能力的一个认可,我们学习Java都是有一个main函数 这是入口 那dart语言呢?

https://dart.dev/samples

上面是dart的官网例子 我们只要对看他就行

Hello World
Every app has a main() function. To display text on the console, you can use the top-level print() function:

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

这是官网给我们的解释  英文也不难看懂,对着Java发现他省略了很多修饰符比如public  函数print()不是使用类或者对象去调用

我们这博客是讲变量,那么看看官网给我的解释

Variables
Even in type-safe Dart code, most variables don’t need explicit types, thanks to type inference

翻译:即使在类型安全的Dart代码中,由于类型推断,大多数变量也不需要显式类型

 

var name = 'Voyager I';
var year = 1977;
var antennaDiameter = 3.7;
var flybyObjects = ['Jupiter', 'Saturn', 'Uranus', 'Neptune'];
var image = {
  'tags': ['saturn'],
  'url': '//path/to/saturn.jpg'
};

上面是官网给的例子

如果有一点JavaScript的基础,发现很像,在js中也是使用var去定义一个变量

var x;
void main() {
  print(x);
}

这个打印出来的是null,这个和Java不同 Java是根据不同的数据类型 会默认有一个初始化的值 而dart 是动态语言,也就是说一个变量是什么类型是根据给它的赋值去判断其类型的,而一旦给变量赋值了,如果再赋值给其他类型编译器就会报错

void main() {
  var x  ;
  x = 'zhouguizhi';
  x = 10;
  print(x);
}

这是可以的,因为变量x并没有开始赋值,它可以是int 也可以是字符串

一旦赋值后再给它赋值不同类型就会报错

对比我们Java中还有常量,是怎么表示的呢?

Read more about variables in Dart, including default values, the final and const keywords, and static types

我们点击Read More会进入到下一个界面,

https://dart.dev/guides/language/language-tour#variables

这里解释的很清楚

The type of the name variable is inferred to be String, but you can change that type by specifying it. If an object isn’t restricted to a single type, specify the Object or dynamic type, following design guidelines

这是官网的说明 翻译:

name变量的类型被推断为String,但是您可以通过指定它来更改该类型。如果对象不局限于单一类型,请按照设计指南指定对象或动态类型

void main() {
  dynamic x = 'Bob';
  x = 10;
  print(x);
}

使用dynamic 定义的变量是可以随时修改的,这和var定义的变量不同 var变量只要赋值后 类型就定了 不能修改了,而dynamic定义的变量是可以修改的,这个我们最好别用,代码阅读起来很不方便,在dart中也提供了很多种数据类型 比如String

Another option is to explicitly declare the type that would be inferred:

String name = 'Bob';

这是说我们可以显式声明将要推断的类型

在dart中声明一个变量是使用final或者const

Final and const
If you never intend to change a variable, use final or const, either instead of var or in addition to a type. A final variable can be set only once; a const variable is a compile-time constant. (Const variables are implicitly final.) A final top-level or class variable is initialized the first time it’s used

翻译:

如果您从未打算更改一个变量,请使用final或const代替var或类型。最后一个变量只能设置一次;const变量是编译时常量。(Const变量隐式为final。)最后一个顶层变量或类变量在第一次使用时初始化

例子:

final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';

使用final修饰的变量 定义不能使用var 而要使用dart给的数据类型

Use const for variables that you want to be compile-time constants. If the const variable is at the class level, mark it static const. Where you declare the variable, set the value to a compile-time constant such as a number or string literal, a const variable, or the result of an arithmetic operation on constant numbers:

翻译:

对于希望成为编译时常量的变量,请使用const。如果const变量位于类级别,则将其标记为静态const。在声明变量时,将值设置为编译时常量,如数字或字符串文字、const变量或对常量进行算术运算的结果:

例子:

const bar = 1000000; // Unit of pressure (dynes/cm2)
const double atm = 1.01325 * bar; // Standard atmosphere

说明:

The const keyword isn’t just for declaring constant variables. You can also use it to create constant values, as well as to declare constructors that create constant values. Any variable can have a constant value​

​

翻译:

const关键字不仅仅用于声明常量变量。您还可以使用它来创建常量值,以及声明创建常量值的构造函数。任何变量都可以有一个常量

例子:

var foo = const [];
final bar = const [];
const baz = []; // Equivalent to `const []`

最后讲下final和constant的区别:

Instance variables can be final but not const. Final instance variables must be initialized before the constructor body starts — at the variable declaration, by a constructor parameter, or in the constructor’s initializer list

上面是官网给我们的解释:

翻译:

实例变量可以是final,但不能是const。最终实例变量必须在构造函数主体开始之前初始化——在变量声明处,由构造函数参数初始化,或者在构造函数的初始化器列表中初始化

这个要到学习对象时候才能用到 在这记录下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值