内容简介:这一篇我们不讲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 系列。
请持续关注。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Heuristic Search
Stefan Edelkamp、Stefan Schrodl / Morgan Kaufmann / 2011-7-15 / USD 89.95
Search has been vital to artificial intelligence from the very beginning as a core technique in problem solving. The authors present a thorough overview of heuristic search with a balance of discussio......一起来看看 《Heuristic Search》 这本书的介绍吧!