zoukankan      html  css  js  c++  java
  • dart语言入门(一)

    dart 目前可用于全平台开发,是一门面向对象的编程语言;
    应用场景;
    web开发
    跨平台移动应用开发(flutter)
    脚本或者服务端开发

    语言入门

    • 数据类型
    变量:
        使用 var声明变量,可赋予不同类型的值
        未初始化时,默认值为 null
        使用 final 声明一个只能赋值一次的变量
    常量:
        使用 const 声明常量
        使用 const 声明的必须是编译器常量
    

    区别:
    finnal:表示单一赋值,final 变量或字段必须初始化,一旦赋值,就不能改变 final 变量的值,final 修饰变量
    const:修饰值,可以在创建集合的时候使用它,const 意味着对象的整个深度状态可以在编译时完全确定,并且对象将被冻结并完全不可变
    - 数值型-Number
    int :整形
    double:浮点型
    运算符:+,-,*,/,~/(取整),% 常用属性:isNaN,isEven,isOdd 等 常用方法:abs(),round(),floor(),ceil(),toInt(),toDouble()
    - 字符串x-String
    使用单引号,双引号创建字符串, 使用三引号创建多行字符串 差值表达式:"a + b = ${a+b}"或者"a = $a" 常用属性:length,isEmpty,isNotEmpty 常用方法:contains(),subString(),startsWith(),endsWidth(),indexOf(),lastIndexOf(),split(),
    - 布尔型-Boolean
    此值不是 false 就是true
    - 列表-List
    常用方法:length,add(),insert(下标,元素),remove(元素),clear(),indexOf(),sort(),sublist(开始截取的下标)
    - 键值对-Map
    使用方法如 list
    - Runes,Symbols

    • 运算符

      • 算术运算符
      • 逻辑运算符
      • 关系运算符
      • 赋值运算符:=,??=(左边变量无值,取右边,有值,取左边)
      • 条件表达式:三目运算符,??运算符(左边有值,取右边,无值,取左边)
    • 控制流

      • 条件语句
      • for循环
      • while||do while
      • break,continue
      • switch语句
    • 方法

      • 对象也是方法,并且有具体类型Function
      • 返回值类型,参数类型都可以省略
      • 箭头语法:=>expr 是{returnexpr;}缩写,只适用于一个表达式
      • 方法都有返回值,如果没有指定,默认 return null最后一局执行
    可选参数:[],或者{}
        printData1(String name,{int age,String gender}){
            print("name=$name,age=$age,gender=$gender");
        }
        printData1('李四',age:12,gender:'fafas');
    
        printData2(String name,[int age,String gender]){
            print("name=$name,age=$age,gender=$gender");
        }
        printData2('张三',12,'fafas');
    可选参数必须放在必须的参数的后面;
    指定默认参数值:
        printData1(String name,{int age = 10,String sex = '男'}){
            print("name=$name,age=$age,gender=$gender");
        }
    

    方法对象

    • 方法可作为对象赋值给其他变量
    void main() {
        Function func = printHello;
        func();
    }
    void printHello(){
        print('hello');
    }
    
    • 方法可作为参数传递给其他方法
    void main(){
        List list = [1,'dafasd',3,'fafasdf'];
        list.forEach(f);
        var list1 = ["h","e","l","l","o"];
        print(listTimes(list1,times));//[hhh, eee, lll, lll, ooo]
    }
    void f(e){
        print(e);   
    }
    String times(str){
        return str * 3;
    }
    
    List listTimes(List list,String f(str)){
        for (var i = 0; i < list.length; i++) {
            list[i] = f(list[i]);
        }
        return list;
    }
    
    • 匿名方法
      • 可赋值给变量,通过变量进行调用
      ((){
          print('test');
      })();
      
      • 可在其他方法中直接调用或者传递给其他方法
      void main() {
          List list1 = ['h','e','l','l','o'];
          var result = listTimes(list1, (str){
              return str * 3;
          });
          print(result);
      }
      
      
      List listTimes(List list, String times(str)) {
          for (var i = 0; i < list.length; i++) {
              list[i] = times(list[i]);
          }
          return list;
      }
      
      

    匿名方法不能直接定义在 main 方法外面

    • 闭包

      • 闭包是一个方法(对象)
      • 闭包定义在其他方法的内部
      • 闭包能够访问外部方法内的局部变量,并持有其状态
    • 构造函数

    通过创建一个和类名相同的函数,声明一个构造函数(除此之外还有命名构造函数)
    构造函数通常用来创建一个类的实例

    class Point {
        num x, y;
    
        Point(num x, num y) {
            this.x = x;
            this.y = y;
        }
        //或者
        Point(this.x,this.y);
    }
    
    • 默认的构造函数

      如果没有生命构造函数,将默认声明一个构造函数,而且将调用父类的无参构造函数

    • 构造函数不能继承

      子类不能从父类继承构造函数.声明的无参构造函数的子类只有默认的构造函数,也就是说没有参数,没有名字

    • 命名构造函数

      通过命名购销函数实现一个类可以有多个构造函数,或者提供正对性的构造函数;

      class Point{
          num x,y;
          Point(this.x,this.y);
          Point.origin(){
          x=0;
          y=0;
      }
      }
      

      构造函数是不能继承的,所以子类是不能继承父类的命名构造函数的,如果希望使用父类中的构造函数创建子类的实例,就必须在子类中实现父类的构造函数

    • 调用父类非默认构造函数

      默认,子类的构造函数调用父类的非命名,无参构造函数.父类的构造函数在构造函数体之前调用,如果有初始化列表,初始化在父类构造函数之前执行,总之,执行顺序如下;

      1.初始化列表

      2.父类的无参构造函数

      3.当前类的无参构造函数

      class Person {
          String firstName;
          Person.fromJson(Map data){
              print('in person');
          }
      }
      class Employee extends Person {
          Employee.formJson(Map data) :super.fromJson(data){
              print('in Employee');
          }
      }
      main函数:var emp =new Employee.formJson({'data':'dadfds'});
      
  • 相关阅读:
    Flex实现页面多态state对象
    Flex精华摘要使用AS脚本
    JMeter最常用的三种类型的压力测试
    工作流简介
    Android模拟器使用模拟SD卡
    交大研究生,就一个字牛
    Google code上利用SVN托管代码
    主流浏览器内核概览
    Android开发之ADB使用
    Redis入门教程
  • 原文地址:https://www.cnblogs.com/D-Y-W/p/10577739.html
Copyright © 2011-2022 走看看