• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Dart语言

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

简介

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

2 IDEs and editors(https://www.dartlang.org/tools)

运行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 语法预览


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
dart语言学习4发布时间:2022-07-13
下一篇:
要搞事?Google 宣布重启 Dart 编程语言发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap