Dart速来系列1,基础:变量、常量、数值、布尔、字符串、日期时间

563 阅读3分钟

Emm,写个系列文章吧。

Dart速来系列。

嗯,名字,感觉 良好。

接下来,gogogogo。

旨在,让自己,让别人,快速冲鸭。 (忘性大,当个小手册吧)


Dart速来系列



如何跑起来Drat

嗯,自己搜索下。

几乎没有人因为喜欢Dart而学Dart,基本上都是为了Flutter,为了写那个该死的app,为了碎银几两。

所以,你想办法在Android studio 里面新建一个Flutter项目。

然后呢

image.png

在test里面新建一个test的dart文件

然后跟世界说个早。

写下几行该死的代码

你好


void main() {
  var number = 42; // 声明并且定义一个变量.
  printInteger(number); // 调用一个函数.

  sayHello("你好少年");
}

// 定义一个函数.
printInteger(int aNumber) {
  print('The number is $aNumber.'); // 将内容输出至控制台.
}

sayHello(String str){
  print("输出结果:"+str);
}

image.png

输出

The number is 42.
输出结果:你好少年

嗯忽略上面的巴拉巴拉说不停的代码。接下来,开始枯燥的¥……&……¥%……&&……%¥%……&

嗯,你是要学习的,人生很大时候都是枯燥且无聊的。


二、开始嘞少年

1. 变量

1.1 是什么?

变量是用来存储数据的容器。在Dart中,你可以声明不同类型的变量,包括数字、字符串、布尔值等。

1.2 怎么用?

在Dart中,可以使用关键字varfinaldynamic来声明变量。下面是一些示例:

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中,可以使用finalconst关键字声明常量。

2.2 怎么用?

final int x = 5; // 使用final声明一个整数类型的常量x
const double PI = 3.14; // 使用const声明一个浮点数类型的常量PI

2.3 使用时需要注意什么?

  • finalconst都可以用来声明常量,但在使用场景上有所不同。final常量的值可以在运行时计算,而const常量的值必须在编译时就确定下来。
  • finalconst关键字可以用于声明基本数据类型、字符串以及自定义类型的常量。

final的场景:

  1. 延迟初始化:当我们需要一个变量在声明后不久就初始化,但无法在声明时立即初始化时,可以使用final。它允许变量在第一次被读取时初始化。
  2. 对象引用:final变量可以被赋予一个对象,而该对象可以是可变的,但一旦赋值,该变量将永远指向同一个对象。这在保持对象引用不变的情况下允许对象本身的可变性。
  3. 在构造函数中的初始化:final变量可以在构造函数中初始化,并且一旦初始化后不能被更改。
  4. 循环中的临时变量:在循环中使用final声明的临时变量,因为它们只在循环内部存在,不需要保留它们的状态。

const的场景:

  1. 编译时常量:const关键字用于声明编译时常量。这意味着它们的值必须在编译时已知,不能依赖于运行时计算。
  2. 性能优化:使用const可以在编译时执行一些优化,例如在构建相同值的多个实例时,只创建一个实例并共享它。
  3. 不可变性:const对象是不可变的,这意味着它们的值在运行时不会改变。这种不可变性可以提高代码的安全性和可维护性。
  4. 构建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类似,分别为intInteger(Java)以及Int(Kotlin)。
  • 浮点数类型的声明方式在Java中为double,而在Kotlin中为Double

在Dart中,数值类型还支持常见的数学运算,如加减乘除、取模等。另外,Dart还提供了一些内置的数学函数和常量,如sin、cos、sqrt等,以及常量pi等。

4. 布尔

4.1 是什么?

布尔类型用于表示真或假的值。在Dart中,布尔类型的关键字为bool,只有两个可能的值:truefalse

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.Datejava.time包中的类来处理日期和时间。
  • Kotlin使用Java的日期时间类,但还提供了许多扩展函数和操作符来简化日期时间的处理。

扯完了。