当前位置:网站首页>Dart:基础
Dart:基础
2022-06-09 03:54:00 【@我不认识你】
入口方法
方式一
main() {
print('你好dart');
}
方式二
//表示main方法没有返回值
void main() {
print('你好dart');
}
变量
dart是一个强大的脚本类语言,可以不预先定义变量类型 ,自动会类型推导
变量定义
dart中定义变量可以通过var关键字也可以通过类型来申明变量。
var str='this is var';
String str='this is var';
int str=123;
注:var定义的变量会自动进行类型推导,dart中的变量是强类型的
变量命名规则
与大多数语言相同,变量命名需要遵守以下条件:
- 变量名称必须由数字、字母、下划线和美元符($)组成。
- 注意:标识符开头不能是数字
- 标识符不能是保留字和关键字。
- 变量的名字是区分大小写的如: age和Age是不同的变量。在实际的运用中,也建议,不要用一个单词大小写区分两个变量。
- 标识符(变量名称)一定要见名思意 :变量名称建议用名词,方法名称建议用动词
常量
Dart中的 常量使用 final 和 const来定义。
- const值不变 一开始就得赋值
- final 可以开始不赋值 只能赋一次 ; 而final不仅有const的编译时常量的特性,最重要的它是运行时常量,并且final是惰性初始化,即在运行时第一次使用前才初始化
数据类型
dart支持如下类型:
- int:整形
- double:双精度浮点型
- String:字符串
- bool:布尔
- List:列表,数组
- Maps:字典,键值对
字符串
字符串可以使用 单引号 双引号 和 三引号定义
main() {
var a = '单引号""';
var b = "双引号''";
var c = '''
三引号,
三引号里可以有单引号'',和双引号"",不能再有三引号
''';
print(a);
print(b);
print(c);
}
print只能输出一个变量,有点跟console.log混了
字符串的拼接

