Dart - Dart SDK、Hello World 案例、变量声明、常量声明、常量 final、字符串类型

一、Dart SDK

  1. Dart SDK 官方网址:https://dart.dev/get-dart/archive

  2. 下载完成、配置好环境变量后,执行 dart --version 指令,即可查看 Dart 版本


二、Hello World 案例

  1. 在 VScode 中,安装 Dart 插件
  1. 创建并编辑 Dart 文件 01_hello_world.dart
dart 复制代码
void main() {
  print('Hello, World!');
}
  1. 执行 dart run 【文件名】.dart 指令,运行 Dart 文件

三、Hello World 案例解读

1、核心概念
  1. 在 Dart 中,main 函数是程序的入口点,每一个可执行的 Dart 程序都必须包含一个 main 函数,程序运行时,会首先执行 main 函数中的代码

  2. void 表示函数不返回任何值,对于 main 函数,通常使用 void,因为它不需要返回任何东西

  3. print 是 Dart 标准库提供的函数,用于在控制台输出信息

2、注意事项
  1. Dart 语句以分号结尾
dart 复制代码
print('Hello'); // 正确

print('Hello') // 错误
  1. Dart 中既可以使用单引号也可以使用双引号:
dart 复制代码
print('Hello, World!');
print("Hello, World!");
  1. 大小写敏感
dart 复制代码
print('Hello'); // 正确

Print('Hello'); // 错误

四、变量声明

1、演示
  1. var 是 Dart 中最常用的变量声明方式,Dart 会自动推断变量的类型
dart 复制代码
var name = 'Alice';
var age = 25;
var height = 1.68;
var isStudent = true;

print('Name: $name');
print('Age: $age');
print('Height: $height');
print('Is Student: $isStudent');
复制代码
Name: Alice
Age: 25
Height: 1.68
Is Student: true
  1. 也可以显式地指定变量类型
dart 复制代码
int count = 10;
double price = 99.9;
String message = 'Welcome';
bool isActive = true;

print('Count: $count');
print('Price: $price');
print('Message: $message');
print('Is Active: $isActive');
复制代码
# 输出结果

Count: 10
Price: 99.9
Message: Welcome
Is Active: true
2、变量命名规则
  1. 合法的变量名
dart 复制代码
var name = 'Alice';          // 字母开头
var userName = 'Bob';        // 驼峰命名法
var user_name = 'Charlie';   // 下划线命名法
var _private = 'Secret';     // 下划线开头
var age2 = 30;               // 包含数字(不在开头)
  1. 非法的变量名
dart 复制代码
var 2name = 'Alice';         // 不能以数字开头
var my-name = 'Bob';         // 不能包含连字符
var my name = 'Charlie';     // 不能包含空格
var class = 'Dart';          // 不能使用保留字
3、注意事项
  1. 不能使用未初始化的变量
dart 复制代码
int count;
double price;
String name;
bool isActive;

print(count);
print(price);
print(name);
print(isActive);
  1. 一旦 Dart 推断出变量的类型,就不能改变
dart 复制代码
var value = 10;   // value 是 int 类型
value = 20;       // 仍然是 int 类型
value = 'text';   // 错误,不能赋值 String 类型
4、扩展
  • 多变量声明
dart 复制代码
var (x, y, z) = (1, 2, 3);

print('x=$x, y=$y, z=$z');
dart 复制代码
var a = 1, b = 2, c = 3;

print('a=$a, b=$b, c=$c');

五、常量声明

1、基本介绍
  • const 用于声明编译时常量,这些值在程序运行前就已经确定,且不可改变
2、演示
dart 复制代码
// 显式类型声明

const int maxItems = 100;
const double pi = 3.14159;
const String appName = 'Dart Learning';
dart 复制代码
// 自动类型推断

const maxItems = 100;
const pi = 3.14159;
const appName = 'Dart Learning';
3、const 集合

const 可以用于声明不可变的集合,尝试修改会报错

dart 复制代码
const List<int> numbers = [1, 2, 3, 4, 5];
const Map<String, int> scores = {'Alice': 95, 'Bob': 88};
4、注意事项
  • const 用于声明编译时常量,值必须在编译时确定,不能用于运行时计算的值
