Dart 语言基础

291 阅读3分钟

阅读对象

完全的新手

总览

环境

Mac OS

  • 安装环境
$ brew tap dart-lang/dart
$ brew install dart
  • Hello world

通过文件编辑器创建 hello.dart 文件,内容如下:

//hello.dart
main() {
  print("Hello, dart");
}

Dart 在内部有一个 main() 函数作为程序的入口,每一个 dart 的程序都必须有一个 main() 函数作为程序的入口。

  • 运行
$ dart hello.dart
Hello, dart

语法

标识符

标识符是指在编程中用来表示变量名字,函数名字,类名字的一些符号,比如上面看到的 print、main、以及下面看到的 TestClass、show等。 标识符包含了字符和数字,它的规则有:

  • 不能包含特殊字符,除了 _ 和 $;
  • 不能是关键字,关键字在下面会列出来;
  • 必须唯一
  • 大小写敏感
  • 不能包含空格
  • 不能以数字开头
合法标识符 非法标识符
myName my Name
my_name my-Name
$myName ^myName
my2Name 2myName

Dart 中的关键字

  • 关键字
  • 空格和换行 Dart 会忽略程序中出现的空格和换行符。所以,可以任意的使用这些符号,以此来增加代码的阅读性。
  • 大小写敏感 在 Dart 的世界里, Dog 和 dog 是不同的
  • 分号结尾 每条语句必须使用分好结尾,一行可以有多条语句,但是也必须使用 ";" 结尾

注释

注释可以提高代码的可阅读性.注释包括了作者,函数功能以及结构的说明信息。注释会被编译器忽略。 Dart 支持两种注释:

  • 单行 "//"
  • 多行 "/* */"

例子:

// 单行注释

/*
  多行注释
*/

面向对象

Dart 是一门面向对象的语言。在面向对象的世界里,将程序中所有的集合称之为对象,对象与对象通过方法进行沟通。

  • 对象 代表现实世界中的实体,每个对象应该有三个属性:
    • 状态,一个对象属性的集合;
    • 行为, 描述了对象的表象;
    • 标识,对象的唯一标识
  • 类,类的集合,或者类的蓝图
  • 方法,实现对象之间的沟通

代码实例:

class TestClass {
  void show() {
    print("Hello world");
  }
}

void main() {
  TestClass t = new TestClass();
  t.show();
}

上面的例子定义了一个类TestClass,这个类有一个方法 show(). 这个方法打印输出了”Hello world“ 到终端上。

数据类型

数据类型是一门编程语言的基础,Dart 支持:

  • Numbers
  • Strings
  • Booleans
  • Lists
  • Maps

Numbers

数值类型通常用于处理数字。Dart 有两种数值类型:

  • Integer 代表非小数数据,比如 9,10,101,通过关键字 int 表示
  • Double 表示小数数据,在 Dart 中一个Double的数据可以表示 64-bit 的小数,通过关键字 double 表示
void main() {
  // integer 
  int a = 10;
  int b = 11;

  // Double
  double f = 12.5;
}

String

String 类型数据代表一串字符。比如在计算机中存储名字、地址等数据的时候,String 类型就可以被用到了。 Dart 中的字符串为 UTF-16 的编码格式。Runes 用来表示 UTF-32 的编码格式。 String 是字符串的关键字,通常一个字符串被包含在单引号或者双引号之间。

void main() {
     // String 
  String name = "Tom";
   print(name);
  // Runes
  Runes address = new Runes('\u2665  \u{1f605}  \u{1f60e}  \u{1f47b}  \u{1f596}  \u{1f44d}');
  print(new String.fromCharCodes(address));
}

Boolean

关键字为 bool ,代表 true 或者 false。

List 和 Map

ListMap 都是集合类型的数据。List 如同其他编程语言中的数组,而Map是键值对。这两种数据类型都内置月 Dart 的核心库中,通过 List 和 Map 的类来表示。

