内容简介:级别: ★☆☆☆☆标签:「Dart 」「Dart基础」「Dart基础类型」作者: WYW
级别: ★☆☆☆☆
标签:「Dart 」「Dart基础」「Dart基础类型」
作者: WYW
审校:QiShare团队
前言:
笔者最近看了Flutter相关的内容,而Flutter的基础库是由Dart编写的,所以笔者学习了关于Dart的部分内容,整理了几篇关于Dart基础的文章。
Flutter 、Dart简介
Flutter is Google’s portable UI toolkit for building beautiful, natively-compiled applications formobile, web, and desktopfrom a single codebase. (引自Flutter.dev) Flutter 是谷歌的便携式UI工具包,可以使用一套代码库,来创建漂亮的本地编译的移动端(iOS、Android)应用,web(浏览器中的页面)、桌面(Mac、Windows、Linux)应用。 Flutter 当前最新稳定版本是1.5。
Dart([KK] 英语发音:/dɑrt/, [DJ] 英语发音:/dɑ:t/)是一种适用于万维网的开放源代码编程语言,由Google主导开发,于2011年10月公开。它的开发团队由Google Chrome浏览器V8引擎团队的领导者拉尔斯·巴克主持,目标在于成为下一代结构化Web开发语言。 类似JavaScript,Dart也是一种面向对象语言,但是它采用基于类编程。它只允许单一继承,语法风格接近C语言。
Dart is a client-optimized language for fast apps on any platform Dart是客户端的优化过的语言,可用于在任何平台(包括移动端(iOS、Android)、Web页面、桌面(Mac、Windows、Linux)应用),来创建运行流畅的应用。
当前Dart最新版本是2.4.0,2019-06-27 Dart开发团队发布2.4.0版本Dart。 Dart change log
下边,我们聊一下,关于Dart安装,及查看代码运行效果的内容
安装Dart
Dart 安装方式可查看: dart.goodev.org/install 在 Mac 安装 Dart 可查看 :homebrew
在线演示Dart运行效果
DartPad:Dart 在线演示:dartpad.dartlang.org
DartPad, an open-source tool, allows you to play with the Dart language features in any modern browser.
DartPad 是一个开源工具,我们可以在现代浏览器中使用DartPad来演示Dart语言特性。 笔者的理解就是,我们可以用DartPad在线查看Dart编程效果。
下边我们聊一下,Dart的基础语法相关的内容。
Dart导入头文件(资源库)的方式
// dart:io 为非Web应用提供文件,Socket,HTTP,和其他IO支持。 import 'dart:io'; // 导入Android设计风格的material库 import 'package:flutter/material.dart'; // 导入iOS 的设计风格cupertino库 import 'package:flutter/cupertino.dart'; // 只导入material库中的AppBar import 'package:flutter/material.dart' show AppBar; // 导入除了material库中 除BottomNavigationBar之外 的内容 import 'package:flutter/material.dart' hide BottomNavigationBar; 复制代码
Dart基本语法
-
1. 输出语句
一般我们开始学习某门语言的时候都会先输出,Hello World!或者是Hello 语言名。
Dart的输出语句和Swift一样,都是
print
。Dart的语句需要使用分号结尾。
main(){ print('Hello World!'); print('Hello Dart!'); } // 输出结果: /** Hello World! Hello Dart! */ 复制代码
- 2. 变量
定义变量使用 关键字 var
;
如定义变量名为name,值为QiShare的变量。
var name = 'QiShare'; print(name); // 输出结果: // QiShare 复制代码
Dart变量默认值为 null
int fansCount; // String fansCount; if (fansCount == null) { print('null'); } else { print('not null fansCount ${fansCount}'); } // 输出结果: /** null */ 复制代码
输出变量,需要拼接字符串和变量一起输出的情况下,所有的内容都使用 ''
包起来
${变量}
可以用于访问相应的变量的值。
取变量值是否使用 {}
分情况:
-
1.直接访问实例的情况 直接使用 $实例 即可;
-
2.访问实例的成员变量的情况 需要使用 ${实例.变量} ;
-
3.只是单纯输出实例或者是实例的成员变量的情况,不需要使用$。
-
3. 字符串
字符串拼接及多行字符串
// 字符串拼接 var name = 'QiShare' + 'QiShare'; print(name); // 输出结果: // QiShareQiShare // 多行字符串 var name = ''' QiShare QiShare QiShare '''; print(name); // 输出结果: /** QiShare QiShare QiShare */ 复制代码
关于变量是否对外可访问,在iOS Objective-C里边,如果我们想类文件A的某个变量对外可见,可以在类A.h文件里边把变量声明为属性。然后只要引用了A.h的类,就能够访问A.h中声明的属性。
在Dart中,如果要指定某个变量对外可访问,可以在类文件的顶部声明变量。
-
如果想要指定某个类的实例变量对外可访问,直接写在类声明的内部即可。并且变量不要使用下划线开头。
-
对于私有的变量,或者方法,使用下划线 “_” 在变量、方法前,则该变量、方法将分别为私有变量、私有方法。
-
对于其他的多个常量,整个项目中使用的情况,可以单独创建一个类文件用于存放公共的常量。
-
4. 变量类型检查及值检查
开发过程中,在对服务端下发的数据,进行处理的时候,有时需要进行变量类型判断,值的检测。可以参考如下的2种检测方式。
一个是变量类型检查,使用 runtimeType
或者使用关键字 is
进行类型检测;
另一个是变量的 值的检查
。
// Check for an empty string. var fullName = ''; if (fullName.isEmpty) { print('空字符串'); } // Check for zero. var hitPoints = 0; assert(hitPoints <= 0); if(hitPoints <= 0) { print('hitPoints小于等于0'); } // Check for null. var unicorn; if (unicorn == null) { print(null); } // Check for NaN. The global NaN property is a value representing Not-A-Number. var iMeantToDoThis = 0 / 0; if (iMeantToDoThis.isNaN) { print('Not a number'); } 复制代码
-
5. 类型推导
使用var 声明的变量,通过输出变量的
runtimeType
,可以发现变量的类型可以通过赋给变量的值,自动进行类型推导。
var name = 'QiShare'; if (name == null) { print('null'); } else { print(name); print(name.runtimeType); } /** QiShare String */ var name = 10.0; if (name == null) { print('null'); } else { print(name); print(name.runtimeType); } name = 10.1; if (name == null) { print('null'); } else { print(name); print(name.runtimeType); } /** 10 int 10.1 double */ /* 上边的例子很有意思,推导出的10.0的类型为int; 推导出的10.1的类型为double。 笔者认为是编译器做了优化,具体怎么做的,笔者尚不清楚。 */ // runtimeType是用于查看变量类型的。 // 可以使用runtimeType或is查看变量是什么类型 String QiShare = 'QiShare'; if (QiShare.runtimeType == String) { print(QiShare); print('name:${QiShare}'); } /** QiShare name:QiShare */ // 使用is 查看变量的类型 String QiShare = 'QiShare'; if (QiShare is String) { print('是String类型 :'); print(QiShare); } else { print('非String类型'); } /* 输出结果: 是String类型 : QiShare */ 复制代码
当然除了类型推导知道变量的类型外,对于我们自己声明的变量,在已经确定变量类型的情况下,直接直观地声明变量类型即可。
那么对于var 这种变量的使用场景,笔者想到的有如下2种情况。
-
1.接收服务端返回数据的时候,避免返回的数据类型和预期的有差距的情况,可以使用var 变量接收,然后通过类型检测后,再进一步进行数据地处理;
-
2.对于某些函数接收的参数可能是多种类型的情况下,使用var 来修饰参数类型。
-
6. Final and const
final 声明的变量只能赋值一次 final name = 'QiShare'; // name = 'QiShareQiShare'; // 报错: const 是编译时常量 const name = 'QiShare' 复制代码
final 或const修饰的变量只能赋值一次;
const 变量是编译时常量,在编译的时候,我们就已经知道了const 变量的值。
顶级的final 变量或类中的final变量在第一次使用的时候初始化。
这里举一个类中final变量初始化的例子:
class QiShareMember { final String memberID; final String memberName; QiShareMember(this.memberID, this.memberName); } // QiShareMember初始化实例 QiShareMember member = QiShareMember('id', 'name'); 复制代码
- 7. List和Map
var list = ['a', 'b', 1]; // 遍历list list.forEach( (object){ print('类型 ${object.runtimeType}'); print('值${object}'); } ); // list 中的数据 print(list.length); /** CONSOLE 类型 String 值a 类型 String 值b 类型 int 值1 */ void main() { var gifts = { // Keys Values 'first' : 'partridge', 'second': 'turtledoves', 'fifth' : 'golden rings' }; print(gifts); // 获取Map中的键值对数目 print(gifts.length); // 遍历字典 gifts.forEach( (key, value){ print('key:${key}'); print('value:${value}'); } ); /** CONSOLE {first: partridge, second: turtledoves, fifth: golden rings} key:first value:partridge key:second value:turtledoves key:fifth value:golden rings */ 复制代码
List相当于是Swift的数组; Map相当于Swift的字典;
- 8. 数据类型转换
下边是字符串和整数,浮点数之间的类型转换。
// String -> int String 类型转换为int 类型 var one = int.parse('1'); print(one.runtimeType); // String -> double String 类型转为double类型 var onePointOne = double.parse('1.1'); print(onePointOne.runtimeType); // int -> String int 类型转换为String String oneAsString = 1.toString(); print(oneAsString.runtimeType); // double -> String double类型转换为String类型 String piAsString = 3.14159.toStringAsFixed(2); print(piAsString.runtimeType); /** int double String String */ // List类型转换 把子类型为dynamic的List转换为更为具体的子类型为String的List List<dynamic> dynmicList = ['QiShare', 'QiShare']; print(dynmicList.runtimeType); List<String>strList = List<String>.from(dynmicList); print(strList); print(strList.runtimeType); /** JSArray [1, 2] JSArray<String> */ 复制代码
- 9.方法
int qiAgeNum = qiAgeNumber(); qiSay('${words()} ${qiAgeNum}'); String words(){ return 'QiShare Age:'; } void qiSay(String words) { print(words); } void qiAge() { print(qiAge); } int qiAgeNumber (){ return 1; } /** // 输出结果 QiShare Age: 1 */ 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。