数值类型
int类型的值可以转换成double类型,double类型不可以转成int类型
double a = 1; 正确
int b = 1.2; 错误
list数组
方式1:不指定类型
main() {
var a = ['a', 1, false];
print(a); //[a, 1, false]
print(a[0]); // a
print(a.length); //3
}
方式2:指定类型
main() {
var a = <int>[1, 2, 3];
var b = <String>['a'];
print(a);
print(b);
}
方式3:,通过[]创建的集合它的容量可以变化
main() {
//指定具体类型的
var a = <int>[];
print(a); // []
print(a.length); //0
a.add(1);
print(a); //[1]
//未指定具体类型的
var b = [];
print(b); //[]
print(b.length); //0
b.add(1);
b.add('a');
print(b); //[1,a]
//存在值的,只能添加同类型的值
//例如最初全是整形,会默认为整形数组,添加时就只能添加整形
var c = [1, 2, 'a'];
c.add('c');
print(c); // [1,2,a,c]
}
Maps 字典
方式1
main() {
var a = {
'name': '张三', 'age': 15}; //key也必须加引号,不能项js一样不加引号
print(a); //{name: 张三, age: 15}
print(a['name']); //张三
}
方式2
main() {
var p = new Map();
p["name"] = "李四";
p["age"] = 22;
p["work"] = ["程序员", "送外卖"];
print(p); // {name: 李四, age: 22, work: [程序员, 送外卖]}
print(p["age"]); // 22
}
类型判断
dart中使用is关键词判断类型
main() {
String a = '1';
print(a is int); // false
int b = 1;
print(b is double); // false
double c = 1.0;
print(c is int); // false
var d = 1;
print(d is int); // true
}
运算符
与主流语言相同,比如Java、JavaScript。
类型转换
dart是强类型的语言,类型转换只支持Number类型转换成String类型和String类型转成Number类型
Number类型转换成String类型
var myNum=12;
var str=myNum.toString();
print(str is String);
String类型转成Number类型
String str='123';
var myNum=int.parse(str);
print(myNum is int);
String str='123.1';
var myNum=double.parse(str);
print(myNum is double);
循环
和c语言没什么区别,包括for循环、while循环、do while循环
for循环
for (int i = 1; i<=100; i++) {
print(i);
}
while循环
main() {
int a = 1;
while (a < 5) {
print(a);
a++;
}
}
do while
main() {
int a = 1;
do {
print(a);
a++;
} while (a < 5);
}
break 和 continue
略
List常用属性和方法
属性
length 长度
var a = [11, 'a'];
print(a.length); // 2
reversed 翻转
var a = [11, 'a'];
print(a.reversed); // (a,11)
isEmpty 是否为空
var a = [11, 'a'];
print(a.isEmpty); // false
isNotEmpty 是否不为空
var a = [11, 'a'];
print(a.isNotEmpty); // true
first和last 第一个和最后一个
var a = [1, 2, 3];
print(a.first); //1
print(a.last); //3
方法
add 增加
var a = [];
a.add(1);
print(a); // [1]
addAll 拼接数组
var a = [1];
var b = [2];
var c = [3];
a.addAll(b);
print(a); // [1,2]
注:
1、不能拼接自身
2、只能拼接一个数组
indexOf 查找 ,返回第一个符合匹配的下标
var a = [1, 'a', '1'];
print(a.indexOf('1')); // 返回下标 2
print(a.indexOf(2)); // 找不到返回 -1
参数1是要查找的值;参数2可选,是起始位置。
indexWhere():查找
与indexOf类似,但是更高级,返回符合条件的元素下标。类似于JavaScript中的findIndex
var a = ['ab', 'bc', 'bd'];
print(a.indexWhere((element) => element.startsWith('b'))); // 1
remove 删除 传入具体值
var a = [1, 'a', '1'];
a.remove('a');
print(a); // [1,1]
print(a[1] is int); // false
removeAt 删除 传入索引值
fillRange 修改
var a = [1, 'a', '1'];
a.fillRange(0, 2, 'new');
print(a); // [new, new, 1]
参数1是起始下标,参数2是终止下标。参数3是要改成的值。包括起始不包括终止。
注意:当起始下标不存在时,运行会报错。
insert(index,value); 指定位置插入
var a = [1, 'a'];
a.insert(0, 'new');
print(a); //[new, 1, a]
insertAll(index,list) 指定位置插入List
var a = [1];
a.insertAll(1, [1, 2, 3]);
print(a); //[1, 1, 2, 3]
上述也可以通过+来实现
var a = [1];
print(a + [2, 3]); // [1,2,3]
print(a + [1,[2]]); //错误,var具有默认类型推断功能
fill 填充
var a = new List.filled(2, [], growable: true);
print(a); // [[], []]
a[0].add(1);
print(a); //[[1], [1]]
a.add([3]);
print(a); //[[1], [1], [3]]
var b = new List.filled(2, [], growable: false);
print(b);
b[0].add(1);
print(b);
b.add([3]);
print(b); //报错
var c = new List.filled(2, [], growable: true);
print(c); // [[], []]
c[0] = [2];
print(c); //[[2], []]
注:
1、growable是否可以扩展,为true时这个list可以继续扩展;为false时不允许扩展
2、file的填充是共享填充,如果使用add进行添加时,其他项也会被添加
3、不想共享填充可以直接进行赋值操作
join() List转换成字符串
同JavaScript中的join()
clear 清空List
遍历
for
略
for in
for(var item in myList){
print(item);
}
forEach
略
map
略
every
略
any
略
where
List myList = [1, 3, 4, 5, 7, 8, 9];
var newList = myList.where((value) {
return value > 5;
});
print(newList); // (7,8,9)
print(newList is List); //false
print(newList.toList()); //[7,8,9]
print(newList.toList() is List); // true
toList:转化为List
Set
Dart 里面的Set它最主要的功能就是去除数组重复内容。
Set是没有顺序且不能重复的集合,所以不能通过索引去获取值。可以先通过toList转成list,再根据索引取值。
var a = new Set();
a.add('香蕉');
a.add('苹果');
a.add('苹果');
print(a); //{香蕉, 苹果}
print(a.toList()); //[香蕉, 苹果]
List myList = ['香蕉', '苹果', '西瓜', '香蕉', '苹果', '香蕉', '苹果'];
var s = new Set();
s.addAll(myList);
print(s); //{香蕉, 苹果, 西瓜}
s.remove('香蕉');
print(s.toList()); //[苹果, 西瓜]
Set支持不需要索引的List方法
Maps
定义
//第一种方式
Map person = {
"name": "张三", "age": 20};
print(person);
//第二种方式
var m = new Map();
m["name"] = "李四";
print(m);
//第三种
var a = {
'name': '张三'};
print(a);
//第四种,指定泛型
var a = <String, int>{
'age': 2};
print(a);
常用属性
- keys 获取所有的key值
- values 获取所有的value值
- isEmpty 是否为空
- isNotEmpty 是否不为空
常用方法
remove(key) 删除指定key的数据
addAll({…}) 合并映射 给映射内增加属性
var person = {
"name": "张三", "age": 20, "sex": "男"};
person.addAll({
"work": ['敲代码', '送外卖'],
"height": 160
});
print(person);
containsKey和containsValue
//第四种,指定泛型
var a = <String, int>{
'age': 2};
print(a.containsKey('a')); //是否包含键a
print(a.containsValue(2)); //是否包含值2
遍历
forEach、map、where、any、every。类似于List的用法
边栏推荐
- Experts, how to quickly transform managers?
- It becomes obsolete when you use it ~websecurityconfigureradapter
- Graph to document function based on pyqt5
- From just entering the testing industry to doubling my salary: talk about my advanced testing experience, which is worth learning from
- 汇编:CPU结构 - FLAG标志寄存器和相关指令
- Solve the problem that the MySQL library or table is stuck during deletion and other operations
- The key points of writing test cases for the first time
- 基于PyQt5完成的抠图功能-程序实现
- Getting started with Maui custom drawing
- Interface performance test: Web service interface test
猜你喜欢