Dynamic Type

Dart 是一门可选类型语言,如果一个变量定义的时候没有明确数据类型,那么这个变量的类型就是动态的。

变量

变量就是一个名字,是谁的名字呢?变量代表了一个值在内存中的名字。我们将一个值存入内存,通过变量就可以找到这个值。变量命名规则:

  • 不能包含关键字
  • 可以包含数字和字符
  • 不能以数字开头
  • 不能包含特殊字符,除了 "_" 和 "$"

变量声明语法

变量,先声明后使用。 Dart 使用关键字 var 来声明。语法格式如下:

void main() {
  var name = "Jack"; // 声明变量 name 存储值为 "Jack"
  print(name); // 使用变量
}

Dart 中的变量存储的是一个引用,而不是相应的值。比如, 当程序运行的时候,“Jack” 是被存储在内存的某块区域,name 存储的是这块区域的地址,而并非这个值 "Jack"。

Dart 存在类型检查,类型检查是根据变量名字前面的数据类型进行。比如下面的程序:

void main() {
    String name = "Rose";
    int num = 20;
}

针对于没有初始化的变量,dart 默认数赋值为 null

void main() {
  var novalue;
  print(novalue)
}

上面这段程序输出的结果为: null。

dynamic 关键字: 变量如果没有显示的声明类型,那么它的类型就是动态的。在 Dart 中可通过 dynmaic 来声明一个动态类型的变量。

void main() {
    dynamic v = "Tom";
    print(v);
}

Final 和 Const

Dart 通过关键字 Final 和 Const 来声明常量。 Const 声明的常量在编译期间值就已经确定,后面不允许修改。

void main() {
    
  final num1 = 12;
  final int num2 = 13;
  final String str1 = "nmmm";


  const num4 = 12;
  const int num5 = 13;

  //num1 = 10;// 报错
}

操作符

表达式最终都会产生一个值,每个表达式由下面两部分组成:

  • Operands 操作数 代表数据
  • Opearator 操作符 代表对数据的操作

考虑 “1 + 2 ” 这个表达式:1 和 2 都是操作数,符号 “+” 是操作符 在 Dart 中操作符有如下几种:

  • 算数操作符(Arithmetic)
  • 相等和关系操作符(Equality 和 Relational)
  • 类型测试操作符(Type test)
  • 位操作符(Bitwise)
  • 赋值操作符(Assignment)
  • 逻辑操作符(Logical)

算数操作符

1 + 加号
2 - 减号
3 -expr 符号
4 * 乘号
5 / 除号,如果不能整除会带有浮点数
6 ~/ 整除
7 % 取余
8 ++ 自加
9 -- 自减

关系操作符

关系运算符判断两个数或者表达式之间的关系。关系运算符的结果是 true or false。 假设 A = 10 , B = 20

OperatorDescriptionExample
>大于(A > B)结果为 false
<小于(A < B)结果为 true
>=大于等于(A >= B)结果为 false
<=小于等于(A <= B)结果为 true
==等于(A == B)结果为 false
!=不等于(A != B)结果为 true
### 类型操作符
OperatorMeaning
is 如果当前对象为相应的类型返回 true
is!如果当前对象为相应类型返回 false

位操作符

OperatorDescription
按位与a & b
按位或a | b
按位异或a ^ b
按位取非~ a
左移位a << b
右移位a >> b

赋值操作符

下面列出了Dart中所有的赋值运算符:

NO.Operator & Description
1 = 基本赋值运算符
2 ??= 只有当值不为空的时候才会赋值
3 +=
4 -=
5 *=
6 /=

逻辑操作符

逻辑运算符用来组合几个表达之,然后返回 true 或者 false A = 10 B = 20

OperatorDescriptionExample
&&只有当两个表达式都为 true 的时候才返回 true(A > 10 && B > 10) is False.
||两个表达式中如果有一个为真(A < B)结果为 true
!将表达式取反(A >= B)结果为 false