dart语言入门(一)

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

语言入门

  • 数据类型
变量:
    使用 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);
}
  • 默认的构造函数this

    若是没有生命构造函数,将默认声明一个构造函数,并且将调用父类的无参构造函数code

  • 构造函数不能继承orm

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

  • 命名构造函数对象

    经过命名购销函数实现一个类能够有多个构造函数,或者提供正对性的构造函数;
    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'});
相关文章
相关标签/搜索