Dart学习笔记1

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 来进行。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 变量 创建变量并初始化变量:var name = 'Bob' ; 如果对象不限于单一类型:dynamic name...
    _白羊阅读 230评论 0 0
  • 1、前言: 最近在学习Flutter,作为Flutter的编程语言,Dart语言语法的学习自然就编程重中之重。本文...
    Yagami3zZ阅读 1,475评论 0 0
  • Variables(变量) 下面是声明变量并赋值的示例: 变量是一个引用。上面名字为 name 的变量引用了 一个...
    Love零O阅读 308评论 0 1
  • Dart是一种面向对象语言,函数也是对象,类型是Function。这也就意味着函数可以作为变量定义或者作为其他函数...
    zombie阅读 250评论 0 3
  • 安装 如果是windows系统,点击安装SDK:http://www.gekorm.com/dart-window...
    空山雪林阅读 360评论 0 0