美文网首页
Dart语言入门

Dart语言入门

作者: 雾里看花六月天 | 来源:发表于2018-07-08 20:26 被阅读206次

    前言:

    1.Dart 语言在2011年10月由 Google 发布,并在2012年10月发布第一个里程碑版本 M1。Dart 作为一种结构化的Web开发语言,既让人感觉熟悉,又足够灵活。既适用于快速原型开发,又适用于组织大型的代码库。既可以用在桌面版和移动版的浏览器中,也可以在服务器端使用。总体上说,Dart 语言是感觉熟悉的并且符合程序员的直觉,特别是你已经掌握了 Java、JavaScript 等语言的话。

    2.Dart 是一门很特别的语言,(1)特性是可选类型。(2)Dart中的类和接口是统一的,类即接口,你可以继承一个类,也可以实现一个类(接口),自然也包含了良好的面向对象和并发编程的支持。

    3.编程语言并不是孤立存在的,Dart也是这样,他由语言规范、虚拟机、类库和工具等组成:
    SDK:SDK 包含 Dart VM、dart2js、Pub、库和工具。
    Dartium:内嵌 Dart VM 的 Chromium ,可以在浏览器中直接执行 dart 代码。
    Dart2js:将 Dart 代码编译为 JavaScript 的工具。
    Dart Editor:基于 Eclipse 的全功能 IDE,并包含以上所有工具。支持代码补全、代码导航、快速修正、重构、调试等功能。

    4.Dart 程序是从顶层的 main() 函数开始执行的。test.dart

    main() {
      print('hello world!');
    }
    

    在命令行中运行代码:

    dart hello.dart
    

    或者以检查模式运行:

    dart --checked hello.dart
    

    更多请参考《Dart的资源汇总》

    基本语法

    • Dart 中的所有东西都是对象,包括数字、函数等,它们都继承自 Object,并且对象的默认值都是 null(包括数字)。
    • Dart 中的语句以分号结束,并且不是选的。
    • Dart 的类型是可选的。Dart 语言本质上是动态类型语言,可以使用 var 声明变量,一个变量也可以被赋予不同类型的对象。但大多数情况,我们不会去改变一个变量的类型。在 Dart 中也可以使用类型来声明变量,就像在静态语言中做的那样。
    • Dart 支持顶层的变量和函数,就像 JavaScript 一样,它并不要求你像 Java 那样把所有的东西都放到类中。
    一、数据类型:

    1.介绍:Dart中所有的都是对象,涵盖数字,函数,他们都是继承Object,默认的值都是null。
    2.支持的类型:
    (1)Numbers,里面包含了int ,double
    (2)Strings
    (3)Booleans
    (4)List(也就是数组)
    (5)Maps
    3.简单的栗子:
    (1)数值:

    num a=5;
    num b=6;
    print(a+b);
    

    (2)字符串:

    //字符串赋值的时候,可以使用单引号,也可以使用双引号
      var exam1 = "Ok?";
      
      //如果使用的是双引号,可以内嵌单引号
      //当然,如果使用的是单引号,可以内嵌双引号,否则需要“\”转义
      //String exam2 = ‘It\’s ok!’;
      String exam2 = "It's ok!";
      
      //使用三个单引号或者双引号可以多行字符串赋值
      var exam3 = '''Dart Lang
      Hello,World!''';
      
      //在Dart中,拼接字符串用“+”,是可以的,但是不推荐这样使用,应该使用${param};
      var name = "nihao";
      var sex = "dsf";
      print("name: ${sex}");
    

    (3)布尔值:

    bool ishello=false;
     if(ishello){
      print("nihao");
     }else{
     print
    

    (4)容器:
    I、StringBuffer
    说明:StringBuffer并不是容器,按照官方的说法,StringBuffer可以特别高效的构建多个字符串,另外,以前的用的add方法已经改为write;

    StringBuffer sb = new StringBuffer();
    sb.write("hello StringBuffer ");
    sb ..write('nihao')..write('linghit');
    print(sb.toString());
    sb.clear();
    print(sb.toString());
    

    II、List
    列表,也就是常说的数组
    常见的添加、索引、删除等方法如下

    // 使用List的构造函数,也可以添加int参数,表示List固定长度
    //var vegetables = new List();
    
    var persons = ['小智', '明兄'];
    
    // 添加元素
    persons.add('小约妹');
    
    // 添加多个元素
    persons.addAll(['小莫', '小污']);
    
    // 获取List的长度
    print(persons.length);
    
    // 利用索引获取元素
    print(persons[0]);
    
    // 查找某个元素的索引号
    print(persons.indexOf('小莫'));
    
    // 利用索引号删除某个元素
    var appleIndex = persons.indexOf('小莫');
    persons.removeAt(appleIndex);
    // 删除所有的元素
    persons.clear();
    print(persons.length);
    
    你可以使用sort()对List的元素进行排序
    并且必须制定比较两个对象的函数,函数的返回值中
    return <0 表示小于,0表示相同,>0表示大于
    

    III、Set
    集合在Dart中无序,并且每个元素具有唯一性
    因为它是无序的,因此你不能像List那样用索引来访问元素
    这个就不细说了,吃瓜观众自己下去看看

    IV、Map

    映射,也有人称之为字典
    Map是一个无序的键值对容器

    // Map的声明  (以往不同的点)
    var initMap1 = {
        'one' : 1,
        'two' :2,
        'three' : 3
    };
    var initMap2 = new Map();
    // 指定键值对的参数类型
    var initMap3 = new Map<int, String>();
    
    print(initMap["one"]);
    

    V、迭代:

    //如果迭代的对象是容器,那么可以使用forEach或者for-in
    var diedai = [0, 1, 2];
    
    diedai.forEach((x) => print(x));//forEach的参数为Function
    
    for(var x in diedai) {
        print(x);
    }
    
    二、函数

    介绍:首先,函数也是对象,当没有指定返回值的时候,函数返回null
    I、简单应用

    String hello(String name)
    {
     return 'Hello $name!';
    

    Dart语言中,参数类型也是可选的

    String hello(name)
    {
     return 'Hello $name!';
    

    建议还是定义好,输入的类型以及输出的类型,方便后人阅读和调用

    如果函数只是简单的返回一个表达式的值,可以使用箭头语法 =>expr;
    它等价于{return expr;}

    hello(name) => 'Hello $name!';
    
    Dart中匿名函数的写法 (name)=>’Hello $name!’;
    于是可以如下定义匿名函数
    
    var  hello = (name)=>'Hello $name!';
    

    II、函数别名:

    typedef int Add(int a, int b);
    int Subtract(int a, int b) => a - b;
    
    void main()
    {
      print(Substract is Function);
      print(Substract is Add);
    }
    上面代码的命名感觉有点误导人的感觉
    如果两个函数的参数和返回值都一样
    那么is操作符就会返回true
    

    III、函数的闭包
    下面的代码有一点需要注意
    初始化变量的时候,参数对应的是函数的参数num n
    调用函数类型变量的时候,参数对应的是返回值中的参数num i

    Function makeSubstract(num n)
    {
      return (num i) => n - i;
    }
    
    void main()
    {
      var x = makeSubstract(5);
      print(x(2));
    }
    

    下面这段很有意思的代码
    需要反应过来一件事:Dart中函数也是对象
    下面的代码应该看得明白,之后会讲控制语句以及容器

    var callbacks = [];
    for (var i = 0; i < 3; i++) {
      // 在列表 callbacks 中添加一个函数对象,这个函数会记住 for 循环中当前 i 的值。
      callbacks.add(() => print('Save $i')); 
    }
    callbacks.forEach((c) => c()); // 分别输出 0 1 2
    

    IV、可选参数:
    Dart中支持两种可选参数:命名可选参数和位置可选参数
    但两种可选不能同时使用

    命名可选参数使用大括号{},默认值用冒号:
    位置可选参数使用方括号[],默认值用等号=

    FunX(a, {b, c:3, d:4, e})
    {
      print('$a $b $c $d $e');
    }
    

    在命名可选参数的函数中,大括号外的a为必填参数
    大括号内的参数可以指定0个或多个
    并且与顺序无关,在调用函数的时候需要指明参数名
    没有赋值的参数值为null

    FunY(a, [b, c=3, d=4, e])
    {
      print('$a $b $c $d $e');
    }
    

    在位置可选参数的函数中,大括号内的参数可以指定0个或多个
    在调用的时候参数值会依次按顺序赋值

    void main()
    {
      FunX(1, b:3, d:5);
      FunY(1, 3, 5);
    }
    

    三、操作符和流程语句:(和其他语言差不多)
    1、取整:

    int a = 3;
    int b = 2;
    print(a~/b);//输出1
    

    2、级联:
    当你要对一个单一的对象进行一系列的操作的时候
    可以使用级联操作符 ..

    class Person {
        String name;
        String sex;
        int age;
       setAge(num age) =>this.age=age;
    
        String toString() => 'Name:$name\nSex:$sex\nage:$age';
    }
    void main() {
     Person p = new Person();
      p ..name = 'Xq'
         ..sex="nan"
        ..setAge(20);
      print(p);
    }
    

    3、if语句没有多大的区别:
    If语句的判断条件为bool值,用法和大多语言一样

    if(2){
    print("true");
    }else{
    print("false");
    }
    

    switch:也差不多;swith的参数可以是num,或者String

    4.循环:

    for(); while(); do{}while();没太多变化
    

    5、异常处理:
    在Dart中可以抛出非空对象(不仅仅是Exception或Error)作为异常

    throw new ExpectException('值必须大于0!');
    throw '值必须大于0!';
    

    相关文章

      网友评论

          本文标题:Dart语言入门

          本文链接:https://www.haomeiwen.com/subject/euzouftx.html