Dart 是 Flutter 主要的开发语言,这一篇文章主要为 JavaScript 开发人员准备的 Dart 教程,我会用很详细的对比来参考,力争 JavaScript 开发人员可以快速的熟练使用 Dart,为使用 Flutter 做好准备;

使用 es2015 做为参照;

示例可以使用 https://dartpad.dartlang.org/ 来运行;Dart 和 JavaScript 有非常重要的不同,Dart2 开始它变成了一个强类型的语言,JavaScript 开发人员可以类比你在使用 TypeScript 。

常量和变量

变量

JavaScript

var c = 1;
c = 2;let a = 1;
a = 2;

Dart

int a = 1;
a = 2;var h = 1;
h = 2;

常量

JavaScript

const b = 1;

Dart

final b = 1;
const ggg = 1;

finalconst 唯一的区别是 final 可以接收一个变量但 const 不行,多数情况下我们会使用 final 来定义只赋值一次的值;

函数

定义函数

JavaScript

function a(){}
const b = function(){}

Dart

void funcs(){}
final funcs = (){}

多数情况下 Dart 的函数和 JavaScript 的函数都有一样的特性,如:

  • 将函数当做参数进行传递
  • 将函数直接赋值给变量
  • 对函数进行解构,只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数
  • 创建一个可以被当作为常量的匿名函数

当你要使用一个非常简单的函数时,比如只返回一个字符串,它的表现形式和 JavaScript 的箭头函数非常的像;

JavaScript

const d = () => 'dd';

Dart

String d() => 'dd';

实际上它可以等价为:

JavaScript

const d = () => {return 'dd';
}

Dart

String d(){return 'dd';
}

当我们需要传递一个函数做为参数时:

javascript

function a(){console.log('a');
}function b(funcs){funcs()
}b(a);

Dart

String dd() => 'dd';void PrintString(funcs){print(funcs());
}PrintString(dd);

字符串模板

JavaScript 的模板和 Dart 一样,都是一个表达式;

javascript

const d = 'icepy';`hello ${d}`;function dd(){return 'dd';
}`hello ${dd()}`;

Dart

final d = 'icepy';'hello $d';String dd() => 'dd';'hello ${dd()}';

模块导入和导出

JavaScript 使用 import 和 export 来导入导出模块,Dart 也使用了 import 来导入模块,只不过它和 JavaScript 有一个显著的区别,Dart 并不需要使用 export 来导出模块。

javascript

import xxx from "xxx";
import * as xx from "xxx";
import { xx } from "xxx";

Dart

import 'package:xxx/xxx'; import 'package:xxx/xxx' show xxx; //导出其中一个对象import 'package:xxx/xxx' hide yyy; //导出模块时不导出yyyimport 'package:xxx/xxx' as myxxx; //给导出的模块加上别名

为了更好的用语言来描述你的程序,类就是这样一个很好的媒介,与 JavaScript 非常一致的是 Dart 也使用 class 来定义一个类,使用 extends 来完成继承,与 JavaScript 不同的是 Dart 有更为丰富的功能;

构造函数

JavaScript

class Icepy {constructor(a){this.a = a;}
}

Dart

class Icepy {int a;Icepy(this.a);
}

构造函数参数默认值

JavaScript

class Icepy {constructor(a = 1){this.a = a;}
}

Dart

class Icepy {int a;Icepy({this.a = 1});
}void main() {final i = new Icepy();print(i.a);
}

定义实例方法

JavaScript

class Icepy {constructor(a=1){this.a = a;}say(){console.log(this.a);}
}

Dart

class Icepy {int a;Icepy({this.a = 1});void say(){print(this.a);}
}void main() {final i = new Icepy();i.say();
}

定义静态方法

JavaScript

class Icepy {static staticMethod() {return 'static method has been called.';}
}

Dart

class Icepy {int a;Icepy({this.a = 1});  Icepy.stt(){print('2');}
}void main() {Icepy.stt();
}

getter&setter

JavaScript

class Square{constructor(length) {this.name = 'Square';}get area() {return 2*2;}set area(value) {this._area = value;}
}

Dart

class Rectangle {num left, top, width, height;Rectangle(this.left, this.top, this.width, this.height);num get right => left + width;set right(num value) => left = value - width;num get bottom => top + height;set bottom(num value) => top = value - height;
}void main() {var rect = Rectangle(3, 4, 20, 15);print(rect.left == 3);rect.right = 12;print(rect.left == -8);
}

重写

JavaScript

class B {say(){console.log(1)}
}class A extends B {say(){console.log(2)}
}new A().say();

Dart

class ICe {void say(){print(2);}
}class ICCC extends ICe {@overridesay(){print(1);}
}void main(){new ICCC().say();
}

