Dart学习笔记2-数据结构

2023-12-12  本文已影响0人  春木橙云

数据类型:

Dart中有以下常见的数据类型:

  1. 数字类型(Number Types):

    • int:表示整数值,例如1、2、-3等。
    • double:表示浮点数值,例如3.14、-0.5等。
  2. 字符串类型(String Type):

    • String:表示一串字符,例如"Hello"、"Dart"等。
  3. 布尔类型(Boolean Type):

    • bool:表示逻辑值,只有两个可能的取值:true和false。
  4. 列表类型(List Type):

    • List:表示有序的对象集合,可以包含任意类型的元素。列表使用方括号[]表示,并使用逗号分隔元素。
List<int> numbers = [1, 2, 3, 4, 5];
List<String> names = ['Alice', 'Bob', 'Charlie'];
  1. 映射类型(Map Type):
    • Map:表示键值对的集合,其中每个键都是唯一的。映射使用花括号{}表示,键值对使用冒号:分隔。
Map<String, int> ages = {'Alice': 25, 'Bob': 30, 'Charlie': 35};
  1. 集合类型(Set Type):
    • Set:表示无序的唯一对象的集合。集合使用花括号{}表示,并使用逗号分隔元素。
Set<int> numbers = {1, 2, 3, 4, 5};
  1. 符号类型(Symbol Type):

    • Symbol:表示Dart程序中声明的符号。符号类型通常用于反射和元编程。
  2. 动态类型(Dynamic Type):

    • dynamic:表示任意类型的值。使用dynamic类型可以在运行时动态确定变量的类型。
dynamic value = 10;
value = 'Hello';

除了上述常见的数据类型,Dart还提供了一些其他类型,如枚举类型(enum)、函数类型(Function Type)、类类型(Class Type)等。这些类型在特定的场景下使用,可以提供更多的灵活性和功能。

需要注意的是,Dart是一种强类型语言,每个变量都有一个明确的类型。类型可以在声明变量时显式指定,也可以由Dart的类型推断机制自动推断出来。


函数相关:

在Dart中,函数是一段可重用的代码块,它执行特定的任务并可以接受参数和返回值。函数是Dart编程语言中的基本构建块之一,可以帮助你组织和模块化代码。

以下是关于Dart函数的详细介绍:

  1. 函数声明和定义:要声明和定义一个函数,你需要指定函数的名称、参数列表和返回类型(如果有)。函数的定义包括函数体,其中包含了实际的代码逻辑。以下是一个简单的函数定义示例:
int sum(int a, int b) {
  return a + b;
}

在上面的例子中,函数名是sum,它接受两个整数类型的参数a和b,并返回一个整数类型的值。函数体中的代码逻辑是将a和b相加并返回结果。

  1. 参数传递:Dart函数可以接受零个或多个参数。参数可以是必需的(required)或可选的(optional)。必需参数在调用函数时必须提供,而可选参数可以省略。Dart中有两种类型的可选参数:命名参数和位置参数。
void greet({String name, String message}) {
  print('$name says: $message');
}

在上面的例子中,greet函数接受两个命名参数name和message。调用该函数时,你可以通过参数名称来传递值,例如:

greet(name: 'Alice', message: 'Hello');
void greet(String name, String message) {
  print('$name says: $message');
}

在上面的例子中,greet函数接受两个位置参数name和message。调用该函数时,你需要按照参数的位置来传递值,例如:

greet('Alice', 'Hello');
  1. 返回值:函数可以返回一个值,也可以不返回任何值。如果函数没有指定返回类型或者返回类型为void,则表示该函数不返回任何值。如果函数需要返回一个值,你需要在函数声明中指定返回类型,并使用return语句返回值。以下是一个返回值的函数示例:
int sum(int a, int b) {
  return a + b;
}

在上面的例子中,sum函数返回两个整数a和b的和。

  1. 匿名函数:Dart还支持匿名函数,也称为lambda函数或闭包。匿名函数没有名称,可以直接赋值给变量或作为参数传递给其他函数。以下是一个匿名函数的示例:
var multiply = (int a, int b) {
  return a * b;
};

在上面的例子中,multiply是一个变量,它的值是一个匿名函数。该函数接受两个整数a和b,并返回它们的乘积。

