简介
1、Dart官网:https://www.dartlang.org/
2、应用场景
1、Web开发
2、跨平台移动应用开发(Flutter)
3、脚本或服务端开发
3、版本
-
Dart 1.X、Dart2.X
- Dart 1.24.3(archive)
- Dart 2.2.0(stable)
环境搭建
1 SDK安装
① 先安装homebrew:https://brew.sh/
② install dart
brew tap dart-lang/dart
brew install dart
或者
brew install dart --devel
③ 验证
brew info dart
④ 想升级dart或者install特定版本可以参照:https://www.dartlang.org/tools/sdk#install
运行Dart可以通过:
1、VSCode 为例
1.1 安装dart
1.2 安装code runner
2、DartPad(https://dartpad.dartlang.org/)
3、更多:
Dart基础入门
开始
1 新建hello_world
① 文件命名:多个单词用下划线分割: hello_world
② hello_world程序
void main() {
print("Hello world!");
}
③ 如果已经安装了code runner,那点击VSCode右上角的run按钮即可,如下图:
基本语法
常量&变量
var 声明变量,可赋不同类型的值,未初始化时为null
final声明一个只能被赋值一次的变量、
使用const必须是编译期常量
void main() {
var a;
print(a); // null
a = 10;
print(a); // 10
a = "Hello World";
print(a); // Hello World
var b = 20;
print(b); // 20
final c = 30;
print(c); // 30
const d = 40;
print(d); // 40
}
Q1:final&const区别?
基本类型
分类
- int
- Double
1.1 数值型常用操作
+ 、-、*、 /、 ~/ (取整)、%
常用属性:isNaN、isEven、isOdd
常用方法:abs()、round()、floor()、ceil()、toInt()、toDouble()
void main() {
num a = 10;
a = 12.5;
int b = 20;
double c = 10.5;
print(b + c); // 30.5
print(b - c); // 9.5
print(b * c); // 210.0
print(b / c); // 1.9047619047619047
print(b ~/c); // 1
print(b % c); // 9.5
print(0.0 / 0.0); // NaN
print(b.isEven); // true
print(b.isOdd); // false
int d = -100;
print(d.abs()); // 100
double f = 10.5;
print(f.round()); // 11
print(f.ceil()); // 11
print(f.floor()); // 10
print(f.toInt()); // 10
print(b.toDouble()); // 20.0
}
字符串(String)
1、创建
- 单引号/双引号
- 三引号或双引号(多行)
- r创建原始raw字符串
2、 操作
- 运算符:+、+、==、[]
- 插入表达式:${expression}
- 常用属性:length、isEmpty、isNotEmpty
3、 常用方法
contains()
substring()
startsWith()
endsWith()
indexOf()
lastIndexOf()
toLowerCase()
toUpperCase()
trim()
trimLeft()
trimRight()
splite()
replaceXXX()
void main() {
String str1 = 'Hello';
String str2 = '''Hello
Dart''';
print(str2);
String str3 = 'Hello \n Dart';
print(str3);
String str4 = r'Hello \n Dart';
print(str4); // Hello \n Dart
String str5 = "This is my favorite language";
print(str5 + "!!!!"); // This is my favorite language!!!!
print(str1 * 3); // HelloHelloHello
print(str3 == str4); // false
print(str5[0]); // T
int a = 1;
int b = 2;
print("a + b = ${a+b}"); // a + b = 3
print("a = $a"); // a = 1
print(str5.length); // 28
print(str5.isEmpty); // false
print(str5.isNotEmpty); // true
print(str5.contains("This")); // true
print(str5.substring(0, 3)); // Thi
print(str5.startsWith("a")); // false
print(str5.endsWith("ge")); // true
var list = str5.split(" ");
print(list); // [This, is, my, favorite, language]
}
布尔类型(Bool)
void main() {
bool isTrue = true;
bool isFalse = false;
print("Hello".isEmpty); // false
}
数组(List)
- 创建List: var list = [1, 2, 3];
- 创建不可变的List : var list = const [1, 2, 3];
- 构造创建List: var list = new List();
常见操作
- [], length
- add(), insert()
- remove(),clear()
- indexOf(),lastIndexOf()
- sort(),sublist()
- Shuffle(),asMap(),forEach()
forEach怎么实现(从代码层级看,问题3)
filled怎么实现(从代码层级看,问题3)
Map
1、创建方式
创建Map
创建不可变的Map
构造创建Map new Map;
2、常见操作
[]、length、isEmpty、isNotEmpty
Keys,values
containsKey()、containsValue()
Remove()、forEach()
asMap()
void main() {
var map = {"first":"Dart", 1:true, true:"2"};
print(map); // {first: Dart, 1: true, true: 2}
print(map["first"]); // Dart
map[1] = false;
print(map); // {first: Dart, 1: false, true: 2}
var map1 = Map();
print(map1); // {}
print(map.keys); // (first, 1, true)
print(map.values); // (Dart, false, 2)
print(map.containsKey("first")); // true
print(map.containsValue("C")); // false
map.remove("first");
print(map); // {1: false, true: 2}
map.forEach(f);
/*
key = 1, value = false
key = true, value = 2
*/
var list = ["1", "2", "3"];
print(list.asMap()); // {0: 1, 1: 2, 2: 3}
}
void f(key, value) {
print("key = $key, value = $value");
}
Dynamic
void main() {
var a;
a = 10;
a = "Dart";
dynamic b = 20;
b = "JavaScript";
var list = new List<dynamic>();
list.add(1);
list.add("hello");
list.add(true);
print(list); // [1, hello, true]
}
运算符
+、-、*、/、~/、%
关系运算符
==、!=、>、<、>=、<=
逻辑运算符
赋值运算符
- 基础
=、??==
- 复合
+=、-=、*=、/=、%=、~/=
条件表达式
-三目运算符:condition?expr1:expr2
-??运算符:expr1??expr2
语句
1 条件语句:if
if
if … else if
if … else if … else
void main() {
int score = 100;
if(score >= 90) {
if(score == 100) {
print("完美"); // 完美
} else {
print("优秀");
}
} else if (score > 60) {
print("良好");
} else if (score == 60) {
print("及格");
} else {
print("不及格");
}
}
2 循环语句
for
for … in
void main() {
var list = [1, 2, 3, 4, 5];
for (var idx = 0; idx < list.length; idx++) {
print(list[idx]);
}
for (var item in list) {
print(item);
}
}
while语句
while语句
do … while语句
加:break&continue
void main() {
int count = 0;
while(count < 5) {
print(count++);
}
print("-------------$count--------------"); // -------------5--------------
do {
print(count--);
} while (count > 0 && count < 5);
}
switch … case语句
比较类型:num、String、编译期常量、对象、枚举
非空case必须有一个break
default处理默认情况
continue跳转标签
void main() {
String language = "OC";
switch(language) {
Test:
case "Dart":
print(language);
break;
case "OC":
print(language); // OC OC
continue Test;
}
}
Function
方法也是对象,并且具有类型Function
返回值类型、参数类型都可以省略
箭头语法:
=>expr是{return expr;}缩写,只适用于一个表式
方法都有返回值,如果没有指定,默认return null
1 可选参数
① 可选命名参数{1, 2, 3}
② 可选位置参数[1, 2, 3]
③ 如果存在具体参数,可选参数声明,必须在参数后面
void main(List args) {
print(args); // []
print(getPerson("张三", 18)); // name=张三, age=18
print(getGirl(18, 85)); // age=18, weight=85
printPerson("李四"); // name=李四, age=null, gender=null
printPerson("李四", age: 20, gender: "哈哈"); // name=李四, age=20, gender=哈哈
printGirl("小桃子"); // name=小桃子, age=null, gender=null
printGirl("小桃子", 15, "啦啦啦"); // name=小桃子, age=15, gender=啦啦啦
}
String getPerson(String name, int age) {
return "name=$name, age=$age";
}
getGirl(age, weight) => "age=$age, weight=$weight";
printPerson(String name, {int age, String gender}) { // 可选命名参数
print("name=$name, age=$age, gender=$gender");
}
printGirl(String name, [int age, String gender]) { // 可选命名参数
print("name=$name, age=$age, gender=$gender");
}
2 默认参数
使用 = 在可选参数
3 方法对象
void main() {
Function func = printHello;
func();
var list = [1, 2, 3, 4];
list.forEach(print);
var list1 = ["h", "e", "l", "l", "o"];
print(listTimes(list1, times)); // [hhh, eee, lll, lll, ooo]
}
void printHello() {
print("Hello");
}
List listTimes(List list, String times(str)) {
for(var idx = 0; idx < list.length; idx++) {
list[idx] = times(list[idx]);
}
return list;
}
String times(str) {
return str*3;
}
4匿名方法
可赋值给变量,通过变量进行调用
可在其他方法中直接调用或传递给其他方法
void main(List<String> args) {
var func = (str) {
print("Hello - $str"); // Hello - 30
};
func(30);
(() {
print("anonymous_test"); // anonymous_test
})();
var list = ["h", "e", "l", "l", "o"];
var testList = listTime(list, (list){ return list * 3; });
print(testList); // [hhh, eee, lll, lll, ooo]
}
List listTime(List list, String times(str)) {
for(var idx = 0; idx < list.length; idx++) {
list[idx] = times(list[idx]);
}
return list;
}
5 闭包
闭包是一个方法(对象)
闭包定义在其他方法内部
闭包能够访问外部方法内的局部变量,并持有其状态
void main() {
var func = a();
func(); // 0
func(); // 1
func(); // 2
func(); // 3
func(); // 4
var func1 = b();
func1(); // 10
func1(); // 11
func1(); // 12
}
a () {
int count = 0;
printCount() {
print(count++);
}
return printCount;
}
b() {
int num = 10;
return () {
print(num++);
};
}
问题集锦
Q1:final&const区别
Q2:int、double都继承自num
推荐阅读
Dart开始入门 Dart 语法预览
|
请发表评论