文档章节

Flutter 系列之Dart语言概述

過愙
 過愙
发布于 08/25 14:45
字数 1599
阅读 18
收藏 0

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧

一、Dart语言之初体验

Dart可以在编译器(Android Studio)、命令行(前提是安装了Dart SDK)及网页repl.it中调试编译,由于本次内容比较简单,我们直接在网页中调试编译即可。

我们定义一个输出当前时间的函数,并输出当前时间

//输出当前时间
void nowTime() {
  int year = DateTime.now().year;
  int month = DateTime.now().month;
  int day = DateTime.now().day;
  int hour = DateTime.now().hour;
  int minute = DateTime.now().minute;
  int second = DateTime.now().second;
  String str = 'Hello World, This is $year-$month-$day $hour:$minute:$second';
  print(str);
}

和绝大多数其他语言一样,Dart要求以main函数作为执行的入口,我们再定义main函数,并将输出当时时间的函数放入main函数中

void main() {
	nowTime();
}

点击“run”按钮,命令就会输出

Hello World, This is 2019-8-11 10:45:46

我们已经可以简单的运行Dart代码了,我们接下来再看一下Dart的基本变量类型

二、Dart的变量与类型

在Dart中,所有的变量都可以用var来申明,当然,也可以指定具体的类型来申明一个变量。当使用var申明变量时,表示类型是交由编译器推断决定的。虽然Dart支持用var来申明变量,但我还是建议使用具体的类型来申明变量,这样编辑器和编译器就能使用这些具体的类型,向你提供代码补全或编译告警的提示了。

注意:在默认情况下,所有未初始化的变量值都是null,因此,我们判断变量是否初始化时只用和null比较即可。

Dart是类型安全的语言,并且所有类型都是对象类型,都继承自顶层类型Object,因此一切变量的值都是累的实例(即对象),其中包括数字、布尔值、函数和null也都是继承自Object对象。

Dart内置了一些基本类型,如num、bool、String、List及Map。

num、bool及String

num、bool及String基本上是编程语言中最常用的类型

Dart的数值类型num只有两种子类:int(整数类型)和double(浮点类型)

void numVerb() {
  int x = 100;
  double y = 5.2;
  double xy=x*y;
  int roundY = xy.round();
  print('x = $x, y = $y, xy = $xy, roundY = $roundY');
}
x = 100, y = 5.2, xy = 520.0, roundY = 520

除了常见的基本运算符(比如:+、-、*、/,以及位运算符)外,还能使用继承自num的abs()、round()等方法来实现求绝对值、取整等功能。

Dart的布尔类型bool也只有两种取值:true和false,他们都是编译时常量。 Dart是类型安全的,因此我们需要显示的检查值

void checkValue() {
  bool isTrue = true;
  assert(isTrue == true);
  //assert(isTrue);//错误
}

Dart的String由UTF-16de字符串组成,定义字符串时我们既能使用单引号也能使用双引号,并且还能在字符串中嵌入变量或表达式(可以使用${express}把一个表达式的值放进字符串,而如果是一个标识符,则可以省略{})。

/**
 * 将一个字符串中的字母全部转换为大写
 */
void upperCase() {
  String str = 'toUpperCase';
  String str2 = "toUpperCase";
  String str3 = 'str = $str, str2 = $str2, str to upperCase: ${str.toUpperCase()}';
  print(str3);
}
str = toUpperCase, str2 = toUpperCase, str to upperCase: TOUPPERCASE

为了获得内嵌对象的字符串,Dart会调用对象的toString()方法,而常见字符串的拼接,Dart则通过内置运算符“+”实现。

void stringVerb() {
  int year = DateTime.now().year;
  int month = DateTime.now().month;
  int day = DateTime.now().day;
  int hour = DateTime.now().hour;
  int minute = DateTime.now().minute;
  int second = DateTime.now().second;
  String str = 'Hello World, This is ' +
      year.toString() +
      '-' +
      month.toString() +
      '-' +
      day.toString() +
      ' ' +
      hour.toString() +
      ':' +
      minute.toString() +
      ':' +
      second.toString();
  print(str);
}
Hello World, This is 2019-8-11 12:19:31

对于多行字符串对的构建,你可以通过三个单引号或三个双引号的方式申明

