秀发去无踪之你不得不知道的Dart(上)

简介: 最近flutter发展的如火如荼,而Dart作为flutter的开发语言,了解一下

语言特征


dart 中一切皆对象dart这个特征和java很像,所有变量、方法都是对象,那怕仅仅是个数字或字符串


入口函数


在dart项目中,必须声明一个入口函数main,这也很java,程序从main函数开始运行(习惯使用js的需要注意这一点)。


void main(){
  print('hello dart!')
}


变量声明


  • 一般声明变量必须明确类型,类型明确后不能改变,未赋值默认值都是null


int i = 2;
i = '3' ; // error:i为int类型,不能赋值字符串类型


  • var 可以声明任意类型的变量,赋值后类型不能再改变


var i;
i = 2; 
i = 3;
i = '4'; // error: var 变量赋值后,类型不能再改变


  • dynamic 可以声明动态类型的变量,每次赋值类型不受限制


dynamic d = 1;
d = '123'; // 变量类型确定后还可以再赋值其他类型


  • final 变量只能赋值一次,声明时必须初始化


final a = 1;
a = 2; // error: final变量只能赋值一次,再次赋值报错
final b = [2];
b[0] = 1;
b.add(2); // final 虽然不能再次赋值,但是可以改变他成员变量的值


  • const 变量是编译时常量,是一种特殊的final变量


const a = 1;
a = 2; // error: const变量只能在初始化时赋值
const b = [2];
b.add(2); // error: const 变量中的成员变量也不可再次改变


方法


  • 一般定义方法须明确入参个数、类型及出参的类型


// 方法定义,明确入参和出参,编译时可以做类型校验,提前发现一些错误
int add(int m, int n) {
  return m + n;
}
void main() {
  int a = add(50, 30);
  String b = add('50', 30); // error: 入参类型和出参类型不正确,编译不通过
}


  • 如果不明确定义方法入参和出参参数类型,编译时无法进行类型检查


// 出参和入参的类型可以忽略,如果忽略,编译时无法进行类型检查
add( m, n) {
  return m + n;
}
void main() {
  int a = add(50, 30);
  String b = add('50', 30); // 可以通过编译,但在运行时会报异常
}


  • 方法入参也可以使用基于命名或位置的可选参数


// 可选位置参数
// 可选参数后面不能再有参数
int add(int m, [int n]) {
  int sum = m;
  if (n != null) {
    sum += n;
  }
  return sum;
}
void main() {
  print(add(1));
  print(add(1, 2));
}


// 可选命名参数
int add({int m, int n}) {
  int sum = 0;
  if (m != null) {
    sum += m;
  }
  if (n != null) {
    sum += n;
  }
  return sum;
}
void main() {
  print(add());
  print(add(m: 1));
  print(add(n: 2));
  print(add(m: 1, n: 2));
}


  • 定义方法入参时可以定义可选参数的默认值,默认值必须是编译时常量


// 默认参数值
// 默认值只能给可选参数设置
// 位置可选参数匹配顺序是从左到右的,即便有默认参数值
int add(int m, [int n = 0, int i]) {
  var sum = m + n;
  if (i != null) {
    sum += i;
  }
  return sum;
}
void main() {
  print(add(1));
  print(add(1, 2));
}


  • 箭头函数只能跟一个表达式,不能使用语句和代码块(前端开发人员要特别注意,和js的箭头函数不同)


// => 函数
void main() {
  var add = (int m, int n) => m + n;
  var sub = (int m, int n) => return m - m; // error: ruturn 是代码语句,箭头函数不能使用代码语句
  add(1 , 2);
}


  • 当方法作为参数传递给高阶方法时,可以使用匿名方法


// 匿名函数
void main() {
  var list = ['apples', 'oranges', 'grapes', 'bananas', 'plums'];
  list.forEach((i) {
    print(list.indexOf(i).toString() + ': ' + i);
  });
}


  • 也可以使用箭头函数为高阶方法传参


