一 变量: 自动会类型推断
dart : 有类型校验
var varstr = '';
varstr = 1234; //A value of type 'int' can't be assigned to a variable of type 'String'.
二 命名规则:
- 变量名称必须由
数字
、字母
、下划线
和美元符($
)组成。 - 注意:标识符开头
不能
是数字
- 标识符不能是保留字和关键字。
- 变量的名字是区分
大小
写的: age和Age是不同的变量 - 标识符(变量名称)一定要见名思意:变量名称建议用名词,方法名称建议用动词
三 常量 : const , final 修饰符(永远不改变的量,使用final 或 const 修饰,而不使用 var 或其他变量类型)
- const 值不变,一开始就得赋值; final 可以开始
不赋值
只能赋一次值; - final 不仅有 const的编译时常量的特性,最重要的它是
运行时
常量,并且 final 是惰性初始化,既在运行时第一次使用前才初始化
final a = new DateTime.now();
print(a);
四 数据类型:
1.字符串
// """ 三个单引号/双引号,内容可以换行 """
var str = """这是第一行,
这是第二行
这是第三行 """;
2.字符串拼接
String str1 = "1";
String str2 = "2";
print("$str1 $str2");
print(str1 + str2);
print(str1 + " " + str2);
3.数值类型 int double (int 必须是整形, double 既可以是整形 也可以是浮点行)
int a = 123;
double b = 23.5
b = 20; //会输出 20.0
4.运算符 + - * /
5.布尔类型 bool : true/false
(1)bool
bool flag1 = true;
flag1 = false;
//不能为其他值 flag1 = 123; //报错
(2) 条件判断语句
var a = 123;
var b = "123";
if(a == b){ //不相等
}else{
}
- List(数组/集合)
// (1)第一种定义List方式
var l1 = ['aaa', 'bbb', 'ccc'];
print(l1);
// 其他方法: li.length, l1[0]
// (2)第二中定义List的方式
var l2 = [];
l2.add('aaa');
l2.add('bbb');
// (3)第三种定义制定类型的List
var l3 = <String>[];
- Maps(字典)
// (1) 第一种定义Map的方式 (key要加引号)
var s = {
'name' : '张',
'age' : 15,
'subject' : ['计算机','心里学'],
};
print(s);
// (2)第二种定义Map的方式
var student = new Map();
student['name'] = '李';
student['age'] = '15';
student['subject'] = ['计算机','心里学'];
print(student);
8.判断数据类型
is 关键词来判断类型
五 运算符
1.算术运算符 : + - * / ~/(取整)
%(取余)
int a = 5;
int b = 3;
print(a~/b);
2.关系运算符: == != > < >= <=
3.逻辑运算符: ! && ||
4.赋值运算符
(1)基础赋值运算符 = ??=
(2)复合赋值运算符 += -= *= /= %= ~/=
int b;
b??=23; //表示 如果b为空的话把 23赋值给b
print(b);
var a = 10;
var b = a++;
print(a); //11
print(b); //10
5.条件表达式
(1) if else switch case
(2) 三目运算符
(3) ??
运算符
bool flag = false;
String a = flag ? 'true' : 'false';
print(a);
var a;
var b = a ?? 10; //a 为空,10赋值给b; a不为空,a赋值给b
print(b);
六 类型转换
1.Number 与 String 类型之间的转换
Number类型转成String类型 toString()
String
转Number parse
(建议转double
,因为int和double的字符都不会报错; 或用 try catch)
2.其他类型转换成Booleans类型
isEmpty:判断字符串是否为空
int a = 10;
String str = a.toString();
print(str);
var myNum = int.parse(str);
print(myNum is int);
报错:
str = '123.1';
myNum = int.parse(str);
print(myNum is int);
str = '123.1';
var myDouble = double.parse(str);
print(myDouble is double);
String price = '';
try{
var myNum = double.parse(price);
print(myNum);
}catch(err){
print(0);
}
var str = '123';
if(str.isEmpty){
print('空');
}else{
print('str不为空');
}
var myNum = 123;
if(myNum == 0){
}
var myNum;
if(myNum == nil){
print('空');
}else{
print('str不为空');
}
var myNum = 0/0;
print(myNum);
if(myNum.isNaN){ //NaN 非数 表示未定义或不可表示的值
print('NaN');
}else{
print('no NaN');
}
七循环
(1) for循环
for(int i = 0; i < 10; i++){
print(i);
}
List list = ['1','2','3'];
for(var item in list){
print(item);
}
(2) while
while(表达式){
}
do{
语句
}while(表达式);
注意:1.最后的分号不要忘记
2.循环条件中使用的变量需要经过初始化
3.循环体中,应有结束循环的条件,否则会造成死循环。
break 跳出循环体 / continue 跳过当前循环,然后循环还会继续执行
八 集合
(1) List
(2) Set 最主要的功能是去除数组重复内容
(3) Map
List里面常用的属性和方法:
常用属性:
length 长度
reversed 翻转
isEmpty 是否为空
isNotEmpty 是否不为空
常用方法:
add 增加
addAll 拼接数组
indexOf 查找 传入具体值
remove 删除 传入具体值
removeAt 删除 传入索引值
fillRange 修改
insert(index,value); 指定位置插入
insertAll(index,list) 指定位置插入List
toList() 其他类型转换成List
join() List转换成字符串
split() 字符串转化成List
List 提供的循环方法
forEach 遍历
map 主要用于修改数据
where 把满足条件的返回一个集合
any 只要集合中有满足条件的就返回true
every 每一个都要满足条件返回true,否则返回 false
List list = ['1','2','3'];
print(list.reversed);
List newList = list.reversed.toList();
print(newList);
var str = list.join('-');
var newlist = str.split('-');
print(list is List);
myList.forEach((value){
print("%value");
})
List myList = [1, 3, 4];
forEach中只有一行代码可以简写
s.forEach((value)=>print(value));
//Map
Map person ={
"name":"张三",
"age":"18",
}
person.forEach((key,value){
print("$key, $value");
})