美文网首页
Flutter-Dart 语言基础

Flutter-Dart 语言基础

作者: 無名小子的杂货铺 | 来源:发表于2019-11-19 00:05 被阅读0次

如果你有其他编程语言经验,特别是 Java 和 JavaScript,会很容易上手 Dart, 基本上看一个遍介绍就能掌握了。文章的最后有下面demo 实例 github 链接

Dart 概况

在上一篇中已经讲过了 Dart 语言的来历和一些语言特性等优点,这里就不再重复赘述了,可以上看上一篇文章介绍。

类似 JavaScript,Dart 是一种面向对象语言,但是它采用类别基础编程。它只允许单一继承,语法风格接近C语言。

Dart 的方法也是对象并且具有一种类型 Function,这意味着方法可以赋值给变量,也可以当做其他方法的参数,也可以把 Dart 类的实例当做方法来调用。

在 Dart 语言中中所有能够使用变量引用的都是对象, 每个对象都是一个类的实例。甚至连数字、方法和 null 都是对象,所有的对象都继承于 Object 类。

Dart 是一个强类型语言,任何变量都是有确定类型。

变量声明

1、Object

Object 是Dart所有对象的根基类,包括Function和Null,所以任何类型的数据都可以赋值给Object声明的对象,声明的变量可以在后期改变赋值类型

   /// 定一个 Object 变量
  Object myObject;
  myObject = 'dart is good';//赋值string类型
  myObject = 998;//又重新赋值num
  print(myObject);

  /// 定一个 dynamic 类型 变量
  dynamic myDynamic;
  myDynamic = "dart is good";
  myDynamic = 999;//又重新赋值num 不会报错
  print(myDynamic);

  ///dynamic与Object不同:dynamic声明的对象编译器会提供所有可能的组合,
  ///而Object声明的对象只能使用Object的属性与方法, 否则编译器会报错

2、var

一种不指定类型声明变量的方式,但是只要变量被赋值,类型便会确定,则不能再改变其类型

//定义一个变量
  var number = 10;
//  number = 'start';//会报错,因为已经 number = 10 赋值,number 类型就确定了

3、final and const

如果你以后不打算修改一个变量,使用 final 或者 const。 一个 final 变量只能赋值一次;一个 const 变量是编译时常量。 (Const 变量同时也是 final 变量。) 顶级的 final 变量或者类中的 final 变量在 第一次使用的时候初始化。

  //不打算修改一个变量, 一个 final 变量只能赋值一次
  final name2 = 'Bob';
  // name2 = "bbb";//这里在进行赋值操作会报错

  var foo = const [];
  final bar = const [];
  const baz = const [];

  foo = [];//可以改变value
//  bar = [];//不能改变使用 final 标示的变量
//  baz = [];//不能改变使用 const 标示的变量

4、内置的类型

这里直接看代码好了

  //int 和 double 都是 num 的子类
  int x = 1;
  double y = 1.0;

  var x1 = 1;
  var y2 = 1.0;

  // String -> int
  var one = int.parse('1');
  print("String -> int:$one");

  // int -> String
  String oneAsString = 1.toString();
  print("int -> String:$oneAsString");

  ///可以使用单引号或者双引号来创建字符串
  var s1 = '单引号string';
  var s2 = "双引号string";
  print(s1);
  print(s2);

  ///使用三个单引号或者双引号也可以 创建多行字符串对象
  var s3 = '''
  第一行
  第二行
  第三行
''';
  print(s3);

  var count;
  print('Hello, World!');
  print(count);
  printNumber(number);

  ///定义一个有序list
  var list = [1, 2, 3];
  list.forEach(printElement);

  /// 定义一个不变的list
  var constantList = const [1, 2, 3];

  /// 创建一个map
  var gifts = {
// Keys      Values
    'first' : 'partridge',
    'second': 'turtledoves',
    'fifth' : 'golden rings'
  };

  ///同样创建一个map
  var gifts2 = new Map();
  gifts2['first'] = 'partridge';
  gifts2['second'] = 'turtledoves';
  gifts2['fifth'] = 'golden rings';
  print(gifts2);

  /// 创建 一个bool 类型变量
  var isGood = true;
  print(isGood is bool);

// 定义个方法。
printNumber(num aNumber) {
  print('The number is $aNumber.'); // 在控制台打印内容。
}

printElement(element) {
  print(element);
}

  ///List 和 Set 等实现了 Iterable 接口的类还支持 for-in 形式的 遍历
  var collection = [0, 1, 2];
  for (var x in collection) {
    print(x);
  }

