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

【Flutter】Dart:变量和内置类型

在 Flutter 中,Dart 语言是核心的编程语言,它以简洁的语法、强类型的特性和高效的执行能力著称。Dart 提供了多种内置类型,包括数字、字符串、布尔、集合类型(如 List、Set、Map)和符文(runes)等。在这篇教程中,我们将深入探讨 Dart 的变量定义、内置类型及其使用方法。

Dart 变量声明与类型推断

在 Dart 中,变量可以通过 varfinalconst 和明确的类型声明来定义:

  • var:类型推断,Dart 会根据赋值推断出变量的类型。
  • final:定义一个不可重新赋值的变量,但其内容可以改变(适用于 List、Set 等集合类型)。
  • const:定义一个编译时常量,值在编译时即已确定,不能改变。
  • 也可以显式地声明类型,例如 intString 等。
var name = 'Dart';  // 自动推断为 String 类型
final age = 25;     // 不可重新赋值
const pi = 3.1415;  // 编译时常量
String language = 'Flutter'; // 明确声明类型

数字类型

Dart 中的数字类型主要分为两种:intdouble

  • int:整数类型,表示没有小数部分的数字,64 位的有符号整数。
  • double:双精度浮点数,用于表示带小数点的数字。

int 类型

int a = 10;
int b = 5;
int sum = a + b;  // 加法
int difference = a - b;  // 减法
int product = a * b;  // 乘法
int quotient = a ~/ b;  // 整除

double 类型

double pi = 3.1415;
double radius = 5.5;
double area = pi * radius * radius;  // 计算面积

数字类型的常用方法

Dart 提供了丰富的数字类型方法:

int n = -5;
print(n.abs());  // 取绝对值,输出 5

double num = 5.75;
print(num.ceil());  // 向上取整,输出 6
print(num.floor());  // 向下取整,输出 5
print(num.round());  // 四舍五入,输出 6

字符串类型

Dart 的 String 类型用于表示一系列字符。可以用单引号 ' ' 或双引号 " " 来创建字符串,Dart 对两者没有区别。

String greeting = 'Hello, Dart!';
String multiLine = '''这是
多行字符串''';

字符串插值

使用 $ 可以轻松将变量或表达式嵌入到字符串中。

String name = 'Flutter';
String message = 'Welcome to $name';  // 插入变量
String complexMessage = '1 + 1 = ${1 + 1}';  // 插入表达式

常用字符串方法

Dart 提供了一些常用的字符串操作方法:

String text = 'Dart is awesome';
print(text.length);  // 获取字符串长度
print(text.toUpperCase());  // 转换为大写
print(text.toLowerCase());  // 转换为小写
print(text.contains('awesome'));  // 判断是否包含子串
print(text.replaceAll('awesome', 'amazing'));  // 替换子串

布尔类型

Dart 的 bool 类型用于表示逻辑上的真 (true) 或假 (false)。

bool isFlutterAwesome = true;
bool isDartHard = false;

布尔值通常用于控制流程语句,比如 ifwhile 等:

if (isFlutterAwesome) {
  print('Flutter is awesome!');
} else {
  print('Keep learning!');
}

列表类型(List)

Dart 的 List 是一个有序的、可重复的集合类型,类似于数组。

创建列表

List<int> numbers = [1, 2, 3, 4, 5];
var names = ['Alice', 'Bob', 'Charlie'];  // 自动推断为 List<String>

常用操作

numbers.add(6);  // 添加元素
print(numbers);  // 输出 [1, 2, 3, 4, 5, 6]

numbers.removeAt(0);  // 移除第一个元素
print(numbers);  // 输出 [2, 3, 4, 5, 6]

print(numbers.length);  // 获取长度

print(numbers.contains(3));  // 判断是否包含某个元素,输出 true

列表生成

Dart 允许我们动态生成列表:

List<int> evenNumbers = List.generate(5, (index) => index * 2);  // [0, 2, 4, 6, 8]

集合类型(Set)

Set 是一个无序且不可重复的集合,主要用于存储独一无二的值。

创建集合

Set<String> fruits = {'apple', 'banana', 'orange'};
var uniqueNumbers = <int>{1, 2, 3, 4};  // 集合自动推断类型

常用操作

fruits.add('grape');  // 添加元素
print(fruits);  // 输出 {apple, banana, orange, grape}

fruits.remove('banana');  // 移除元素
print(fruits);  // 输出 {apple, orange, grape}

print(fruits.contains('apple'));  // 判断是否包含某个元素,输出 true

映射类型(Map)

Map 是一个键值对的无序集合,键必须是唯一的,但值可以重复。

创建 Map

Map<String, int> scores = {
  'Alice': 90,
  'Bob': 85,
  'Charlie': 88
};

常用操作

print(scores['Alice']);  // 通过键获取值,输出 90

scores['Bob'] = 95;  // 修改值
print(scores);  // 输出 {Alice: 90, Bob: 95, Charlie: 88}

scores.putIfAbsent('Dave', () => 80);  // 如果不存在则添加
print(scores);  // 输出 {Alice: 90, Bob: 95, Charlie: 88, Dave: 80}

scores.remove('Charlie');  // 删除键值对
print(scores);  // 输出 {Alice: 90, Bob: 95, Dave: 80}

符文(Runes)和 Unicode 字符

Dart 使用 Runes 类型来表示 Unicode 字符。字符串在 Dart 中是 UTF-16 编码,但 Runes 可以处理 32 位 Unicode 字符。

String heart = '\u2665';  // 使用 Unicode 表示心形符号
print(heart);  // 输出 ♥

可以通过 runes 属性获取字符串的符文:

var emoji = '👋🌍';
emoji.runes.forEach((int rune) {
  var character = String.fromCharCode(rune);
  print(character);  // 输出每个字符
});

总结

在 Dart 中,内置类型包括数字、字符串、布尔、List、Set、Map 和符文,每种类型都有丰富的操作方法和灵活的用法。熟悉这些内置类型的使用,将帮助你更加高效地处理 Flutter 开发中的各种数据操作。

通过掌握这些基础知识,你可以更加自信地在 Flutter 应用中使用 Dart 的强大功能,快速实现各种业务逻辑。


http://www.kler.cn/news/357671.html

相关文章:

  • Java 直接获取 pom.xml 配置的属性值
  • 【0day】ChatGPT个人专用版 pictureproxy SSRF漏洞【附poc下载】
  • 15.java面向对象:多态
  • 可达性分析法
  • 2024-10-15 Nuxt3打包部署到Nginx流程
  • [LeetCode] 210. 课程表II
  • 对Android的Binder机制的了解
  • 汽车建模用什么软件最好?汽车建模渲染建议!
  • 【力扣 | SQL题 | 每日4题】力扣2308,2324,2346,2372
  • 特斯联|日常|Java|后端开发
  • LeetCode LRU 缓存
  • MySQL创建和管理表
  • 第15篇:网络架构优化与综合案例分析
  • C/C++程序员为什么要了解汇编?汇编语言的好处与学习路径详解
  • 《环境感知:开启智能生活新视角》
  • 怎么快速定位bug?怎么编写测试用例?
  • 基于SSM发改局电子OA办公平台JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解
  • ArcGIS无插件加载(无偏移)在线天地图高清影像与街道地图指南
  • vue3处理货名的拼接
  • 全网免费的文献调研方法以及获取外网最新论文、代码和翻译pdf论文的方法(适用于硕士、博士、科研)