dart 复制代码
// 允许

const int a = 10;
const int b = 20;
const int sum = a + b;
dart 复制代码
// 不允许

const now = DateTime.now();

六、常量 final

1、基本介绍
  1. final 用于声明只能被赋值一次的变量,是 Dart 中另一个重要的不可变类型声明方式

  2. final 变量可以在运行时赋值

  3. final 列表,变量引用不可变,但内容可变

2、演示
dart 复制代码
// 显式类型声明

final String name = 'Alice';
final int age = 25;
dart 复制代码
// 自动类型推断

final name = 'Alice';
final age = 25;
dart 复制代码
// 运行时赋值

final DateTime now = DateTime.now();
dart 复制代码
// final 列表内容可变

final List<int> numbers = [1, 2, 3];

numbers.add(4);

七、字符串类型

1、基本介绍
  1. Dart 支持单引号和双引号创建字符串
dart 复制代码
String singleQuote = 'Hello';
String doubleQuote = "Hello";
  1. 多行字符串
dart 复制代码
void main() {
  String multiline = '''
    This is a multiline string.
    It can span multiple lines.
    Very convenient!
  ''';
  
  print(multiline);
}
复制代码
# 输出结果

    This is a multiline string.
    It can span multiple lines.
    Very convenient!
  1. 字符串拼接
dart 复制代码
// 使用 + 运算符

String combined = 'Dart ' + 'is ' + 'awesome!';

print(combined);
dart 复制代码
// 使用 * 运算符

String repeated = 'Ha ' * 3;

print(repeated);
  1. 字符串插值
dart 复制代码
String name = 'Alice';
int age = 25;

// 简单插值
String greeting = 'Hello, $name! You are $age years old.';

// 表达式插值
String expression = 'Age next year: ${age + 1}';

print(greeting);
print(expression);
2、常用方法
  1. 大小写转换
dart 复制代码
String text = 'Hello World';

print('Original: $text');
print('Upper: ${text.toUpperCase()}');
print('Lower: ${text.toLowerCase()}');
  1. 字符串查找
dart 复制代码
String text = 'Hello World';

// 包含检查
print('Contains "World": ${text.contains('World')}');
print('Contains "Dart": ${text.contains('Dart')}');

// 开头结尾检查
print('Starts with "Hello": ${text.startsWith('Hello')}');
print('Ends with "World": ${text.endsWith('World')}');

// 查找位置
print('Index of "o": ${text.indexOf('o')}');
print('Last index of "o": ${text.lastIndexOf('o')}');
复制代码
# 输出结果

Contains "World": true
Contains "Dart": false
Starts with "Hello": true
Ends with "World": true
Index of "o": 4
Last index of "o": 7
  1. 字符串截取
dart 复制代码
String text = 'Hello World';

// 截取子串
print('Substring(0, 5): ${text.substring(0, 5)}');
print('Substring(6): ${text.substring(6)}');

// 分割字符串
List<String> words = text.split(' ');
print('Split: $words');

// 去除空白
String withSpaces = '  Hello  ';
print('Trim: "${withSpaces.trim()}"');
print('Trim left: "${withSpaces.trimLeft()}"');
print('Trim right: "${withSpaces.trimRight()}"');
复制代码
# 输出结果

Substring(0, 5): Hello
Substring(6): World
Split: [Hello, World]
Trim: "Hello"
Trim left: "Hello  "
Trim right: "  Hello"
  1. 字符串替换
dart 复制代码
String text = 'Hello World';

// 替换所有
String replaced = text.replaceAll('o', 'X');
print('Replace all: $replaced');

// 替换首个
String replacedFirst = text.replaceFirst('o', 'X');
print('Replace first: $replacedFirst');

// 替换字符串
String replacedStr = text.replaceRange(0, 5, 'Hi');
print('Replace range: $replacedStr');
复制代码
# 输出结果

Replace all: HellX WXrld
Replace first: HellX World
Replace range: Hi World
3、字符串属性
dart 复制代码
String text = 'Hello';

print('Length: ${text.length}');
print('Hash code: ${text.hashCode}');
print('Runtime type: ${text.runtimeType}');