void stringVerb() {
  int year = DateTime.now().year;
  int month = DateTime.now().month;
  int day = DateTime.now().day;
  int hour = DateTime.now().hour;
  int minute = DateTime.now().minute;
  int second = DateTime.now().second;
  String str = """Hello World, This is
  $year-$month-$day $hour:$minute:$second""";
  print(str);

  String str2 = '''Hello World, This is
  $year-$month-$day $hour:$minute:$second''';
  print(str2);
}
Hello World, This is
  2019-8-11 12:32:5
Hello World, This is
  2019-8-11 12:32:5
List和Map

List和Map分别对应其他编程语言中的数组和字典类型,统称为集合类型

void listTest() {
  List<String> arr1 = ['name', 'age', 'sex'];
  for (var value in arr1) {
    print(value);
  }
  List<int> aar2 = List.of([1, 2, 3]);
  aar2.add(4);
  for (var value2 in aar2) {
    print(value2);
  }
  List<num> nums = new List<num>();
  nums.add(1);
  nums.add(1.1);
  nums.add(3);
  nums.add(5.20);
  for (var value3 in nums) {
    print(value3);
  }
}
name
age
sex
1
2
3
4
1
1.1
3
5.2

如上代码所示,我们申明并初始化了三个List变量,并调用其各自的迭代方法依次打印出其内部元素

void mapTest() {
  Map<String, String> map = {'name': 'Jack', 'age': '18', 'sex': '男'};
  map['name'] = 'Tom';
  map['age'] = '20';
  map['sex'] = '男';
  map.forEach((k, v) => print('$k:$v'));

  Map map2=new Map<String,String>();
  map2['name']='Dart';
  map2['age']='2';
  map2.forEach((k,v)=>print('$k:$v'));
}
name:Tom
age:20
sex:男
name:Dart
age:2

如上代码所示,我们申明并初始化了两个Map变量,同样调用其各自的迭代方法依次打印出其内部的元素

定义常量

如果你想定义不可变的变量,则需要在定义前加上final或const关键字

const:表示变量在编译期间既能确定的值

final:表示变量可以在运行时确定值,但一旦确定后就不可改变

const与final区别:在定义const常量时,必须直接赋值,且只能是一个固定值,不能为一个变量或公式;在定义final常量时,可以赋值也可以不赋值,赋值时可以赋值为一个固定值,也可以赋值为一个变量或公式,但一旦赋值后就不能再改变

已同步更新至微信公众号,欢迎关注“Android小白营” file

© 著作权归作者所有

過愙
粉丝 1
博文 7
码字总数 9621
作品 0
私信 提问
参加全球 Dart Flight School 系列活动

Google 和 Dart 团队在2月份发起了一次全球性的 Dart 普及和动手活动——Dart Flight School 。目前全球已有超过100场活动。中国将有 8 个城市的 GDG 社区参与此系列活动,包括北京、上海、杭...

韩国恺
2014/02/14
318
0
Flutter进阶篇(5)-- 使用Flutter创建插件详解并发布到Pub库

Flutter提供了和原生做交互的方式,我们通过和原生交互就可以达到Flutter调用原生平台的相关功能的目的。换句话说,Flutter做不到的事(比如:设备有关的、第三方SDK、长连接等),我们都可以...

AWeiLoveAndroid
02/22
0
0
Flutter基础(二)Flutter开发环境搭建和Hello World

本文首发于公众号「刘望舒」 关联系列 ReactNative入门系列 React Native组件 Flutter基础系列 前言 其实没想写Flutter的相关文章的,因为这些看官方文档就够了,但是有不少同学就想看我写的...

刘望舒
08/19
0
0
Flutter基础(二)Flutter最新开发环境搭建和Hello World

本文首发于微信公众号「刘望舒」 前言 最近的Google I/O大会上,Flutter1.5 预览版开始支持移动、Web、桌面和嵌入式设备,从不温不火的sky一直进化到如今热门的Flutter,Flutter的发展已经超...

刘望舒
05/16
0
0
Dart的语法详解系列篇(三)-- mixin入门详解

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/405ba04ffbdc 转载请标明出处: https://www.jianshu.com/p/405ba04ffbdc 本文出自 AWeiLoveAndroid的博客...

AWeiLoveAndroid
2018/12/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
7分钟前
0
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
9分钟前
0
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
12分钟前
1
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
18分钟前
3
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
41分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部