// 匿名函数
void main() {
  var list = ['apples', 'oranges', 'grapes', 'bananas', 'plums'];
  // 转换为箭头函数时,要去掉语句后面的分号,
  // 有分号就是语句,没有分号就变成了表达式,符合箭头函数要求
  list.forEach((i) => {print(list.indexOf(i).toString() + ': ' + i)});
  // 或
  list.forEach((i) => print(list.indexOf(i).toString() + ': ' + i));
}


  • Dart是静态作用域语言,编译时变量的作用域就已经确定(这点也和js不同,前端开发人员需注意)


// 静态作用域
int a = 5;
class Test {
  int a = 6;
  int getA() {
    return a;
  }
}
void main() {
  var obj = new Test();
  print(obj.getA()); // 6
  var fun = obj.getA;
  print(fun()); // 6
}


相关文章
|
6月前
|
Dart 编译器 API
Dart笔记:Dart 库
Dart笔记:Dart 库
167 0
|
JSON Dart 编译器
Dart简单介绍
Dart是一种面向对象、用于构建高性能应用程序的编程语言,它具有快速开发、易于维护和可移植性等特点,因此在 Flutter 应用程序开发方面越来越受欢迎。在这篇文章中,我们将深入探讨 Dart 语言的一些技术思考。 类型系统
Dart简单介绍
|
Dart JavaScript 前端开发
Flutter与一些常用的Dart语法
Flutter与一些常用的Dart语法
Flutter与一些常用的Dart语法
Runes——Dart
Dart中,Runes是指UTF-32定义的Unicode字符串。 Unicode使用数字表示世界上所有的字母、数字和符号。因为Dart中的String是一系列UTF-16字节单元,而在String中想要表示32位的Unicode值,则需要特殊的语法。 一般我们使用 `\uXXXX` 这种形式表示一个Unicode码,`XXXX`表示4个十六进制值。例如,字符(♥)的Unicode字符是`\u2665`。 当十六进制数据多余或者少于4位时,将十六进制数放入到花括号中,例如,微笑表情(😆)是`\u{1f600}`。 String类中有几个属性你可以用来获取`rune`信息。
|
Dart JavaScript 前端开发
Numbers——Dart
Dart中的数字类型有两种,int和double。
|
Dart 开发工具
使用 dart tear-off
使用 dart tear-off
143 0
|
Dart
在 dart 中使用 equatable
在 dart 中使用 equatable
180 0
|
自然语言处理 Dart JavaScript
Flutter之搞定Dart(一)
Google为Flutter选择了Dart就已经是既定的事实,无论你多么想用你熟悉的语言,比如JavaScript、Java、Swift、C++等来开发Flutter,至少目前都是不可以的。 在讲解Dart的过程中,我会假定你已经有一定的编程语言基础,比如JavaScript、Java、Python、C++等。
390 0
Flutter之搞定Dart(一)
|
存储 Dart
Flutter之搞定Dart(二下)
这里,我只列出来相对其他语言比较特殊的运算符,因为某些运算符太简单了,不浪费时间,比如+、-、+=、==。 你可能会疑惑,Dart为什么要搞出这么多特殊的运算符呢? 你要坚信一点:所有这些特殊的运算符都是为了让我们在开发中可以更加方便的操作,而不是让我们的编码变得更加复杂。
330 0
Flutter之搞定Dart(二下)
|
Dart
Flutter之搞定Dart(二上)
这里,我只列出来相对其他语言比较特殊的运算符,因为某些运算符太简单了,不浪费时间,比如+、-、+=、==。 你可能会疑惑,Dart为什么要搞出这么多特殊的运算符呢? 你要坚信一点:所有这些特殊的运算符都是为了让我们在开发中可以更加方便的操作,而不是让我们的编码变得更加复杂。
165 0
Flutter之搞定Dart(二上)