当然 JavaScript 也有很多它比较独特的特性,这就不一一列举了,更多的 Dart 特性需要你在使用的过程中慢慢学习了,比如:

  • 抽象方法
  • 抽象类
  • 隐式接口
  • ...

在我们使用 Flutter 的过程中 @override 应该是我们使用的最多的特性之一;

dart参数传方法_为 JavaScript 开发人员准备的 Dart 参考教程相关推荐

  1. javascript工具_适用于JavaScript开发人员的10个有用工具

    javascript工具 JavaScript已经证明必须认真对待它,因为它可以真正改善Web! 人们开始看到,它的价值不是提供便宜的效果,而是真正的Web解决方案. 在本文中,我为所有JavaScr ...

  2. dart参数传方法_Flutter必备Dart语言快速入门

    作为Flutter专属的开发语言(当然Dart不知如此,也可以开发Web和服务端),面对对象.高性能.多端一致.热更新是Dart的优势所在,是Flutter开发必须掌握的语言,也正是Flutter的流 ...

  3. gradle构建编码_如何以开发人员的身份从编码教程过渡到构建项目

    gradle构建编码 Learning to code by following tutorials works for many people. And yet there tends to be ...

  4. dart参数传方法_Dart语法

    1.Dart程序运行的入口是main函数,所以写一段Dart程序时,必须要有main函数 void main(List args){ print("Hello Dart"); } ...

  5. ​JavaScript 开发人员的主要基本技能是?

    程序员之所以欣赏JavaScript软件开发,是因为他们能够利用JavaScript构建客户喜欢的高度互动网站. 作者 | PaulAzorín 译者 | 弯月,责编 | 刘静 出品 | CSDN(I ...

  6. 观光公交削弱_削弱Web开发人员和Internet的7大障碍

    观光公交削弱 As a web developer I periodically take a step back from the text editor and look at the lands ...

  7. Java自己文章只能自己修改_文章目录Java代码俯身指南,主要为Java开发人员提供代码复审参考,快捷有效提出修改意见。目的发现代码错误:一个人写的代码可能会有一些思想和设计盲点,多个人尽...

    文章目录 Java代码俯身指南,主要为Java开发人员提供代码复审参考,快捷有效提出修改意见. 目的发现代码错误:一个人写的代码可能会有一些思想和设计盲点,多个人尽早的发现BUG. 统一代码风格:统一 ...

  8. 每个JavaScript开发人员应该知道的33个概念

    每个JavaScript开发人员应该知道的33个概念 介绍 创建此存储库的目的是帮助开发人员在JavaScript中掌握他们的概念.这不是一项要求,而是未来研究的指南.它基于Stephen Curti ...

  9. [译] 优秀 JavaScript 开发人员应掌握的 9 个技巧

    Photo by Andrew Worley on Unsplash 原文链接:9 Tricks for Kickass JavaScript Developers in 2019 原文作者:Luka ...

最新文章

  1. Java bean转换map
  2. 7个示例科普CPU Cache
  3. @Resource和@Autowired作用和区别
  4. Java 关键字—— static 与 final
  5. 一文了解GaussDB 200的产品架构、数据流程、组网方案、服务部署原则、企业级增强特性......
  6. linux系统下c语言程序需要改动的地方,如何在Linux系统环境下进行C语言开发
  7. jQuery插件开发之windowScroll
  8. 嵌入式Linux内核优化裁剪
  9. Cadence Orcad Capture在元件库中修改默认封装图文视频教程
  10. 深入浅出 Python Decorators
  11. 常用的软件测试方法及特点分析
  12. Arduino之PlatformIO_串口监视器使用
  13. 修改mysql.sock路径_mysql错误-修改mysql.sock位置
  14. iOS错误信息记录,不定时补充
  15. [uni-app]h5+app页面背景图全屏显示
  16. sdutacm-小雷的冰茶几
  17. 寒武纪重磅发布首款AI云芯片,陈天石要让端云结合占领10亿智能终端!
  18. 1000人 规模园区网设计
  19. 计算机中的PS颜色填充快捷键,ps颜色填充快捷键【解决技巧】
  20. Python图像识别-Opencv07 异或运算,图像加密

热门文章

  1. JavaScript的AMD规范
  2. 算法复习——凸包加旋转卡壳(poj2187)
  3. LeetCode-1.Two Sum
  4. 01背包 + 概率 之 hdu 2955
  5. 自定义Visual Studio IntelliTrace 智能跟踪
  6. 网页、网站规划与设计1
  7. XAML 编辑调试工具 Kaxaml
  8. Android Studio androidx 包冲突解决方法
  9. dpkg安装deb缺少依赖包的解决方法
  10. 最大调用堆栈大小超出错误