Dart语言基础特性

115 阅读3分钟
原文链接: www.jianshu.com

概述

  • Dart是Google发布的开源语言
  • Dart是面向对象编程语言
  • Dart目前可用于全平台开发(Web开发,跨平台Flutter开发,脚本或服务端开发)

变量

  1. 使用var观景子进行申明,可赋予不同类型的值
    '''
    var a = 10;
    print(a); //10
    var b = "str";
    print(b); //str
    '''

2.未被初始化,默认值为null
'''
var c ;
print(c);//null
'''

  1. final申明变量只能被赋值一次
    '''
    final d = "yxjie";
    // d=10; //编译器报错
    // d="str";//编译器报错
    '''

常量

使用const申明的常量,为编译期常量
'''
const a = 10 ; //不可变了
'''

数据类型(内置数据类型)

  • 数值型(Number)【整型:int 浮点型:double】
数值型操作

1.运算符:+,-,*,/,~/(整除),%
2.常用属性:isNaN,isEvent (是否是偶数),isOdd(是否是奇数)等
3.常用方法:abs(),round(),toInt(),toDouble()

  • 字符串(String) 注:字符串内容比较使用== 【与java或Kotlin不一样】,也是支持插值表达式的

  • 布尔型 (Boolean)

  • 列表 (List)
    '''
    //三种创建方式
    var list=[1,2,3];
    var list2=const[1,'yxjie',true];
    var list3 = new List();
    list3.add("hahah");
    list3.insert(0, "yxjie");
    list3.remove("yxjie");
    list3.clear();
    list2.forEach(print);
    '''

  • 键值对(Map)
    '''
    void main(){
    var map={1:"Dart",2:"Java",3:"Kotlin",4:4};
    var map2=const{1:"Dart",2:"Java",3:"Kotlin",4:4};
    var map3=new Map();
    map3[1]="hha";
    map3["2"]="lalal";
    print(map3.containsKey(2));
    print(map);
    print(map.length);
    print(map.containsKey(1));
    print(map.containsValue("java"));

    map3.forEach(pf); }

void pf(key,value){
//差值表达式
print("key=key,value=value");
}
'''

for语句

'''
var list = [1,2,3,4];
for(var i = 0;i < list.length;i++){
print(i);
}

print('=====');

for(var item in list){
print(item);
}
'''

switch...case语句

  • 比较类型:num,String,编译器常量,对象以及枚举

  • 非空case必须有个break

  • default处理默认条件

  • continue跳转制定标签
    '''
    var language = "Kotlin";

    switch (language) {
    D:
    case "java":
    print("java---");
    break;

    case "Kotlin":
    print("Kotlin---");
    continue D;
    default:
    print("Dart");
    }

    // 运行结果
    //Kotlin---
    //java---
    '''

方法

方法特性

  • 方法也是对象且类型为Fuction
  • 返回值类型,参数类型都可省略(js类似)
  • 箭头语法:=> a 是{return a},只支持一个表达式
  • 方法都有返回值,如不指定,默认返回null
    '''

//标准定义
void getPerson(String name,int age){
print("name=$name,age=$age");
}

// 返回值参数类型都可以省略
getPerson2(name,age){
return "name=$name,age=$age";
}

// 箭头函数
getPerson3(name,age)=>"name=$name,age=$age";
'''

可选参数

  • 可选命名参数:{param1,param2,...}

  • 可选位置参数:[param1,param2,...]
    '''
    void main(){
    getPerson("Yxjie");
    getPerson("yxjie",age: 27);
    //输出结果
    //name=Yxjie,age=null
    //name=yxjie,age=2

    getPerson2("Jerry");
    getPerson2("jerry",18);
    getPerson2("Jerry",18,"boy");
    //运行结果
    //name=Jerry,age=null,gender=null
    //name=jerry,age=18,gender=null
    //name=Jerry,age=18,gender=boy
    }

getPerson(name,{age}){
print("name=$name,age=$age");
}

getPerson2(name,[age,gender])=> print("name=$name,age=$age,gender=$gender"); '''

默认参数

  • 使用= 给参数设置默认值(与Kotlin类似)
  • 默认参数值只能是编译时常量
    '''
    void main(){
    getPerson("yxjie");
    getPerson("yxjie",age: 28);
    //运行结果
    //name=yxjie,age=18
    //name=yxjie,age=28
    }

getPerson(name,{age=18}){
print("name=$name,age=$age");
}
'''

方法对象

  • 方法可作为对象赋值给其他变量

  • 方法可作为参数传递给其他方法
    '''
    void main(){
    var fun=sayHello;
    fun(); //say hello!!!

    //方法作为参数传递给另一个方法
    var list=["Java","Kotlin","Dart","Python"];
    list.forEach(print);
    }

sayHello()=>print("say hello!!!"); '''

匿名方法特性

  • 可赋值给变量,通过变量进行调用

  • 可在其他方法中直接调用
    '''
    void main() {
    var a = (s) {
    print("hello,$s");
    };
    a("Yxjie"); //hello,Yxjie

    var list = ["a", "b", "c"]; print(listAddPre(list, addPre)); //[new a, new b, new c]

    print(listAddPre(list, (s) {
    return s * 3;
    }));//[new anew anew a, new bnew bnew b, new cnew cnew c]
    }

addPre(s) => "new " + s;

listAddPre(List list, addPre(s)) {
for (var i = 0; i < list.length; i++) {
list[i] = addPre(list[i]);
}
return list;
}
'''

闭包

  • 闭包是一个方法对象
  • 闭包定义在其他方法内部
  • 闭包能够访问外部方法局部变量,并持有他的状态
    '''
    void main(){
    var fun=a();//与方法对象略微不一样
    fun();//0
    fun();//1
    }

a(){ var count=0;

printCount(){
print(count++);
}
return printCount;
}
'''

后续会持续更新Dart面向对象编程以及Flutter相关文章