Emm,写个系列文章吧。
Dart速来系列。
嗯,名字,感觉 良好。
接下来,gogogogo。
旨在,让自己,让别人,快速冲鸭。 (忘性大,当个小手册吧)
Dart速来系列
- Dart速来系列1,基础:变量、常量、数值、布尔、字符串、日期时间
- Dart速来系列2,集合:列表List,集合Map,集合Set,枚举enum
- Dart速来系列2-1 关于类你所应该知道的大多数高级特性
- Dart速来系列3,函数,function,闭包高阶匿名呀
- Dart速来系列4,那些关于操作符(expr),流程控制(flow),错误(err)的事
- Dart速来系列5,进阶:泛型,泛型,泛型,特斯拉和阿马
- Dart速来系列6,进阶:异步。把线程、Isolate、microtask、Event Queue简单说明白。
- Dart速来系列7,进阶:生成器Generator,类型定义typedef,空安全
- Dart速来系列8,进阶:拓展Extension。无需修改源码,为类修改拓展新功能。
如何跑起来Drat
嗯,自己搜索下。
几乎没有人因为喜欢Dart而学Dart,基本上都是为了Flutter,为了写那个该死的app,为了碎银几两。
所以,你想办法在Android studio 里面新建一个Flutter项目。
然后呢
在test里面新建一个test的dart文件
然后跟世界说个早。
写下几行该死的代码
你好
void main() {
var number = 42; // 声明并且定义一个变量.
printInteger(number); // 调用一个函数.
sayHello("你好少年");
}
// 定义一个函数.
printInteger(int aNumber) {
print('The number is $aNumber.'); // 将内容输出至控制台.
}
sayHello(String str){
print("输出结果:"+str);
}
输出
The number is 42.
输出结果:你好少年
嗯忽略上面的巴拉巴拉说不停的代码。接下来,开始枯燥的¥……&……¥%……&(&……%¥%……&。
嗯,你是要学习的,人生很大时候都是枯燥且无聊的。
二、开始嘞少年
1. 变量
1.1 是什么?
变量是用来存储数据的容器。在Dart中,你可以声明不同类型的变量,包括数字、字符串、布尔值等。
1.2 怎么用?
在Dart中,可以使用关键字var、final和dynamic来声明变量。下面是一些示例:
var name = 'John'; // 使用var声明一个字符串类型的变量name
final age = 30; // 使用final声明一个常量age,其值在声明后不能修改
dynamic height = 1.75; // 使用dynamic声明一个动态类型的变量height
1.3 使用时需要注意什么?
- 使用
var声明的变量会根据初始值自动推断类型,但一旦确定类型后,就不能再更改它的类型。 final声明的变量只能赋值一次,一旦赋值后就不能再修改其值。dynamic声明的变量可以在运行时改变其类型,但会导致一些性能损失。在Flutter中,通常情况下,我们更倾向于使用具体的类型,因为这样可以在编译时捕获类型错误,提供更好的代码可读性和稳定性。但在某些情况下,例如从外部数据源获取数据时,我们可能需要使用dynamic类型,因为我们无法确定数据的确切类型。此外,在与原生代码或动态数据交互的情况下,dynamic类型也可能很有用。
与Java和Kotlin相比:
-
在Java和Kotlin中,变量的声明需要显式地指定类型,例如
String name = "John";。 -
Kotlin中使用
val关键字来声明不可变变量(类似于final),例如val age: Int = 30。
2. 常量
2.1 是什么?
常量是在程序执行期间值不会发生改变的变量。在Dart中,可以使用final或const关键字声明常量。
2.2 怎么用?
final int x = 5; // 使用final声明一个整数类型的常量x
const double PI = 3.14; // 使用const声明一个浮点数类型的常量PI
2.3 使用时需要注意什么?
final和const都可以用来声明常量,但在使用场景上有所不同。final常量的值可以在运行时计算,而const常量的值必须在编译时就确定下来。final和const关键字可以用于声明基本数据类型、字符串以及自定义类型的常量。
final的场景:
- 延迟初始化:当我们需要一个变量在声明后不久就初始化,但无法在声明时立即初始化时,可以使用final。它允许变量在第一次被读取时初始化。
- 对象引用:final变量可以被赋予一个对象,而该对象可以是可变的,但一旦赋值,该变量将永远指向同一个对象。这在保持对象引用不变的情况下允许对象本身的可变性。
- 在构造函数中的初始化:final变量可以在构造函数中初始化,并且一旦初始化后不能被更改。
- 循环中的临时变量:在循环中使用final声明的临时变量,因为它们只在循环内部存在,不需要保留它们的状态。
const的场景:
- 编译时常量:const关键字用于声明编译时常量。这意味着它们的值必须在编译时已知,不能依赖于运行时计算。
- 性能优化:使用const可以在编译时执行一些优化,例如在构建相同值的多个实例时,只创建一个实例并共享它。
- 不可变性:const对象是不可变的,这意味着它们的值在运行时不会改变。这种不可变性可以提高代码的安全性和可维护性。
- 构建UI:在构建Flutter UI时,const可以用于声明静态部件,这样可以提高性能,因为Flutter可以在需要时重用它们而不是重新构建。
与Java和Kotlin相比:
- 在Java中,可以使用
final关键字来声明常量,例如final int x = 5;。 - Kotlin中使用
val关键字来声明不可变变量,例如val x: Int = 5,但没有专门用于声明常量的关键字。
3. 数值
3.1 是什么?
数值是用来表示数字的数据类型。在Dart中,有整数类型和浮点数类型。
3.2 怎么用?
int age = 30; // 声明一个整数类型的变量age
double height = 1.75; // 声明一个浮点数类型的变量height
3.3 使用时需要注意什么?
- Dart中的整数类型为
int,浮点数类型为double。 - 数值类型支持基本的算术运算,如加法、减法、乘法和除法。
与Java和Kotlin相比:
- 在Java和Kotlin中,整数类型的声明方式与Dart类似,分别为
int和Integer(Java)以及Int(Kotlin)。 - 浮点数类型的声明方式在Java中为
double,而在Kotlin中为Double。
在Dart中,数值类型还支持常见的数学运算,如加减乘除、取模等。另外,Dart还提供了一些内置的数学函数和常量,如sin、cos、sqrt等,以及常量pi等。
4. 布尔
4.1 是什么?
布尔类型用于表示真或假的值。在Dart中,布尔类型的关键字为bool,只有两个可能的值:true和false。
4.2 怎么用?
bool isRaining = true; // 声明一个布尔类型的变量isRaining,并赋值为true
4.3 使用时需要注意什么?
- 布尔类型的变量可以用于控制程序的流程,例如条件判断和循环控制。
与Java和Kotlin相比:
- 在Java和Kotlin中,布尔类型的关键字分别为
boolean(Java)和Boolean(Kotlin)。 - 布尔类型的用法在Java、Kotlin和Dart中基本相同。
5. 字符串
5.1 是什么?
字符串是一系列字符的集合,用于表示文本数据。在Dart中,字符串是不可变的,意味着一旦创建后,其内容不可修改。
5.2 怎么用?
在Dart中,可以使用单引号或双引号括起来的字符序列来表示字符串。
String message1 = 'Hello'; // 使用单引号声明一个字符串变量message1
String message2 = "World"; // 使用双引号声明一个字符串变量message2
5.3 使用时需要注意什么?
- 字符串可以包含任何字符,包括字母、数字、特殊字符和空格。
- 字符串可以通过
+运算符进行拼接,将多个字符串连接起来。 - 可以使用
${expression}将表达式的结果嵌入到字符串中。
下面是一些示例代码,展示了字符串的基本用法:
String name = 'John';
int age = 30;
String greeting = 'Hello, my name is $name. I am $age years old.'; // 字符串插值
print(greeting); // 输出:Hello, my name is John. I am 30 years old.
需要注意的是,使用双引号和单引号来定义字符串是等效的,但在字符串内部引用相同类型的引号时,需要进行转义。
String message = 'I'm a string with single quotes.'; // 使用转义符\插入单引号
String quote = "He said, "Hello!""; // 使用转义符\插入双引号
print(message); // 输出:I'm a string with single quotes.
print(quote); // 输出:He said, "Hello!"
与Java和Kotlin相比:
- 在Java和Kotlin中,字符串的声明方式与Dart类似,可以使用单引号或双引号表示字符串,例如
String message = "Hello";。 - 字符串的拼接在Java和Kotlin中也可以使用
+运算符,例如String result = "Hello, " + name + "!";。 - Kotlin还提供了字符串模板的功能,可以更方便地嵌入表达式,例如
val message = "Hello, $name!";。
以上是关于Dart中字符串的基础知识和使用方法。字符串是处理文本数据的重要工具,在实际开发中经常用到。记住字符串是不可变的,因此每次修改字符串都会创建一个新的字符串对象。
6. 日期时间
6.1 是什么?
日期时间用于表示具体的日期和时间。在Dart中,可以使用DateTime类来处理日期时间。
6.2 怎么用?
在Dart中,可以使用DateTime类来表示日期和时间。你可以创建一个DateTime对象来表示特定的日期和时间,也可以获取当前日期时间。
// 创建特定的日期时间
DateTime birthday = DateTime(1990, 5, 20); // 年、月、日
DateTime currentTime = DateTime.now(); // 获取当前日期时间
6.3 使用时需要注意什么?
DateTime对象可以访问日期和时间的各个部分,如年、月、日、小时、分钟和秒。DateTime类提供了许多方法来处理日期和时间,例如计算两个日期之间的差异、格式化日期时间等。- 可以使用
intl包来进行更高级的日期时间处理。
下面是一些示例代码,展示了日期时间的基本用法:
DateTime now = DateTime.now(); // 获取当前日期时间
print(now); // 输出当前日期时间
int year = now.year; // 获取年份
int month = now.month; // 获取月份
int day = now.day; // 获取日期
int hour = now.hour; // 获取小时
int minute = now.minute; // 获取分钟
int second = now.second; // 获取秒钟
print('$year-$month-$day $hour:$minute:$second'); // 输出:2023-6-28 15:30:45
使用intl包可以进行更高级的日期时间处理,如格式化日期时间、本地化等。以下是一个示例:
import 'package:intl/intl.dart';
DateTime now = DateTime.now();
String formattedDate = DateFormat('yyyy-MM-dd').format(now); // 格式化日期
print(formattedDate); // 输出:2023-06-28
与Java和Kotlin相比:
- 在Java中,可以使用
java.util.Date和java.time包中的类来处理日期和时间。 - Kotlin使用Java的日期时间类,但还提供了许多扩展函数和操作符来简化日期时间的处理。
扯完了。