【Dart】=> [02] Dart初体验-基础语法(变量-常量-数值-布尔-字符串-列表-字典-安全机制

目录

    • Dart初体验
    • 基础语法
    • 变量
    • 常量
    • 数据类型
    • 数值类型
    • 布尔类型
    • 字符串类型
    • List(列表)类型
    • Map(字典)类型
    • Dart空安全机制

Dart初体验

效果:运行Dart程序,并输出字符串 ‘hello itcast’

  1. 创建Dart文件 hello.dart,(Dart文件的后缀是 .dart )
  2. 编写Dart代码
   // 程序肯定都是有入口的 : main函数
void main(){
  //打印字符串 'hello dart'
  print('hello dart');
}
  1. 运行 hello.dart 文件
  • 终端执行命令:dart hello.dart

基础语法

能够知道变量和常量、数据类型、运算符、流程控制的基本使用

学习内容:

  1. 变量
  2. 常量
  3. 数据类型
  4. 运算符
  5. 流程控制

变量

  1. 思考:编写代码时,如何表示一个数字? 字面量

  2. 思考:编写代码时,如何对数据进行计算? 表达式

  3. 思考:如何记录计算结果? 变量

  4. 变量:
    在计算机中记录计算结果,并在需要的时候使用,可以修改
    语法:var 变量名 = 表达式;

    var age = 18;
    

    类型推断:var 声明的变量支持类型推断,并且有类型检查

【Dart】=> [02] Dart初体验-基础语法(变量-常量-数值-布尔-字符串-列表-字典-安全机制_第1张图片

void main(){
  //计算机中,表示一个数字:字面量
  1;
  10;

  //表达式 计算机中记录计算结果,使用表达式对数据进行计算并且得到结果
  1 + 10 ;
  print(1+10);
  print(1+10);

  //变量:计算机中记录计算结果,并且在需要的时候去使用
  //语法:var 变量名 = 表达式
  var num = 1+10;
  print(num);
  print(num);

  //变量特点:
  //可以修改
  var age = 18;
  print(age);
  age = 19;
  print(age);

  // 支持类型推断:修改变量时会检查类型
  // A value of type 'String' can't be assigned to a variable of type 'int'.
  // age = 'hello';
}

常量

  1. 思考:如何记录不可变的数据? 常量:用于记录不可变的数据,不可以修改

  2. 关键字: const 和 final

  3. 语法:【Dart】=> [02] Dart初体验-基础语法(变量-常量-数值-布尔-字符串-列表-字典-安全机制_第2张图片

  4. 区别:

    • const 是编译期常量,用于记录程序在编译期就要能确定的值
    • final 是运行时常量,用于记录程序在运行时确定的值
      【Dart】=> [02] Dart初体验-基础语法(变量-常量-数值-布尔-字符串-列表-字典-安全机制_第3张图片
void main(){
  //const 
  const a = 10;
  print(a);
  // Constant variables can't be assigned a value.
  // a = 20;

  // final
  final b = 30;
  print(b);

  //区别
  var x = 1;
  var y = 2;

  //final:运行时常量,值在运行时赋值
  final ret1 = x+y;

  // const :编译期常量,值在编译时赋值
  // const res2 = x+y;
  const rest3 = 1+2;
}

数据类型

虽然,Dart可以使用var关键字定义不同类型的变量,并且有类型推断和检查
但是,我们依然可以在定义变量时明确的指定变量的类型,从而更好的做类型检查

学习内容:

  1. 常用数据类型

    • num(数值)
    • bool(布尔)
    • String(字符串)
    • List(列表)
    • Map(字典)
  2. Dart空安全机制

数值类型

【Dart】=> [02] Dart初体验-基础语法(变量-常量-数值-布尔-字符串-列表-字典-安全机制_第4张图片

布尔类型

bool 类型用于记录真 或 假,一般用于逻辑判断
真:true
假:false

void main() {
  // 需求:使用布尔类型记录用户是否登录成功
  // 登录成功:true
  bool isLogin = true;
  print(isLogin);
  // 登录失败:false
  isLogin = false;
  print(isLogin);
}

字符串类型

  1. 定义字符串:String // 定义字符串:String String name = 'zzm'; print(name);
  2. 拼接字符串: 插值表达式: ‘ 表达式 ′ 或 ′ { 表达式 }' 或 ' 表达式变量’ 案例:拼接商品价格 double price = 199.0;
  3. 注意点:使用 + 拼接字符串时,只能 ‘字符串’ + ‘字符串’ // String priceStr = '${price}起'; String priceStr = '$price起'; print(priceStr);
void main() {
  // 定义字符串:String
  String name = 'zzm';
  print(name);

  // 拼接字符串: '199.0起'
  // 准备价格:double
  double price = 199.0;
  // 价格字符串拼接
  // String priceStr = '${price}起';
  String priceStr = '$price起';
  print(priceStr);
}

List(列表)类型

  1. List(列表)可以有序的存储数据 定义列表:List // 定义列表:List // 需求:按序存储 '居家' '美食' '服饰' List categories = ['居家', '美食', '服饰'];
  2. 使用列表:查改增删
  3. 列表长度:列表. length
  4. 查询:列表[角标]
  5. 修改:列表[角标] = 新值
  6. 新增:
    新增一个元素:列表.add(新值) 新增一个列表:列表. addAll(新列表)
    删除: 删除指定的元素: remove(元素) 或者removeAt(角标) (侧滑删除购物车时使用
  7. 遍历列表:列表.forEach()
void main() {
  // 定义列表:List
  // 需求:按序存储 '居家' '美食' '服饰'
  List categories = ['居家', '美食', '服饰'];
  print(categories);
  List nums = [1, 3, 5, 7];
  print(nums);

  // 使用列表:查改增删
  // 查询:
  // 查询列表的长度,就是列表内部元素的个数
  int len = categories.length;
  print(len);
  // 查询指定的元素: 列表[索引]
  String category = categories[1];
  print(category);

  // 修改:列表[索引] = 新值
  categories[1] = '美食家';
  print(categories);

  // 新增:
  // 新增一个元素,一次新增一个元素:列表.add(新元素)
  categories.add('母婴');
  print(categories);
  // 新增一个列表,一次新增多个元素:列表.addAll(新列表)
  categories.addAll(['办公', '生鲜']);
  print(categories);

  // 删除
  // 使用元素删除
  categories.remove('生鲜');
  print(categories);
  // 使用索引删除
  categories.removeAt(4);
  print(categories);

  // 遍历列表:取出所有商品分类名称
  // element: 列表中遍历读取的元素
  categories.forEach((element) {
    print(element);
  });
}

Map(字典)类型

Map(字典)是使用 键值对 来存储数据的
语法:{ key: value }

// 需求:记录商品分类的编号 和 名称
  Map category = {
    'id': 1,
    'name': '居家',
  };
  1. 定义字典:
  2. 使用字典:查改增删
  3. 查询:字典[key]
  4. 修改:字典[key] = 新值
  5. 删除:字典.remove(key)
  6. 新增(不常用):字典[新key] = 新值(注意:新key 必须是 不存在的key)
  7. 遍历字典:字典.forEach()
void main() {
  // 定义字典:{key: value}
  // 需求:记录商品分类的编号 和 名称
  Map category = {
    'id': 1,
    'name': '居家',
  };

  // 使用字典:查改增删
  // 查询:字典[key]
  String name = category['name'];
  print(name);
  // 修改:字典[key] = 新值
  category['name'] = '美食';
  print(category);
  // 删除:remove(key)
  category.remove('name');
  print(category);
  // 新增:字典[新key] = 值
  // 注意:key必须是当前字典中不存在的key,很少使用新增
  category['name'] = '办公';
  print(category);

  // 遍历字典
  category.forEach((key, value) {
    print('$key -- $value');
  });
}

Dart空安全机制

  1. Dart 从 2.12.0 版本开始,已支持健全的空安全机制

  2. 在空安全机制下,代码中的类型默认都是非空的 除非将变量明确的声明为可空,否则它一定是非空的类型

  3. 作用:原本处于运行时的空值引用错误,将变为编译时的分析错误,从而BUG会发现的更早在这里插入图片描述

  4. 空安全机制下,如何定义并使用变量?

  5. 变量不能为空时:指定默认值

  6. 变量可以为空时:使用 ? 明确的指定变量可以为空

     ` // 直接设置默认值
  String name2 = 'itheima';
  // The non-nullable local variable 'name2' must be assigned before it can be used.
  print(name2.length);

  // 使用 ? 明确的指定变量可以为空
  String? name3;
  // name3? : 表示非空检查,如果name3为空,不去调用属性或方法,如果name3不为空,可以调动属性或方法
  print(name3?.length); `
void main() {
  // 需求:定义字符串,并获取字符串长度
  String name1 = 'zzm';
  print(name1.length);

  // 直接设置默认值
  String name2 = 'zzxm';
  // The non-nullable local variable 'name2' must be assigned before it can be used.
  print(name2.length);

  // 使用 ? 明确的指定变量可以为空
  String? name3;
  // name3? : 表示非空检查,如果name3为空,不去调用属性或方法,如果name3不为空,可以调动属性或方法
  print(name3?.length);
}

你可能感兴趣的:(#,【Dart】,android,dart,flutter,前端,vue)