/// 可选命名参数,你可以使用这种形式 paramName: value 来指定命名参数
  sayHello(name: "dart",talk: "hello");
  sayHello(name: "dart");

操作符

大部分操作符含义都是一样的,这里介绍几个 dart 特有的

1、??

b ??= value; // 如果 b 是 null,则赋值给 b;
             // 如果不是 null,则 b 的值保持不变

2、?

条件成员访问 和 . 类似,但是左边的操作对象不能为 null,例如 foo?.bar 如果 foo 为 null 则返回 null,否则返回 bar 成员

异步

Dart 有一些语言特性来支持 异步编程。 最常见的特性是 async 方法和 await 表达式。

Dart 库中有很多返回 Future 或者 Stream 对象的方法。 这些方法是 异步的: 这些函数在设置完基本的操作 后就返回了, 而无需等待操作执行完成。 例如读取一个文件,在打开文件后就返回了。

有两种方式可以使用 Future 对象中的 数据:

  • 使用 asyncawait
  • 使用 Future API

同样,从 Stream 中获取数据也有两种 方式:

  • 使用 async 和一个 异步 for 循环 (await for)
  • 使用 Stream API

要使用 await,其方法必须带有 async 关键字

lookUpVersion(){
}

checkVersion() async {
  var version = await lookUpVersion();
}

/// 假设getName 是异步操作
String getName(String name){
  return 'dart$name';
}

void sayDart() async {
  try{
    String name1 = await getName("1");
    String name2 = await getName(name1);
    print(name1+name2);
    //执行接下来的操作
  } catch(e){
    //错误处理
    print(e);
  }
}

Future.then:

  /// Future.delayed 创建了一个延时任务
  Future.delayed(new Duration(seconds: 5),(){
    return "Hello, World!";
  }).then((data){
    print(data);
  });

Future.wait:

处理多个异步任务

  /// Future.wait 执行多个异步任务
  Future.wait([
    Future.delayed(new Duration(seconds: 1), () {
      return "Hello, World 1!";
    }),
    Future.delayed(new Duration(seconds: 2), () {
      return "Hello, World 2!";
    })
  ]).then((results){
    print(results);
  }).catchError((e){
    print(e);
  });

总结

通过上面的基本介绍和代码解释,对 Dart 的基本语法和类型系统有了一个初步的了解,也知道编写的规则了。就像在开头说的如果你已经又其他编程语言的基础,上手 Dart 语言应该非常容易 。

像 if-else、for循环、while、do-while、break、continue、switch-case 等流程控制语法和其他编程语言大同小异,这里就不做一一介绍了。

更多的 Dart 语言特性需要你在后续的使用过程中慢慢学习。我们可以参考官方文档https://api.dartlang.org/stable/2.2.0/index.html

代码实例

已传置 github flutter-free

参考学习

http://dart.goodev.org/guides/get-started 很好的对比学习网站

相关文章

  • Flutter-Dart 语言基础

    如果你有其他编程语言经验,特别是 Java 和 JavaScript,会很容易上手 Dart, 基本上看一个遍介绍...

  • Flutter-Dart 基础

    理论上来说,学过 JS 、Java、Kotlin 的人,学习 Dart 不会有什么难度,以为他总结了动态语言和静态...

  • Flutter-Dart基础语法入门

    Dart语法基础 Dart语言简介 Dart是Google推出的一门编程语言,最初是希望取代Javascript运...

  • Flutter Errors

    Flutter-Dart version solving failed 问题表现 下载别人的项目,在电脑上开运行的...

  • 大数据新鲜干货,一起学习吧

    大数据语言基础 语言基础(视频) JavaSE 语言基础 Eclipse 开发环境 、 JavaSE 7.0 AP...

  • R语言基础--数据类型-总结

    R语言基础--数据类型-总结 1、R语言基础--数据类型之向量 2、R语言基础--数据类型之因子 3、R语言基础-...

  • 入门、练习与比赛的提示

    入门 ACM入门可以从语言、算法、阅读能力三个方面着手。 语言基础 语言基础偏指编程语言基础和其他计算机技能基础。...

  • java学习路径

    一、java基础知识 (30天) 1. 语言基础, java基础,环境变量 2. 语言基础, 进制转换 3. 语言...

  • Js全局变量和局部变量

    //结果: Javascript语言基础 //结果: Javascript语言基础 //结果:Javascri...

  • Go语言基础语法--注释、基础结构2

    章节 GO语言基础语法--注释、基础结构(重要) 1.GO语言基础语法---注释、基础结构 基础结构注意事项 源文...

网友评论

      本文标题:Flutter-Dart 语言基础

      本文链接:https://www.haomeiwen.com/subject/onunbctx.html