美文网首页
Dart学习笔记2-数据结构

Dart学习笔记2-数据结构

作者: 春木橙云 | 来源:发表于2023-12-12 14:11 被阅读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}");
    
    }
    

    相关文章

      网友评论

          本文标题:Dart学习笔记2-数据结构

          本文链接:https://www.haomeiwen.com/subject/cnuvgdtx.html