Dart变量学习

本文介绍了Dart编程语言中的变量类型,包括var、dynamic、Object、final和const的使用规则和特点。强调了Dart的空安全类型变量,并展示了字符串拼接和集合初始化及操作的语法,如Map的展开运算符和条件初始化。此外,还提到了Dart中所有变量默认为null的事实及其与Java的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

var可变变量

可变变量如果在声明的时候就赋值,那么在赋值之后就定类型了。如下,赋值之后,Dart会自动进行类型推断,推断出int型,n就只能为int型。

	var n = 1;

但是如果只声明,不赋值,则其实默认微dynamic变量(待确认),如下:

var n;
n = 1;
n = "abc";

注意: Dart建议在声明局部变量的时候使用var。也就是说,大多数情况下,还是应该明确类型来声明变量

dynamic变量

可以赋值任意对象,并且后面也可以变类型。

	dynamic n;
	//下述正确
	n =1;
	n ="11";
	//下述编译无异常,运行会出现异常
	n.width;

上述代码n的赋值都是可行的,但是在对n的调用的时候,由于dynamic是不确定n的类型的,所以编译正常,但是运行时会异常。
有一种说法是:当明确不需要类型的时候,才使用特殊类型dynamic。

Object变量

可以赋值任意对象,并且后面也可以变类型。
原因:Object是所有类型的根基类,所以可以赋值任意对象类型。
与dynamic区别: Object对象只能用Object的方法。

	Object n = "";
	//下述会报异常,编译阶段就报了
	n.length;

final变量

类似于JAVA的final,第一次初始化之后就不能改变。当然也和JAVA类似,final声明的对象类型,对象的属性是可以修改的。

final n = "ab";
final String m = "abc";

final的变量是在实际运行的过程中才会确认值的,所以可以类似如下赋值:

final n = "ab";
final m = n;

const变量

只能声明常量值,编译阶段直接替换成常量了。

const n = "ab";
const String m = "abc";

const的变量是在编译的时候赋值的。如下的代码在回在编译的时候直接报错。:

const n = "ab";
const m = n;//报错,不能赋值给一个不确定的变量。

也就是说,const定义的对象是不能改变属性的。
同时,利用const定义的构造方法,由于是常量型的构造方法,创建两个对象的时候,如果属性一样,会创造同一个对象。如下:

var person1 = const Person(18);
var person2 = const Person(18);
//这里的p1和p2其实是同一个对象,person1==person2;

class Person{
	final int age ;
	const Person(this.age)
}

空安全类型变量

默认变量都是不可空的,可主动声明为可空对象,与kotlin类似。

	int n;//不可空的
	int? n;//可空的
	//调用也可以有语法糖,如:
	string?.length//只有string不为null的时候才会执行。

字符串相关

  1. Dart中的String类型(字符串类型),可以单引号‘a’,也可以双引号“a”

  2. Dart中字符串拼接可以使用${},具体例子如下:

    String a = "me"String b = "you";
    String c = "Its ${a}, not ${b}"
    //String c = "Its me, not you"
    

    这里最好都加上{}来判断具体$对应的范围。避免歧义等。

  3. Dart中支持相邻字符串拼接,如

    String temp = "its me "
    	"not "
    	"you";
    //等同于String temp = "its me not you"
    
  4. Dart中,可以使用三个单引号或者双引号来包裹输出多行字符串,如:

    String temp = """
    第一行
    第二行
    第三行
    """;
    
  5. Dart中,可以在字符串前加一个 “r” 来标记不转义。如:

    String m = r"/n"//此处的m = “/n”
    
  6. Dart中,字符串的==判断是用来判断内容是否相同(字符序列);但是java中,==比较的是内存。

集合相关

  1. 集合允许在初始化的时候就进行赋值(Java中不允许),如:

    Map<String,String> map1 = {"a":"an","b":"bi"};
    //key:value
    
  2. 展开运算符(…),代表可以将…之后的集合展开填充。如:

    Map<String,String> map1 = {"a":"an","b":"bi"};
    Map<String,String> map2 = {...map1};
    //map2中的内容和map1一致
    
  3. 空展开运算符(…?),在展开运算符的基础上增加了判空。 如果…?后跟的集合为null,则不执行任何操作,如:

    Map<String,String> map1 = {"a":"an","b":"bi"};
    Map<String,String> map2 = null;
    Map<String,String> map3 = {...?map1, ...?map2};
    //map3的内容和map1一致。
    Map<String,String> map3 = {...map1, ...map2};
    //执行会抛出异常,map2为null。
    
  4. 在集合中运用if。如:

    bool need = false;
    Map<String,String> map1 = {"a":"an",if(need) "b":"bi"};
    //map1中只有一个a:an
    
  5. 在集合中运用for。如:

    Map<String,String> map1 = {"a":"an", for(int i = 0;i < 5;i++) "b":"bi"};
    //map中会有6个元素,一个a:an ,5个b:bi
    

注意:

  1. Dart中所有的一切都是变量。包括null,123等。
  2. Dart中所有变量都默认赋值null。
  3. Dart中没有基本数据类型,只有内置类型(包含数字,列表,集合等)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值