Dart语言同Java、Javascript语法糖区分比较

Dart语言

  • Dart语言,具有动态语言和静态语言的特性。 即具备双重语言优势。且同时支持JIT(Just In Time,即时编译)和AOT(Ahead of Time,运行前编译)两种编译模式。
  • Dart语言,并发是通过Isolate实现的。 Isolate是类似于线程但不共享内存,独立运行的worker。这样的机制,就可以让Dart实现无锁的快速分配。
  • Dart是单线程模型,不存在资源竞争和状态同步的问题。 这就意味着,一旦某个函数开始执行,就将执行到这个函数结束,而不会被其他Dart代码打断。

访问权限修饰符

Java
public
具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。
protected
主要的作用就是用来保护子类的。相当于传递给子类的一种继承。
default
有时候也称为friendly,它是针对本包访问而设计的,任何处于本包下的类、接口、异常等,都可以相互访问,即使是父类没有用protected修饰的成员也可以。
private
访问权限仅限于类的内部,是一种封装的体现。

Dart
Dart中只有 publicprivate 两种。
对应 有下划线_没下划线_ 两种。如: _key 、_getName()

分支语句判断

Javascript
let accNum = “”; // accNum = undefined、null
if (accNum) {
// 表示 如果 卡号非空 执行
// 方法体
}

Dart

dart中在分支语句判断上必须是判断值类型为 `布尔(bool)`

操作符

Javascript
let accNum = “”; // accNum = undefined、null
let inputNum = “6228483267096781”
// 表示 如果 accNum为空,newNum取值inputNum
let newNum = accNum || inputNum;

Dart

 / ** dart中在使用上有"??" */
let accNum = ""; // accNum =null 
let inputNum = "6228483267096781"
// 只有当accNum值为null时,newNum取值inputNum
let newNum = accNum ??  inputNum;

级联赋值

Java
Room room = new Room();
room.address = “地址”;
room.stress = “街道” ;
room.name = “房子” ;
room.color = “颜色”;

Dart

Room room = new Room();
// dart中 
room..address = "地址"  ..stress = "街道"  ..name = "房子"  ..color = "颜色";

键值对Map

Javascript
let person = { “name”:“姓名”, “agender”:“性别”, “age”:“年龄” }
// 获取姓名方式有两种(因为 js中Map具有对象\键值对双重特性)
// 并且js中键值对类型可以不唯一
let name = person.name; // 具备对象属性
let name = person[“name”];

Dart

/** Dart 键值对中值类型必须一致,且不具备对象属性*/
Map person = { "name":"姓名", "agender":"性别", "age":"年龄" }
const name = person["name"];

// 特殊键值对,const修饰过的不能增、删、改。
var map = const {"key":"value", "name":"beijing"};

类和接口

Java
// java中类和接口是严格区别的
// 区别通过关键字 interface abstract class extends implements
interface Person {
void run();
}
class Police {
void study(){…};
}
class Teacher extends Police implements Person {
… …
}

Dart

/** dart 中 类和接口是统一的, 都可以使用关键字  implement */
abstract class Person {
  void run();
  void study();

}

class Teacher extends Person{
  @override
  void run() {
    // TODO: implement run
  }

  @override
  void study() {
    // TODO: implement study
  }
}

// 类和接口是 统一的; 类是接口, 接口也是类
class Student implements Person, Teacher {
  @override
  void run() {
    // TODO: implement run
  }

  @override
  void study() {
    // TODO: implement study
  }

}

不能重载

Java
// java 中是可以进行普通方法+构造方法重载的
class Person {
public void run(){
… …
}
public void run(Sring car){
… …
}
}

Dart

dart 中是不能进行普通方法重载的, 但是可以通过命名构造方法的重载;

/** 
* 子类继承父类。如果子类使用了多参命名构造方法,且并被初始化调用,那么会 始终先初始化调用父类的默认或无参构造方法。
*/
class Person {
  num age = 0;
  String address = "Person 的 地址";
  String _gender = "男";
  bool get asAdult => age > 18;
  Person() {
    print("Person 构造方法");
  }
  void run () {
    print("Person run方法执行");
  }
  void study() {
    print("Person学习性别 = $_gender");
  }
  Person.person(){
    print("Person 命名构造方法");
  }
  Person.person2(num age){
    this.age = age;
    print("Person 有参数命名构造方法");
  }
}

待续…

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值