内容简介:这一篇我们不讲Flutter 的知识,来讲一讲Dart 的基础知识。先来看看维基百科上关于Dart 的简介:Dart(是一种适用于万维网的
这一篇我们不讲Flutter 的知识,来讲一讲Dart 的基础知识。
先来看看维基百科上关于Dart 的简介:
Dart(是一种适用于万维网的 开放源代码 编程语言 ,由Google主导开发,于2011年10月公开。它的开发团队由Google Chrome浏览器V8引擎团队的领导者拉尔斯·巴克主持, 目标在于成为下一代结构化Web开发语言。
类似JavaScript,Dart也是一种面向对象语言,但是它采用基于类编程。它只允许单一继承,语法风格接近C语言。
再打开 Dart 官网:dart.dev,映入眼帘的是:
emmmm….很明显,现在知道 Dart 语言的人大部分都是因为 Flutter,这与它的目标 成为下一代结构化Web开发语言 好像有点偏差。(不过在Flutter 1.5 发布的时候发布了 Flutter for web)
不过无所谓,无论它最开始的目标是什么,既然我们现在想要学习 Flutter ,那就要了解 Dart 这门开发语言。
话不多说,我们开始。
首先我们要知道,Dart是一个纯面向对象语言,也就是说,在Dart中,一切皆对象。
Dart代码长什么样子
好像我们看到的 Dart 代码都是从 Flutter 里看见的,一个括号套一个括号,一大堆的括号。
那么标准的 Dart 代码是什么样的:
// 定义个方法。
printNumber(num aNumber) {
print('The number is $aNumber.'); // 在控制台打印内容。
}
// 这是程序执行的入口。
main() {
var number = 42; // 定义并初始化一个变量。
printNumber(number); // 调用一个方法。
}
复制代码
好像没什么不同的,只是有一个 num 好像有点不太一样(因为我是搞Android的,所以上来就看到了这一个问题)。
那我们就从变量开始讲起。
变量
声明变量
在 Dart 中,我们声明一个变量有两种方法:
var _str = ''; int _num = 1; 复制代码
所有用下划线开头的 无论是方法 还是变量 都是私有的。
我们可以用var 来声明一个变量,也可以指定变量的类型。
那么我们什么时候用什么样的方式来声明变量呢?
可以通过Dart代码风格推荐里来查询到:
对于局部变量,使用 var 而不是具体的类型来定义局部变量。
对于私有成员变量,推荐使用指定变量的类型来声明变量。
常量
在 Dart 中,我们声明常量有两种方法:
const String constString = ""; final String _finalString; 复制代码
一种是用 const,一种是用 final。
两种有什么区别?
const
const 是在编译时期就必须赋值,而且 const 在类中的话,就必须定义为 static const.
final
final 讲道理不能说是定义为常量,而应该叫做不能被修改的变量。
因为被 final 修饰的变量只能在类初始化时赋值一次。在编译时我们看不到其值。
所有内置的变量类型
Dart 内置支持下面这些类型:
- numbers
- strings
- booleans
- lists (也被称之为 arrays )
- maps
- runes (用于在字符串中表示 Unicode 字符)
- symbols
简单说两个
numbers
Dart 支持两种数值类型 int double ,这两种类型都是 num 的子类
也就是说只要你定义的是数值类型,就可以用 num 来接收。
strings
String 可以用双引号或者单引号来声明。
在字符串中可以用表达式 ${} ,也可以用 + 号来拼接字符串。
其他的就不说了,至于后两个很大可能用不到。
方法
Dart 是一个真正的面向对象语言,方法也是对象并且具有一种类型, Function 类型。
也就是说,我们可以把方法赋值成变量,来传入另一个方法。
一个简单的方法
来定义一个简单的方法:
Widget build(BuildContext context) {
return Container();
}
复制代码
就拿 Flutter 中的 build来说,这就是一个最基本的 Dart 方法。
返回类型为 Widget, 形参为 BuildContext。里面只有一行代码 return Container();
那对于一个方法中只有一个表达式的,我们可以这么写:
Widget build(BuildContext context) => Container(); 复制代码
这个 => Container(); 语法是 { return Container; } 形式的缩写。 => 语法也称为 胖箭头 语法。
可选参数
方法可以有两种类型的参数:必需的和可选的。 必需的参数在参数列表前面, 后面是可选参数。
在 Dart 中可选参数也有两种,可选命名参数 和 可选位置参数
可选命名参数
String demo(String name, {int age}){
String result = '我的名字叫$name';
if(age != null){
result += ',我今年$age岁了';
}
return result;
}
复制代码
这就是一个可选的命名参数,我们这样调用:
demo('HaSaKi', age: 18);
复制代码
可选位置参数
我们把刚才的demo 方法改造一下:
String demo(String name, [int age]){
String result = '我的名字叫$name';
if(age != null){
result += ',我今年$age岁了';
}
return result;
}
复制代码
把大括号改为了中括号,这样就成为了可选位置参数的方法。
要这样调用:
demo('HaSaKi', 18);
复制代码
参数默认值
在定义方法的时候,我们可以使用 = 来定义参数的默认值
默认值必须是编译时常量。
举个例子:
String demo(String name, {int age = 18}){
String result = '我的名字叫$name';
if(age != null){
result += ',我今年$age岁了';
}
return result;
}
复制代码
这个方法现在就算不传 age 的值,也永远都会输出,我今年18岁了。因为给了age默认值。
类
Dart 中的类和 Java 类似,单继承,并且 Object 是所有类的超类。
定义一个类:
class Person{
String name;
int age;
say(){
assert(name == null);
print('我叫$name');
}
}
复制代码
可以说和其他语言一样了。
下面来点不一样的。
简化变量赋值
在其他语言中,我们经常会使用构造函数来给类变量赋值。
由于这种需求特别常见,所以 Dart 提供了一个语法糖:
class Person {
String name;
int age;
Person(this.name, this.age);
say() {
assert(name == null);
print('我叫$name');
}
}
复制代码
命名构造函数
在 Dart 中,可以使用命名构造函数来更清晰的表达你的意图:
class Person {
String name;
int age;
Person.fromJson(Map json) {
this.name = json['name'];
this.age = json['age'];
}
say() {
assert(name == null);
print('我叫$name');
}
}
复制代码
工厂构造方法
如果一个构造函数并不总是返回一个新的对象,则使用 factory 来定义这个构造函数。
单例也是我们经常使用的, 我们可以使用工厂构造方法来让我们实现单例:
class Person {
static final Person _person = Person._internal();
factory Person() {
return _person;
}
Person._internal();
}
复制代码
可以看到,我们定义了一个私有命名构造函数,也定义了一个工厂构造函数。
定义一个 final 的 Person 对象,然后用工厂构造函数返回它。
我们来测试一下:
print(Person() == Person()); flutter: true 复制代码
可以证明这样写是没问题的。
级联调用
我们平时为类的值赋值或调用方法的时候,是这么写的:
var person = Person(); person.name = '哈哈'; person.age = 18; person.say(); 复制代码
有没有很麻烦?Dart 也为我们考虑到了:
Person() ..name = '哈哈' ..age = 18 ..say(); 复制代码
总结
目前就写这么多基础的知识吧,可以看到 Dart 为我们开发人员考虑了很多,是个现代化语言该有的样子。
而现在我们在Flutter 当中所看到的 Dart 代码只是冰山一角,后续我也会继续为大家写Dart 系列。
请持续关注。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Structures and Algorithm Analysis in Java
Mark A. Weiss / Pearson / 2006-3-3 / USD 143.00
As the speed and power of computers increases, so does the need for effective programming and algorithm analysis. By approaching these skills in tandem, Mark Allen Weiss teaches readers to develop wel......一起来看看 《Data Structures and Algorithm Analysis in Java》 这本书的介绍吧!