zoukankan      html  css  js  c++  java
  • Dart语言基础

      dart 语言是一款谷歌出的语言,代码风格更像是融合了 java 及 javascript,所以学习的难度并不是很大;

      且又是 flutter 框架中的语言,所以还是有学习的必要

      dart 安装:打开 dart 官网

        

         

       我们按照安装步骤下载完了,然后我们检测是否下载成功;在终端输入命令:dart --version

      如果出了版本号就证明我们下载成功了

      如果我们想在使用 dart 语言的话,建议使用 vsCode 的编辑器,下载插件 dart  code runner 

      dart 文件,是以 dart 结尾的文件

      1. 简单的输入语法,通过 main 来暴露,通过 print 来打印输出

      main(){ print('hello dart') };      // 有返回值的写法

      2. 所有的语句后面都要加分号,否则就会报错

      void main(){ print('hello dart') };   //  没有返回值的写法

      3. 注释的方法

      //   ///   /**/

      4. 声明变量的方式(从这里就体现出了dart语言的强大,可以采用 java 的强类型语言,也可以采用 JavaScript 的弱类型语言)

      弱类型语言的命名方式:var a = 'hello dart'  // 那么 a 的类型就是字符串

      强类型语言的命名方式:String a = 'hello dart'  // a 的类型必须是字符串

      print()  拥有打印的功能,可以进行多次打印输出

      5. 数字类型解析

      num a = 12;  //  数字定义,整形,小数型都可以

      int a = 12;   // 整形数字的定义

      double a = 12.33  // 必须是小数型

      6. dart 的命名规则

        1)变量名称可以由数字,字母,下划线和美元符($)组成

        2)注意:标识符开头不能是数字

        3)标识符不能是保留字和关键字

        4)变量的名字是区分大小写的如:age 和 Age 是不同的变量,在实际开发中尽量不要出现这种情况,尽管没有错

        5)标识符(变量名称)一定要见名思意:变量名建议用名词,方法名建议用动词

      7. 常量:永远不会改变的量

        关键词:final 或者 const 

        他们量都是,如果对变量进行在次赋值就会报错,final 还可以定义方法

      8. 字符串的拼接

        String str = '你好';

        String val = 'dart';

        print('${str} ${val}');  // 细心的朋友已经发现了,我中间有个空格,这个空格会被保留的哦

        // 其实也可以不带 {} ,但是并不适用所有的场景,带上{}就可以避免很多问题

      9. 布尔值的定义

        bool a = true / false  // 布尔值只能是 true 或者 false

      10. 运算符

        +  -  *  /  %    // 与 js 一致

      11. 条件运算

        if(){}  if(){}else if(){}  switch(){ case: 内容; break; }  // 与 js 一致

      12. 定义数组

        弱类型语言的定义方式

          var arr = ['aaa','bbb','ccc'];

          print(arr);

          print(arr.length);

          print(arr[1])  // 通过下标来拿到具体的值

        强类型语言的定义方式

          List arr<String> = ['aaa','bbb','ccc'];  // List 定义数组,<> 里面对应数组的数据类型

         数组的方法:

          add();  // 在数组的结尾处添加元素

          addAll();  // 连接多个数组

          toList();    // 将其他类型转换成集合类型

          indexOf();  // 查看数组中是否包含某个元素

          remove();  // 删除具体的某个元素,在原有的 list 中进行更改

          removeAt();  // 删除具体元素通过索引,在原有的 list 中进行更改

          fillRange(start,end,value);  // 修改,开始下标,结束下标,要更改的值

          insert(1,value);  // 通过索引添加数据

          insertAll(1,['a','b']);  // 通过索引插入多条数据

          join(",");  // 以逗号分割,将数组转成字符串

        数组的属性

          length;  // 数组的长度

          isEmpty;  // 判断是否为空

          isNotEmpty;  // 判断不为空

          reserved;  // 翻转 

      13. 定义对象的方式

        var obj = {

          "name":"zhang"

        };  // 弱类型语言

        Map obj = {

          "name":"zhang"

        };  // 强类型语言

        取值方式:print(obj['name']);  // 只能采用这种方法

        对象的属性:

          keys;  // 属性

          values;  // 值

          isEmpty;  // 是否为空

          isNotEmpty;  // 是否不为空

        对象的方法

          addAll()  // 连接多个对象

          remove()  // 取消值,字符串

      14. 类型判断  通过 is 关键字来判断

        var str = 'hello dart';

        print(str is String)  // 返回值 true 是,返回值 false,代表不是

      15. 关系运算符

        ==   !=   >   <   >=   <=

      16. 逻辑运算发

        !   &&   ||

      17. 赋值运算符 +=  -=  *=  /=  ??=

        将一下 ??= 

        var b;

        b??=3;  // 如果 b 为空的话,将 3 附给 b

             // 如果 b 不为空的话,将值赋给 b

      18. 类型转换

        将字符串转换成数字

          String str = '123';

          var myNum = double.parse(str);  建议不要使用 int 

        将数字换成字符串

          var Num = 12;

          var str = Num.toString();

      19. 错误抛出

        如果由错误,通过 try catch 来抛出错误

      20. 判断是否为空

        判断字符串是否为空  str.isEmpty  

        判断数字是不是空   var Num == null;

        注意一个事项:print(0/0)  // 得到的结果为 isNaN

      21. a++  ++a 的区别

        a++   // 将 a 赋值给b,然后a在进行自加运算

        ++a  // 先进行 ++ 运算,再将 a 赋值给 b

      22. 循环数据

        List arr = [1,2,3,4,5,6,7];

        forEach 的使用 遍历

        arr.forEach((item)=>{

          print(item);

        })

        map 的使用,遍历加工

        arr.map((value)=>{

          return value * 2;

        })

        where 满足条件的使用

        arr.where((value)=>{

          return value > 5;

        })  

        any 集合里面有满足条件的就返回 true

        every 每一个都满足条件,返回 true,否则返回 false

      23. 方法的使用:

        在 main(){} 外定义的方法就是全局的方法

        方法的可选参数

          function fn (String name , [int age]){

            print('${name} ---- ${age}')

          } 

          fn('zhang',10);

        方法的命名参数

          function fn (String name, {int age, String sex = '男'}){

            print('${name} ---- ${age} ++++ ${sex}')

          }

          fn('zhang',age:20);

      24. 类的定义,对象的三大特点:封装,继承,多态,三个修饰符:public,private,protected

        通过 class 定义类

        class Person = {

          Person(){

            print('构造函数');

          }

          String name = 'zhangsan';

          int age = 20;

          run(){

            print('${name} ----- ${age}');

          };

        .}

        Person aa = new Person();

        aa.run();

        命名构造函数

        class Person = {

          String name;

          num age;

          Person.now(name,age){

            this.name = name;

            this.age = age;

          }

          run(){

            print('${name} ----- ${age}');

          }

        }

        Person aa = new Person.now('zhangsan',10);

        aa.run();

        私有属性

        dart 提供了私有属性,我们通过 _ 来定义,注意我们要这样用的话,我们要把他抽离成一个文件才可以,不然加了 _ 也是公有的

        01.dart

        class Person = {

          String _name;

          num age;

          Person(this._name,this.age);

          run(){

            print('${_name} ----- ${age}');

          }

        }

        这另一个文件中使用

        imiport '01.dart';

        Person aa = new Person('zhangsan',10);

        print(aa._name);  // 这样是不行的

        aa.run()    // 这样是可以的  

        class 中 get 和 set 的使用

        get 来获取内容

        set 来设置内容

        class Person = {

          String name;

          int age;

          Person(this.name,this.age);

          get work{

            return '${name} ----- ${age}';

          }

          set run(val){

            this.age = val;

          }

        }

        Person aa = new Person('zhang',12);

        aa.age = 3;

        print(aa.work);

        静态的属性使用,静态的方法,只能获取静态的属性;

        class Person = {

          static String name = 'zhangsan';

          static run(){

            print(name);

          }

        }

        Person a = new Person;

        print(Person.name);

        Person.run();

        dart 操作符

        ?   条件判断

        is  判断类型

        as  确定了类型,在执行方法

        ..   连缀写法,与链式写法差不多

        继承

        extends

        class Person{

          String name;

          num age;

          Person(this.name,this.age);

        }

        class a extends Person{

           a(String name, num age) : super(name, age);  // 如果父类有构造函数的话,这是要注意的

        }

        抽象类

        通过 abstract 来进行定义

        父类定义的方法让子类去实现它,但也可以拥有自己的方法和属性

        接口

        也是通过 abstract 来进行定义

        父类的接口提供的方式,只让子类去实现它

        absolute class Person{

          cat();

        }

        class a implements Person{
          @override
          cat(){
          
          }
        }
        小细节:
        一个类去写多个接口  class a implements A,B{}
        多元混入继承  class a with A,B {}   
          // 注意事项:A 不能继承其他类,A 不能有构造函数,B 也一样 ,如果 A 与 B 有相同的方法,B 会将 A 的方法覆盖掉
        泛型:类型检验
        async  将东西变为异步  await  将东西变为同步
        dart 库的使用
          1. 自定义的库
          2. dart 自带的库
          3. 第三方库,pub 包管理系统
        import 的使用
          import "01.dart" show 方法名  // 就引入这个方法
          import '02.dart' hide 方法名  // 就隐藏这个方法  
        
  • 相关阅读:
    react-当前的时:分:秒-每秒更新
    一键回顶部按钮 HTML+CSS+JS+jQuery完成
    JavaScript-浏览器的三种弹窗方式
    网页计算器简单实现加减乘除功能
    Oracle -- 记一次ADG库迁移过程小结 -- 上篇(ADG建库)
    expression解决IE6下固定定位的兼容
    Css攻克Selectors 一
    昨天开通了博客,希望自己争取早点写出东西
    Static关键字的用法
    XSHELL使用教程
  • 原文地址:https://www.cnblogs.com/shangjun6/p/12128287.html
Copyright © 2011-2022 走看看