函数是Dart编程中非常重要的概念,它们可以帮助你将代码模块化、提高代码的可读性和可维护性。通过合理使用函数,你可以将复杂的问题分解为更小的部分,并通过函数的组合和调用来解决问题。


Class与其关键字:

在Dart中,类方法(class methods)和类变量(class variables)可以使用关键字"static"进行声明。使用"static"关键字声明的方法和变量属于类本身,而不是类的实例。这意味着可以直接通过类名来访问和使用这些方法和变量,而无需创建类的实例。

以下是对"static"关键字的详细解释:

  1. 静态方法(Static Methods):使用"static"关键字声明的方法称为静态方法。静态方法属于类本身,而不是类的实例。可以通过类名直接调用静态方法,而无需创建类的实例。静态方法通常用于实现与类相关的实用函数或工具函数,这些函数不需要访问类的实例变量。
class MyClass {
  static void staticMethod() {
    print('This is a static method');
  }
}

void main() {
  MyClass.staticMethod(); // 直接通过类名调用静态方法
}

在上面的例子中,MyClass类中的staticMethod()是一个静态方法。通过类名MyClass直接调用了staticMethod()。

  1. 静态变量(Static Variables):使用"static"关键字声明的变量称为静态变量。静态变量属于类本身,而不是类的实例。可以通过类名直接访问和使用静态变量,而无需创建类的实例。静态变量在整个类中是共享的,所有实例都共享相同的静态变量。
class MyClass {
  static int staticVariable = 10;
}

void main() {
  print(MyClass.staticVariable); // 直接通过类名访问静态变量
}

在上面的例子中,MyClass类中的staticVariable是一个静态变量。通过类名MyClass直接访问了staticVariable。

使用静态方法和静态变量可以提供一些特定的功能和行为,例如实现工具函数、记录全局状态等。它们不依赖于类的实例,因此可以在不创建类的实例的情况下直接使用。需要注意的是,静态方法只能访问静态变量,而不能访问非静态(实例)变量。

总结:通过使用"static"关键字,可以在Dart中声明类的静态方法和静态变量。静态方法和静态变量属于类本身,可以直接通过类名来访问和使用,而无需创建类的实例。


List

首先,我们知道列表(List)在 Dart 语言中十分重要。然而,在 Dart 语言中,List 存在一些特定的约束。比如在函数或者方法体之外,我们不能随意地定义或者改变 List。更明确的说,在类的外部作用域或者类外部,List 必须是常量。

举个例子,字符串和数字是默认常量,所以,当我们想在以上提到的这些地方定义字符串和数字时,它们自动就成为常量,不需要进行其他多余的声明。然而,对于数组(Arrays)和映射(Maps),情况就不同了。他们默认都是非常量。但是,我们可以通过声明它们为“const”来使得它们成为常量。这和 JavaScript 里的 Object.freeze() 方法有点类似。在 Javascript 中,当我们对一个对象使用 Object.freeze() 方法时,该对象就变成了一个不可改变,即常量的对象。

举个 Dart 的例子来说明这个特点: 我们不能这样写:

List<int> myList = [1,2,3,4];

应该这样写:

const List<int> myList = [1,2,3,4];

这样 myList 就成为一个常量列表,不能再对它进行修改操作了。而在 JavaScript 中的等价操作为 Object.freeze()


num\int\double

int和double是num的子集。

example11() {
  var i = 1 + 320, d = 3.2 + 0.01;
  num myNumDouble = 2.2;
  num myNumInt = 2;
  int myInt = 1;
  double myDouble = 0; // Dart will add decimal prefix, becomes 0.0;
  myNumDouble = myInt; // valid
  myNumDouble = myDouble; //valid
  myNumDouble = myNumInt; //valid

  myNumInt = myInt; // valid
  myNumInt = myDouble; // valid
  myNumInt = myNumDouble; // valid

  myInt = myNumDouble; //Error
  myInt = myDouble; //Error
  myInt = myNumInt; //valid

  myDouble = myInt; //error
  myDouble = myNumInt; //valid
  myDouble = myNumDouble; //valid

  print("Example11 int ${i}");
  print("Example11 double ${d}");

}
上一篇下一篇

猜你喜欢

热点阅读