Dart基础(一)

栏目: IOS · 发布时间: 5年前

内容简介:级别: ★☆☆☆☆标签:「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

*/

复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Building Websites with Joomla!

Building Websites with Joomla!

H Graf / Packt Publishing / 2006-01-20 / USD 44.99

This book is a fast paced tutorial to creating a website using Joomla!. If you've never used Joomla!, or even any web content management system before, then this book will walk you through each step i......一起来看看 《Building Websites with Joomla!》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具