String unicode = '你好';

print('Unicode length: ${unicode.length}');
print('Code units: ${unicode.codeUnits}');

String t = '  ';

print('Is empty: ${t.isEmpty}');
print('Is not empty: ${t.isNotEmpty}');
复制代码
# 输出结果

Length: 5
Hash code: 828172268
Runtime type: String
Unicode length: 2
Code units: [20320, 22909]
Is empty: false
Is not empty: true
4、注意事项
  1. 字符串是不可变的
dart 复制代码
// 错误

String text = 'Hello';

text[0] = 'J';

print(newText);
dart 复制代码
// 正确

String text = 'Hello';

String newText = 'J${text.substring(1)}';

print(newText);
  1. 字符串索引
dart 复制代码
String text = 'Hello';

// 访问字符
print('First char: ${text[0]}');

// 使用 runes 处理 Unicode
print('Runes: ${text.runes}');
复制代码
# 输出结果

First char: H
Runes: (72, 101, 108, 108, 111)
  1. null 安全
dart 复制代码
// 错误,可能为 null

String? nullable;

print(nullable.length);
dart 复制代码
// 正确,空安全检查

String? nullable;

print('Length: ${nullable?.length ?? 0}');
dart 复制代码
// 正确,提供默认值

String? nullable;

print('Value: ${nullable ?? 'default'}');
5、扩展
(1)Raw 字符串
  1. 普通字符串,\n 是换行符
dart 复制代码
String normal = 'Line 1\nLine 2';

print('Normal:');
print(normal);
复制代码
# 输出结果

Normal:
Line 1
Line 2
  1. Raw 字符串,\n 是字面量符
dart 复制代码
String raw = r'Line 1\nLine 2';

print('Raw:');
print(raw);
复制代码
# 输出结果

Raw:
Line 1\nLine 2
(2)StringBuffer 性能优化
  • 大量字符串拼接时,使用 StringBuffer 更高效
dart 复制代码
StringBuffer buffer = StringBuffer();

for (int i = 0; i < 1000; i++) {
  buffer.write('Item $i, ');
}

String result = buffer.toString();

print('Length: ${result.length}');
(3)字符串与其他类型转换
  1. 数字转字符串
dart 复制代码
int num = 42;

String fromInt = num.toString();
String formatted = num.toStringAsFixed(2);

print(fromInt);
print(formatted);
复制代码
# 输出结果

42
42.00
  1. 字符串转数字
dart 复制代码
int parsedInt = int.parse('123');
double parsedDouble = double.parse('3.14');

print(parsedInt);
print(parsedDouble);
复制代码
# 输出结果

123
3.14
  1. 字符串转列表
dart 复制代码
String csv = 'apple,banana,orange';

List<String> fruits = csv.split(',');

print(fruits);
复制代码
# 输出结果

[apple, banana, orange]
  1. 列表转字符串
dart 复制代码
List<String> colors = ['red', 'green', 'blue'];

String joined = colors.join('+');

print(joined);
复制代码
# 输出结果

red+green+blue
相关推荐
冴羽yayujs1 小时前
GitHub 前端热榜项目 - 日榜(2026-05-11)
前端·github
~|Bernard|1 小时前
四,go语言中GMP调度模型
java·前端·golang
YOU OU1 小时前
HTML+CSS+JavaScript
前端·javascript·css·html
xmdy58661 小时前
Flutter+开源鸿蒙实战|校园易生活Day7 个人中心完善+我的发布/收藏+退出登录+主题切换+全局UI美化(项目闭环)
flutter·开源·harmonyos
Rkgua1 小时前
路径传参和查询传参和请求体传参区以及Vue和React的用法区分
前端·面试
JarvanMo1 小时前
Flutter + Supabase 集成 Apple Sign-In 完整指南
前端
小村儿2 小时前
连载
前端·后端·ai编程
dinl_vin2 小时前
LangChain 系列·(九):Agent——让 AI 自己做决策
前端·人工智能·langchain
孟祥_成都2 小时前
前端唯一的护城河?结合 AI 将字节组件库 Headless 化后的感想~
前端·人工智能·react.js