当前位置: 首页 > news >正文

dart学习记录2

一、基本数据类型

  • 数字类型num(int,double)
  • 字符串类型(String)
  • 布尔类型(bool)
  • 记录类型records((value1, value2))
  • 列表(list也成为数组)
  • 集合(set)
  • map类型(map)
  • runes类型(Runes 是一个表示 UTF - 32 字符序列的类型)
  • 符号类型(symbol)
  • null类型(null)
  • dynamic 类型

1.recods记录类型

记录是一种匿名的、不可变的数据结构,它可以包含多个不同类型的值。这些值被称为记录的字段,每个字段可以有一个可选的名称。
示例

  // 创建一个包含两个值的记录
  var point = (10, 20);
  // 访问记录中的值,使用索引从 0 开始
  print(point.$1); // 输出: 10
  print(point.$2); // 输出: 20


  // 创建一个包含命名字段的记录
  var person = (name: 'John', age: 30);
  // 访问记录中的值,使用字段名
  print(person.name); // 输出: John
  print(person.age);  // 输出: 30


  var record = ('first', a: 2, b: true, 'last', ['a', 'b']);
  print(record.$1);   //first
  print(record.a);   //2
  print(record.b);   //true
  print(record.$2);   //last
  print(record.$3[0]);   //a

2.dynamic 类型

dynamic 类型可以用来声明变量、函数参数、返回值等,使用 dynamic 声明的变量可以在运行时持有任意类型的值,并且 Dart 编译器不会对其进行类型检查。也就是说,你可以给 dynamic 类型的变量赋予不同类型的值,调用该变量上任意的方法或访问属性,编译器不会报错,只有在运行时才会根据实际情况进行处理。
示例代码

  • 变量声明
void main() {
  dynamic myVariable;
  myVariable = 10; // 可以赋值为整数
  print(myVariable); 

  myVariable = 'Hello'; // 也可以赋值为字符串
  print(myVariable); 

  myVariable = [1, 2, 3]; // 还可以赋值为列表
  print(myVariable); 
}
  • 函数参数和返回值
dynamic add(dynamic a, dynamic b) {
  return a + b;
}

void main() {
  var result1 = add(1, 2); // 传入整数
  print(result1); 

  var result2 = add('Hello', ' World'); // 传入字符串
  print(result2); 
}

3.类型注释

类型注释指的是在变量、函数参数或返回值处显式指定的类型信息,帮助静态分析和提高代码可读性。
语法:在变

  var uniqueNames  = {'Seth', 'Kathy', 'Lars'};		//编译器可以自动类型推导为Strng
  var uniqueNames = <String>{'Seth', 'Kathy', 'Lars'};	//类型注释,明确指定类型为String


  var nameAgeMap = <String, int>{
    'Seth': 25,
    'Kathy': 30,
    'Lars': 35
  };
  // 明确指定映射的键为 String 类型,值为 int 类型

4.泛型

泛型允许你创建可重用的组件,这些组件可以处理多种数据类型而不仅仅是单一类型。通过在类、方法或函数的定义中使用类型参数,你可以在使用这些组件时指定具体的类型。

  • 泛型类
class Box<T> {
 T value;

 Box(this.value);

 T getValue() {
   return value;
 }
}

void main() {
 // 创建一个存储整数的 Box 实例
 Box<int> intBox = Box<int>(10);
 print(intBox.getValue()); // 输出: 10

 // 创建一个存储字符串的 Box 实例
 Box<String> stringBox = Box<String>("Hello");
 print(stringBox.getValue()); // 输出: Hello
}
  • 泛型接口
T add<T>(T a, T b) {
  if (T == String) {
    return ((a as String) + (b as String)) as T;	//as类型,转换为Strinfg
  } else if (T == int || T == double) {
    return ((a as num) + (b as num)) as T;
  }
  throw ArgumentError('Unsupported type for addition');
}

void main() {
  dynamic  result1 = add<int>(1, 2);
  print(result1);

  result1 = add<double>(1.5, 2.5);
  print(result1);

  result1 = add<String>('Hello', ' World');
  print(result1);

}

相关文章:

  • 基于STM32计时秒表设计Proteus仿真+程序+设计报告+原理图PCB+讲解视频
  • python中有几种作用域
  • 传输层自学
  • 配置单区域OSPF实验和报文抓包和分析
  • 51单片机的工作方式
  • 从模型到应用:大语言模型生态系统完全指南
  • 1.Windows+vscode+cline+MCP配置
  • HarmonyOS NEXT开发进阶(十三):网络请求封装
  • 目标:掌握无位置传感器(FOC)控制PMSM的设计与实现
  • 【go】Go 语言中 errors.Is 和 errors.As 的区别
  • RxSwift 学习笔记第三篇之RxSwift的Observer
  • WIN11开发环境变量记录
  • pyjail逃逸姿势
  • 计算机四级 - 数据库原理 - 第3章 「关系数据库系统概述」
  • React(二):JSX语法解析+综合案例
  • Java 大视界 -- Java 大数据在智慧交通自动驾驶仿真与测试数据处理中的应用(136)
  • 一次Linux下 .net 调试经历
  • 游戏成瘾与学习动力激发策略研究——了解“情感解离”“创伤理论”
  • 电磁兼容|RC电路
  • C或C++中实现数据结构课程中的链表、数组、树和图
  • 铁路五一假期运输今日启动,预计发送旅客1.44亿人次
  • 西班牙葡萄牙电力基本恢复
  • 4月人文社科联合书单|天文学家的椅子
  • 总有黑眼圈是因为“虚”吗?怎么睡才能改善?
  • 老凤祥一季度净利减少两成,去年珠宝首饰营收下滑19%
  • 金融创新破局记:中小微企业转型背后的金融力量