Flutter入门第一节(共56)

Dart语言基础

一、类型变量

  • 在Dart中,所有类型都是对象类型,都继承自顶层类型Object,因此一切变量都是对象,数字、布尔值、函数和null也概莫能外;
  • 未初始化变量的值都是null;
  • 为变量指定类型,这样编辑器和编译器都能更好地理解你的意图。

二、函数

Dart认为重载会导致混乱,因此从设计之初就不支持重载,而是提供了可选命名参数和可选参数

具体方式是,在声明函数时:

  • 给参数增加{},以paramName: value的方式指定调用参数,也就是可选命名参数;
  • 给参数增加[],则意味着这些参数是可以忽略的,也就是可选参数。

三、类

Dart中并没有public、protected、private这些关键字,我们只要在声明变量与方法时,在前面加上""即可作为private方法使用。如果不加"",则默认为public。不过,"_"的限制范围并不是类访问级别的,而是库访问级别

四、复用

在面向对象的编程语言中,将其他类的变量与方法纳入本类中进行复用的方式一般有两种:继承父类和接口实现。当然,在Dart也不例外。

在Dart中,你可以对同一个父类进行继承或接口实现:

  • 继承父类意味着,子类由父类派生,会自动获取父类的成员变量和方法实现,子类可以根据需要覆写构造函数及父类方法;
  • 接口实现则意味着,子类获取到的仅仅是接口的成员变量符号和方法符号,需要重新实现成员变量,以及方法的声明和初始化,否则编译器会报错。

除了继承和接口实现之外,Dart还提供了另一种机制来实现类的复用,即"混入"(Mixin)。混入鼓励代码重用,可以被视为具有实现方法的接口。这样一来,不仅可以解决Dart缺少对多重继承的支持问题,还能够避免由于多重继承可能导致的歧义(菱形问题)。

备注:继承歧义,也叫菱形问题,是支持多继承的编程语言中一个相当棘手的问题。当B类和C类继承自A类,而D类继承自B类和C类时会产生歧义。如果A中有一个方法在B和C中已经覆写,而D没有覆写它,那么D继承的方法的版本是B类,还是C类的呢?

要使用混入,只需要with关键字即可。

五、运算符

Dart和绝大部分编程语言的运算符一样,所以你可以用熟悉的方式去执行程序代码运算。不过,Dart多了几个额外的运算符,用于简化处理变量实例缺失(即null)的情况

  • **?.**运算符:假设Point类有printInfo()方法,p是Point的一个可能为null的实例。那么,p调用成员方法的安全代码,可以简化为p?.printInfo() ,表示p为null的时候跳过,避免抛出异常。
  • ??= 运算符:如果a为null,则给a赋值value,否则跳过。这种用默认值兜底的赋值语句在Dart中我们可以用a ??= value表示。
  • **??**运算符:如果a不为null,返回a的值,否则返回b。在Java或者C++中,我们需要通过三元表达式(a != null)? a : b来实现这种情况。而在Dart中,这类代码可以简化为a ?? b

在Dart中,一切都是对象,就连运算符也是对象成员函数的一部分。

相关推荐
好奇龙猫2 小时前
日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(19):阶段练习
学习
松涛和鸣3 小时前
11.C 语言学习:递归、宏定义、预处理、汉诺塔、Fibonacci 等
linux·c语言·开发语言·学习·算法·排序算法
Q***f6357 小时前
后端消息队列学习资源,RabbitMQ+Kafka
学习·kafka·rabbitmq
循环过三天8 小时前
7.7、Python-常用内置函数
笔记·python·学习
烤麻辣烫8 小时前
23种设计模式(新手)-5里氏替换原则
java·学习·设计模式·intellij-idea·里氏替换原则
AA陈超10 小时前
ASC学习笔记0007:用于与GameplayAbilities系统交互的核心ActorComponent
c++·笔记·学习·ue5·虚幻引擎
老蒋新思维12 小时前
紧跟郑滢轩,以 “学习力 +” 驱动 AI 与 IP 商业变革
网络·人工智能·学习·tcp/ip·企业管理·创始人ip·创客匠人
做cv的小昊13 小时前
科研论文PPT绘图技巧:绘制任意曲线三角形(胖三角形)并制作效果对比图
经验分享·笔记·学习·微软·ai绘画·数据可视化
小呀小萝卜儿13 小时前
2025-11-14 学习记录--Python-使用sklearn+检测 .csv 文件的编码+读取 .csv 文件
python·学习