如何撰写数据中台蓝图方案

目标检测模型mAP计算方法与对比步骤——对比原模型与量化模型之间的mAP

After 15000 interns joined Amazon, what was life like in the big factory?

Affichage de barres de couleur, de caractères et d'images VGA basé sur FPGA

Assembly: JMP instructions

【优秀毕设】基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发、可基于树莓派)

From just entering the testing industry to doubling my salary: talk about my advanced testing experience, which is worth learning from

Why common read SQL is sent to the master instance in the distributed dble read / write separation scenario

Online JSON to XML tool

Technology sharing | adjusting Max write buffer size to optimize the performance of pika by 10 times
随机推荐
Don't hand in the paper in advance!!! Someone got 13 points in the last 35 seconds!!! (best wishes to all candidates)
After 15000 interns joined Amazon, what was life like in the big factory?
MongoDB搭建副本集集群
Is it safe to open an account in Hongye futures?
How to calculate the number of parameters in the LSTM layer
软件工程期末考试试题及答案(详细、经典)
unity第一人称射击游戏,枪击游戏,功能完整可以当大作业或者毕设
大厂外包or自研公司?测试人找工作怎么选?
National Natural Science Foundation Project query website
kubernetes 二进制安装(v1.20.16)(四)部署 master
Large factory outsourcing or self research company? How to choose a job for a tester?
Solve the problem that the MySQL library or table is stuck during deletion and other operations
互联网寒冬?软件测试人员如何逆势而行进入高薪大厂
Memory surge problem location
Concurrent operation -- reentrantreadwritelock
【word】錯誤!文檔中沒有指定樣式的文字。 1
Method of accessing LAN by external network and how virtual machines installed by VM access each other in LAN
Technology sharing | adjusting Max write buffer size to optimize the performance of pika by 10 times
在线JSON转XML工具
接口性能测试:web service接口测试