致读者
本文是《一个 JSer 的 Dart 学习日志》系列的第六篇,本系列文章主要以挖掘 JS 与 Dart 异同点的方式,在复习和巩固 JS 的同时平稳地过渡到 Dart 语言。
如无特殊说明,本文中 JS 包含了自 ES5 至 ES2021 的全部特性, Dart 版本则为 2.0 以上版本。
鉴于作者尚属 Dart 初学者,所以认识可能会比较肤浅和片面,对知识的概括难免有所疏漏,如您慧眼识虫,望不吝指正。本系列文章首发于思否平台,虽然没有限制其他平台转载,但是勘误及新增内容仅限于思否,如您是在别的地方看到本文,请移步思否,以免看到未修订的内容。
关于
自本系列挖坑以来,上次填坑已经是去年的事情了,老实说 Dart 已经忘得非常干净了。
所以按照之前挖坑的进度,本篇理应学习下 Dart 的数据集合方式 Map 或 List,但是临时想把原来学习过的东西巩固一下,所以先造个东西试试。
向量的实现(JS && Dart)
1. class 声明
使用数组/列表存储向量的值,这样做的好处是向量可以是任意多个维度。
JS:
class Vector{ #values = []; constructor(values = []){ this.#values = values.map(item => +item); } }
Dart:
class Vector{ List<double> _values; const Vector(this._values); }
2. 向量转数组/列表
将向量变成一个数组/列表。
JS:
getValues(){ return this.#values.map(item => item); }
Dart:
List<double> getValues(){ return _values.map((item) => item).toList(); }
3. 读取指定维度的值
维度在这里其实是一个序号,也就是数组/列表的下标。
JS:
getVal(index = 0){ return this.#values[index]; }
Dart
double getVal([int index = 0]){ return _values[index]; }
4. 向量相加
两个等长向量相加,得到一个新的向量。
JS:
add(obj){ const objVals = obj.getValues(); return this.#values.map((item, index) => item + objVals[index]); }
Dart:
Vector operator +(Vector obj){ final objVals = obj.getValues(); int cnt = 0; return _values.map( (item) => item + objVals[cnt++] ).toList(); }
向量的减法就是换个符号的事情,所以就省略了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。