美文网首页
Dart学习笔记1

Dart学习笔记1

作者: 春木橙云 | 来源:发表于2023-12-12 14:10 被阅读0次

    main函数(入口函数):

    在Dart项目中,Dart将执行一个名为main()的函数。这个函数是Dart应用程序的入口点,它是程序开始执行的地方。

    当你运行一个Dart项目时,Dart虚拟机会在项目中寻找一个名为main()的函数,并从该函数开始执行代码。这个函数可以在任何Dart文件中定义,只要它是项目的一部分,并且可以被Dart虚拟机找到。

    main()函数是一个特殊的函数,它没有任何参数,并且没有返回值。它的定义通常如下:

    void main() {
      // 代码逻辑
    }
    

    你可以在main()函数中编写你的应用程序的逻辑。当Dart虚拟机执行到main()函数时,它会按照你在函数体中编写的顺序逐行执行代码。你可以在main()函数中调用其他函数、创建对象、执行计算等等。

    需要注意的是,Dart项目可以包含多个Dart文件,但只有一个main()函数。这个函数的位置并不重要,只要它在项目中可以被找到即可。通常情况下,main()函数会被放在项目的根目录下的一个特定文件中,比如main.dart。

    总结起来,Dart会在项目中寻找一个名为main()的函数,并从该函数开始执行代码。这个函数是Dart应用程序的入口点,你可以在其中编写你的应用程序的逻辑。


    作用域:

    在Dart中,函数具有自己的作用域(scope)。作用域定义了变量和函数的可见性和可访问性。这意味着在不同的作用域中,你可以声明具有相同名称的变量和函数,而它们彼此之间不会产生冲突。以下是关于Dart函数作用域的详细介绍:

    1. 全局作用域:在Dart中,位于函数外部的变量和函数具有全局作用域。这意味着它们可以在整个Dart文件中访问和使用。在一个Dart项目中,每个Dart文件都有自己的作用域,文件中的全局变量和函数在该文件中都是可见的。
    // 全局作用域
    int globalVariable = 10;
    
    void globalFunction() {
      print('This is a global function');
    }
    
    void main() {
      // 可以在main函数中访问全局变量和函数
      print(globalVariable);
      globalFunction();
    }
    

    在上面的例子中,globalVariable是一个全局变量,globalFunction是一个全局函数。它们可以在main函数中直接访问和使用。

    1. 函数作用域:在Dart中,函数可以嵌套在其他函数内部,这样就形成了函数作用域。在函数作用域中声明的变量和函数只在该函数内部可见和可访问。
    void outerFunction() {
      // 函数作用域
      int outerVariable = 20;
    
      void innerFunction() {
        // 可以在innerFunction中访问outerVariable,但无法在outerFunction之外访问
        print(outerVariable);
      }
    
      innerFunction();
    }
    
    void main() {
      outerFunction();
    }
    

    在上面的例子中,outerVariable是在outerFunction函数内部声明的变量,innerFunction是在outerFunction函数内部声明的函数。innerFunction可以访问outerVariable,但无法在outerFunction之外访问。

    1. 块级作用域:在Dart 2.7及更高版本中,引入了块级作用域。块级作用域是由一对花括号{}括起来的代码块,例如if语句、for循环等。在块级作用域中声明的变量和函数只在该代码块内可见和可访问。
    void main() {
      // 块级作用域
      {
        int blockVariable = 30;
        print(blockVariable);
      }
    
      // 无法在这里访问blockVariable
    }
    

    在上面的例子中,blockVariable是在代码块内部声明的变量,只在该代码块内可见。在代码块之外无法访问该变量。

    需要注意的是,内部作用域可以访问外部作用域的变量和函数,但外部作用域无法访问内部作用域的变量和函数。这种访问规则称为词法作用域(lexical scoping)或静态作用域(static scoping)。

    作用域是一个重要的概念,它帮助我们在编写代码时避免命名冲突,并提供了代码的封装和隔离。理解Dart函数作用域的概念对于编写清晰、可维护的代码非常重要。


    Dart(fluter)、RN的对比,分别陈述一下优劣:

    Dart 和 Flutter 是 Google 开发的移动应用开发框架,而 React Native(RN)是 Facebook 开发的移动应用开发框架。下面是它们的优劣势的简要陈述:

    Dart 和 Flutter 的优势:

    • 性能优秀:Dart 是一种高性能的静态类型语言,而 Flutter 使用 Dart 编写,通过自己的渲染引擎绘制用户界面,可以实现快速且流畅的应用程序。

    • 跨平台开发:Flutter 具有真正的跨平台能力,可以在 iOS、Android、Web 和桌面等多个平台上构建一致的用户界面和功能。这意味着你可以使用相同的代码库构建多个平台的应用程序,减少了开发和维护的工作量。

    • 热重载:Flutter 支持热重载,可以在应用程序运行时实时查看代码更改的效果,加快了开发迭代的速度。

    • 丰富的 UI 组件库:Flutter 提供了丰富的内置 UI 组件库,使开发者可以快速构建漂亮的用户界面。

    • 强大的开发工具:Flutter 提供了一套完整的开发工具套件,包括调试器、性能分析器和代码编辑器插件,为开发者提供了便捷的开发环境。

    React Native 的优势:

    • 大量的开发者社区:React Native 拥有庞大的开发者社区,有许多活跃的开发者贡献了各种开源组件和库,可以快速构建复杂的功能和界面。

    • 成熟的生态系统:React Native 构建在 React.js 的基础上,继承了 React.js 的优势,拥有成熟的生态系统和丰富的第三方库支持。

    • 原生集成能力:React Native 允许开发者通过原生代码扩展应用程序的功能,可以直接调用原生 API,实现更高级的功能。

    • 热模块重载:React Native 支持热模块重载,可以在运行时动态加载和替换 JavaScript 模块,加快开发迭代的速度。

    • 适合混合开发:React Native 可以与现有的原生应用程序集成,适合在现有应用程序中逐步引入 React Native 开发新功能或界面。

    无论是 Flutter 还是 React Native,它们都有自己的优势和适用场景。选择适合你项目需求和团队技能的框架是关键。如果你注重性能和跨平台一致性,且愿意学习 Dart 语言,那么 Flutter 是一个不错的选择。如果你已经熟悉 React.js 或已经有现有的 React Native 项目,那么 React Native 可能更适合你。最终的选择应该基于你的具体需求、团队技能和项目规模来决定。


    学习fluter需要学习dart吗?

    是的,学习 Flutter 需要学习 Dart。Dart 是 Flutter 的编程语言,Flutter 应用程序的主要逻辑和用户界面都是用 Dart 编写的。

    学习 Dart 语言对于开发 Flutter 应用程序非常重要,因为它是与 Flutter 框架紧密集成的。以下是一些原因说明为什么需要学习 Dart:

    1. 语法和特性:Dart 有自己的语法和特性,包括强类型系统、异步编程支持、类和对象等。了解这些语法和特性可以帮助你编写可靠和高效的 Dart 代码。

    2. Flutter API:Flutter 提供了一套丰富的 API 和库,用于构建用户界面和处理应用程序逻辑。这些 API 和库是用 Dart 编写的,因此了解 Dart 可以更好地理解和使用 Flutter 提供的功能。

    3. 开发工具和调试:Dart 提供了一套完整的开发工具,包括调试器、性能分析器和代码编辑器插件。学习 Dart 可以帮助你更好地使用这些工具来开发和调试 Flutter 应用程序。

    4. 社区支持:Dart 有一个活跃的开发者社区,提供了大量的学习资源、教程和文档。通过学习 Dart,你可以更好地参与社区,并从中获得支持和帮助。

    尽管你可能已经有其他编程语言的经验,学习 Dart 并不会太困难,因为它的语法和概念与其他常见的编程语言相似。掌握 Dart 后,你将能够更好地理解和利用 Flutter 框架的功能,从而更高效地开发移动应用程序。


    dart如何入门

    要入门 Dart,你可以按照以下步骤进行:

    1. 安装 Dart SDK:首先,你需要安装 Dart SDK(Software Development Kit)。Dart SDK 包含了 Dart 编译器和相关的工具。你可以从 Dart 官方网站(https://dart.dev/get-dart)下载适合你操作系统的安装程序,并按照指示进行安装。

    2. 选择开发工具:选择一个适合你的开发工具来编写和运行 Dart 代码。Dart 推荐使用 Visual Studio Code(VS Code)作为主要的开发工具,它具有丰富的 Dart 插件和扩展。你也可以选择其他编辑器,如 IntelliJ IDEA 或 Android Studio,它们都提供了对 Dart 的支持。

    3. 学习 Dart 语法:学习 Dart 的语法和基本概念是入门的关键。你可以从 Dart 官方网站的教程(https://dart.dev/guides/language/language-tour)开始学习 Dart 的基础知识。这个教程会带你了解 Dart 的基本语法、变量、函数、类和异常处理等内容。

    4. 练习编写代码:通过练习编写一些简单的 Dart 代码来加深你对语言的理解。可以从编写一些基本的控制流程(如条件语句和循环)、函数和类开始。在编写代码的过程中,尝试使用 Dart 提供的各种语法特性和库函数。

    5. 阅读文档和示例:D


    dart的开发流程是什么样的,如何调试?

    Dart 的开发流程通常包括以下步骤,并提供了一些调试工具来帮助你调试代码:

    1. 创建 Dart 项目:首先,你可以使用 Dart 提供的命令行工具或开发工具创建一个新的 Dart 项目。这将创建一个基本的项目结构,包含一个入口文件和其他相关文件。

    2. 编写 Dart 代码:在项目中,你可以使用你选择的开发工具编写 Dart 代码。Dart 代码可以包括函数、类、变量等。你可以根据项目的需求编写你的代码逻辑和功能。

    3. 运行 Dart 代码:你可以使用命令行工具或开发工具来运行 Dart 代码。通过命令行工具,你可以使用 dart 命令运行 Dart 脚本文件。通过开发工具,你可以直接运行 Dart 代码或调试 Dart 代码。

    4. 调试 Dart 代码:Dart 提供了一套调试工具,用于帮助你调试代码并找出问题。以下是一些常用的调试工具:

      • 打印调试信息:你可以在代码中使用 print() 函数输出调试信息。这对于简单的调试场景很有用,可以帮助你查看变量的值和代码的执行流程。

      • 断点调试:你可以在开发工具中设置断点,以在特定位置暂停代码的执行。当代码执行到断点时,你可以查看变量的值、执行步骤和调用堆栈等信息,以帮助你找出问题所在。

      • 调试器:开发工具通常提供了内置的调试器,可以让你逐步执行代码并查看变量的值。你可以单步执行代码、在断点之间切换,并观察代码的执行过程。

      • 性能分析器:Dart 提供了性能分析器,用于帮助你分析代码的性能问题。性能分析器可以帮助你找出代码中的性能瓶颈,并提供优化建议。

    5. 修复问题和优化代码:通过调试工具,你可以找到代码中的问题和错误。一旦找到问题,你可以进行修复并优化代码。重复这个过程,直到你的代码运行正常并达到预期的性能。

    Dart 的调试工具和流程可以根据你选择的开发工具而有所不同。不同的开发工具可能提供不同的调试功能和界面。你可以根据自己的喜好和需求选择合适的开发工具,并充分利用调试工具来提高代码的质量和效率。


    变量定义中final和const区别和相同点

    在 Dart 中,finalconst 都用于声明常量,但它们有一些相同点和不同点。

    相同点:

    1. 不可变性:无论是 final 还是 const,声明的变量都是不可变的,一旦赋值后就不能再修改。

    2. 常量表达式finalconst 只能用于初始化常量表达式。这意味着它们的值必须在编译时就可以确定,而不能依赖于运行时的计算。

    不同点:

    1. 赋值时机final 可以在运行时赋值,而 const 必须在编译时就确定其值。这意味着 final 可以根据条件或函数的返回值进行赋值,而 const 的值必须是在编译时就已知的。

    2. 内存分配final 变量在第一次使用时被初始化,而 const 变量在编译时就被分配内存。这意味着 const 变量的值在整个程序执行期间都是不变的,而 final 变量的值可以在运行时被初始化或修改。

    3. 作用域final 可以在任何地方声明并使用,包括顶层、类成员和局部作用域。而 const 只能在类成员和局部作用域中声明和使用。

    4. 数据类型final 可以存储任何数据类型的值,包括基本类型和对象。而 const 只能存储编译时常量的值,如数字、字符串、布尔值和其他 const 对象。

    总结来说,finalconst 都用于声明常量,但它们在赋值时机、内存分配、作用域和数据类型上有一些不同。final 可以在运行时赋值和修改,而 const 必须在编译时确定其值,并且在整个程序执行期间保持不变。了解这些区别可以帮助你选择适合你需求的常量声明方式。


    什么值回返回false,什么值返回true

    在 Dart 语言中:

    1. 返回 false 的值:布尔值 false 自身,不进行任何非空检查的 null 值,以及数字 0。

    2. 返回 true 的值:除 false、null、0 以外的所有其他值,包括布尔值 true、所有非零数字、所有非 null 对象(包括空数组[] 和空 map{})等。

    需要注意的是,Dart 中没有类似 JavaScript 中的 "falsy" 和 "truthy" 概念,0 和空字符串在 Dart 中并不等同于 false。例如:

    var name = '';
    print(name ?? 'Guest');  // prints ''
    print(name.isEmpty);  // prints true
    

    在上述示例中,“”虽然为空字符串,但其并不等价于 false,而是可以作为字符类型的一个有效值。其真假判断需要使用 .isEmpty.isNotEmpty 来进行。


    相关文章

      网友评论

          本文标题:Dart学习笔记1

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