Dart 是一种用于开发Android、IOS、 Web和桌面应用的开源编程语言。
它是由Google开发的。
Dart 语法类似于 C、javascript 和 java 语言。
该教程假设您有一定的编程基础,在此编程基础上您可以很快的掌握Dart语言。
在开始本教程之前,我们假设您已经安装了 Dart SDK(如果您没有安装 Dart SDK,请在开始之前安装它)以及必须在您的计算机上设置本地编程环境。
链接:https://dart.cn/get-dart
Dart关键字共有60多个,在我的另一篇博客做了非常详细的介绍。了解一门语言的关键字,可以快速掌握该语言的语法,非常非常重要关键。
链接:https://blog.csdn.net/weixin_44758662/article/details/124937490
var name = 'Bob';
指定类型:
String name = 'Bob';
如果更改一个变量,可以使用关键字 final 或者 const 修饰变量,这两个关键字可以替代 var 关键字或者加在一个具体的类型前。一个 final 变量只可以被赋值一次;一个 const 变量是一个编译时常量(const 变量同时也是 final 的)。顶层的 final 变量或者类的 final 变量在其第一次使用的时候被初始化。
final String name = 'Bobby';
Types | KeyWork | Description |
---|---|---|
数字 | int, double, num | Dart 中的数字用于表示数字文字 |
字符串 | String | 字符串表示一个字符序列 |
布尔值 | bool | 它表示布尔值 true 和 false |
列表 | List | 它是一组有序的对象 |
Map | Map | 它将一组值表示为键值对 |
数字是用来保存数值的数据类型
int
数据类型用于表示整数。
double
数据类型用于表示 64 位浮点数。
num
类型是 int 或 double 类型。
void main() {
int a = 2;
double b = 1.5;
}
用来表示一个字符序列。它是一个 UTF-16 代码单元序列。关键字 String
用于表示字符串文字。字符串值嵌入在单引号或双引号中。
void main() {
String str1= 'good';
String str2= "good";
}
表示布尔值真假,用关键字 bool
表示。
void main() {
String str = 'Coding is ';
String str1 = 'Fun';
bool val = (str==str1);
print (val);
}
列表数据类型类似于其他编程语言中的数组。列表用于表示对象的集合。它是一组有序的对象。 用List
表示。
void main()
{
List list= [];
list[0] = 'Good';
list[1] = 'CSDN';
}
Map
对象是一个键值对。地图上的键和值可以是任何类型。它是一个动态集合。
void main() {
Map map = new Map();
map['First'] = 'First';
map['Second'] = 'Second';
map['Third'] = 'Third';
print(map);
}
注意: 如果未指定变量的类型,则变量的类型为dynamic。动态关键字显式用作类型注释。
运算符是用于对操作数执行某些操作的特殊符号。Dart 有许多内置运算符,可用于执行不同的功能,例如,‘+’ 用于添加两个操作数。运算符旨在对一个或两个操作数进行操作。
以下是 Dart 中的各种类型的运算符:
算术运算符
关系运算符
类型测试运算符
赋值运算符
逻辑运算符
条件运算符
级联符号运算符
此类运算符包含用于对操作数执行算术运算的运算符。它们是二元运算符,即它们作用于两个操作数。
符号 | 作用 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
~/ | 除然后去掉小数点 |
% | 取余 |
void main()
{
int a = 2;
int b = 3;
var c = a + b;
var d = a - b;
}
此类运算符包含用于对操作数执行关系运算的运算符。并将结果作为布尔表达式给出。
符号 | 作用 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
== | 等于 |
!= | 不等于 |
void main()
{
int a = 2;
int b = 3;
bool c = a > b;
bool d = a < b;
}
符号 | 作用 |
---|---|
is | 如果对象具有特定类型,则将布尔值 true 作为输出 |
is! | 如果对象具有特定类型,则将布尔值 false 作为输出 |
as | 类型转换 |
void main()
{
String a = 'Good';
double b = 3.3;
print(a is String);
print(b is !int);
}
符号 | 作用 |
---|---|
= | 用于为表达式或变量赋值 |
??= | 仅当它为空时才分配该值 |
void main()
{
int a = 5;
int b = 7;
var c = a * b;
print(c);
var d;
d ? ? = a + b;
print(d);
d ? ? = a - b;
}
输出
35
12
12
此类运算符包含用于在逻辑上组合两个或多个条件的运算符
符号 | 作用 |
---|---|
&& | 如果两者都为真,则返回真 |
|| | 如果其中一个条件为真,则返回真 |
! | 反转结果 |
void main()
{
int a = 5;
int b = 7;
bool c = a > 10 && b < 10;
print(c);
bool d = a > 10 || b < 10;
print(d);
bool e = !(a > 10);
print(e);
}
符号 | 作用 |
---|---|
bool? a:b | 如果条件为真,则执行 a,否则执行 b |
a??b | 如果a不为 null,则返回其值,否则返回b值。 |
void main()
{
int a = 5;
int b = 7;
var c = (a < 10) ? "Statement is Correct, Geek" : "Statement is Wrong, Geek";
print(c);
int n;
var d = n ? ? "n has Null value";
print(d);
n = 10;
d = n ? ? "n has Null value";
print(d);
}
输出
Statement is Correct, Geek
n has Null value
10
此类运算符允许您对同一元素执行一系列操作。它允许您对同一个对象执行多个方法。
符号 | 作用 |
---|---|
… | 它用于对同一个对象执行多个方法 |
void main()
{
User user = new User();
user..setName("userName")
..setAge(15);
}
if | |
if else | |
if else if else | |
switch case |
for | |
while | |
do while |
中断循环
break | |
continue |
函数让您可以包装一组语句,这意味着执行任何特定任务并为其命名,以便以后可以从程序中的任何位置调用它。函数可以很容易地将整个程序划分为执行该程序特定任务的子单元,这样它就增强了模块化方法并增加了程序的代码可重用性。我们在函数调用中传递信息作为其参数,该函数可以将某个值返回到它调用的位置,也可以不返回任何值。
格式:
returnType funcName (parameter)
{
return value;
}
例子:
int add(int n1, int n2){
int result;
result = n1+n2;
return result;
}
在 Dart 中,我们可以将任何参数设置为可选;即使未提供这些参数的值,它也允许调用/执行带有可选参数(如果有)的函数。可以通过附加问号及其名称来将参数设置为可选。
1.可选位置参数
可选的位置参数可以通过用逗号分隔并包含在方括号 ([]) 中的单个参数来指定。调用定义了可选位置参数的函数可以指定可变数量的参数。
void functionName(param1, [param2, param3]) { }
void main() {
testParam(12);
testParam(123,21);
}
testParam(p1,[o1]) {
print("Param Value Is : ${p1} and Option Param Valus Is : ${o1}");
}
2.可选命名参数
命名的位置参数可以通过用逗号分隔并包含在大括号 ({ }) 中的单个参数名称来指定。
void functionName(param1, {param2, param3}) {}
void main() {
testParam(12);
testParam(123,np1:10);
testParam(123,np2:20);
testParam(123,np1:10,np2:20);
}
testParam(p1,{np1, np2}) {
print("Param Value Is : ${p1}");
print("Named Param 1 Valus Is : ${np1}");
print("Named Param 1 Valus Is : ${np2}");
}
functionName(param1,param2= default_value) {}
class Point {
double? x; // Declare instance variable x, initially null.
double? y; // Declare y, initially null.
}
void main() {
var point = Point();
point.x = 4; // Use the setter method for x.
assert(point.x == 4); // Use the getter method for x.
assert(point.y == null); // Values default to null.
}
声明一个与类名一样的函数即是一个构造函数
Point(this.x, this.y);
声明式构造函数
可以为一个类声明多个命名式构造函数来表达更明确的意图
Point.origin()
: x = xOrigin,
y = yOrigin;
枚举类型是一种特殊的类型,也称为 enumerations 或 enums,用于定义一些固定数量的常量值。
enum Color { red, green, blue }
使用
Color.red
Dart 代码可以抛出和捕获异常。异常表示一些未知的错误情况,如果异常没有捕获则会被抛出从而导致抛出异常的代码终止执行。
与 Java 不同的是,Dart 的所有异常都是非必检异常,方法不必声明会抛出哪些异常,并且你也不必捕获任何异常。
try {
breedMoreLlamas();
} on OutOfLlamasException {
buyMoreLlamas();
} on Exception catch (e) {
print('Unknown exception: $e');
} catch (e) {
print('Something really unknown: $e');
} finally {
cleanLlamaStalls();
}
如上述代码所示可以使用 on 或 catch 来捕获异常,使用 on 来指定异常类型,使用 catch 来捕获异常对象,两者可同时使用。
无论是否抛出异常,finally 语句始终执行,如果没有指定 catch 语句来捕获异常,则异常会在执行完 finally 语句后抛出
使用关键字 abstract 标识类可以让该类成为 抽象类,抽象类将无法被实例化。抽象类常用于声明接口方法、有时也会有具体的方法实现。如果想让抽象类同时可被实例化,可以为其定义 工厂构造函数。
抽象类常常会包含 抽象方法。下面是一个声明具有抽象方法的抽象类示例:
abstract class AbstractContainer {
void updateChildren(); // Abstract method.
}
每一个类都隐式地定义了一个接口并实现了该接口,这个接口包含所有这个类的实例成员以及这个类所实现的其它接口。如果想要创建一个 A 类支持调用 B 类的 API 且不想继承 B 类,则可以实现 B 类的接口。
一个类可以通过关键字 implements 来实现一个或多个接口并实现每个接口定义的 API:
class Person {
final String _name;
Person(this._name);
String greet(String who) => 'Hello, $who. I am $_name.';
}
class Impostor implements Person {
String get _name => '';
String greet(String who) => 'Hi $who. Do you know who I am?';
}
String greetBob(Person person) => person.greet('Bob');
void main() {
print(greetBob(Person('Kathy')));
print(greetBob(Impostor()));
}
如果需要实现多个类接口,可以使用逗号分割每个接口类:
class Point implements Comparable, Location {...}
使用 extends 关键字来创建一个子类,并可使用 super 关键字引用一个父类:
class Television {
void turnOn() {
_illuminateDisplay();
_activateIrSensor();
}
}
class SmartTelevision extends Television {
void turnOn() {
super.turnOn();
_bootNetworkInterface();
_initializeMemory();
_upgradeApps();
}
}