美文网首页
Dart编程语言入门

Dart编程语言入门

作者: Amok校长 | 来源:发表于2019-02-25 23:44 被阅读0次

    应用场景:

    1. Web开发
    2. 跨平台移动应用开发(flutter)
    3. 脚本或服务端开发

    开发环境搭建:

    SDK安装:

    Window平台: choco install dart-sdk

    Linux平台: sudo apt-get install dart

    Mac平台: brew tap dart-lang/dart 然后 brew install dart --devel

    node: 在mac上我进行手动安装的

    IDE安装:

    node: 我用的vscode,安装拓展Dart2.22.3和Code Runner

    Dart语言入门

    dart一切都是对象

    Hello World

    1. main方法是固定写法,它是程序入口
    2. print方法可以在控制台输出内容
    3. 通过文件选择run,可以运行文件中的main方法
    //Main 程序入口
    void main(){
        //控制台打印
        print("Hello World!");
    }
    

    变量

    1. 使用var声明变量,可复制不同类型的值

    2. 未初始化时,默认为null

    3. 使用final声明一个只能赋值一次的变量

          var a;
          print(a);
      
          a = 10;
          print(a);
      
          a = 'Hello Dart';
          print(a);
      
          var b = 20;
          print(b);
      
          final c = 30;
          //c = "Dart";//给c赋值打印会报错
      

    常量

    1. 使用const声明常量

       const d = 20;
          // d = 50;//给d赋值打印会报错
      

    数据类型

    内置类型:

    1. 数值型-Number

      ​ 整形-Int

      ​ 浮点型-double

    2. 字符串-String

    3. 布尔型-Boolean

    4. 列表-List

    5. 键值对-Map

    6. Runes、Symbols(不常用)

    数值型操作:

    1. 运算符: +、-、*、/、~/取整、%取余

    2. 常用属性: isNaN是否是非数字、isEven、isOdd等

    3. 常用方法: abs()、round()、floor()、ceil()、toInt()、toDouble()

        num aa = 10;
        aa = 12.5;
      
        int bb = 20;
        // bb = 20.5;
      
        double cc = 10.5;
        cc = 30;
        print(bb + cc);
        print(bb - cc);
        print(bb * cc);
        print(bb / cc);
        print(bb ~/ cc);//取整
        print(bb % cc);// 取余
      
        print(bb.isEven);//是否是偶数
        print(bb.isOdd);//是否是奇数
      
        int dd = -100;
        print(dd.abs());//取绝对值
      
        double ee = 10.5;
        print(ee.round());//四舍五入
        print(ee.floor());//不大于ee的最接近ee的整数
        print(ee.ceil());//不小于ee的最接近ee的整数
      
        print(bb.toDouble());//整形转浮点型
        print(ee.toInt());//浮点型转整形
      

    字符串-String

    1. 使用单引号,双引号创建字符串
    2. 使用三个引号或双引号创建多行字符串
    3. 使用r创建原始raw字符串
      String str1 = 'hello';// "" 
      String str2 = ''' hello
                        Dart''';//'''
      print(str2);
      String str3 = 'hello \n Dart';
      print(str3);
    
      String str4 = r'hello \n Dart';//打印原始内容,不转意
      print(str4);
    

    字符串操作:

    1. 运算符:+、*、==、[]
    2. 插值表达式: ${expression}
    3. 常用属性: length、isEmpty、isNotEmpty
      String str5 = "This is my favorite language";
      print(str5 + "New");//加
      print(str5 * 5);//乘
      print(str4 == str5);//判断两个str3和str4是否相等
      print(str5[0]);//输出:0
    
      int aaa = 1;
      int bbb = 2;
      print("aaa + bbb = ${aaa + bbb}");//(插值表达式)输出:aaa + bbb = 3
    
      print(str5.length);//str5的长度
      print(str5.isEmpty);//判断str5是否为空
      print(str5.isNotEmpty);//判断是否不为空
    

    字符串常用方法:

    1. contains(),subString()
    2. startsWith(),endsWith()
    3. indexOf(),lastIndexOf() //取字符串下表
    4. toLowerCase(),toUpperCase() //大小写转换
    5. trim(),trimLeft(),trimRight() //截取前后的空格
    6. split(),replaceXXX() //分割字符串 + 替换
      print(str5.contains("Tiis"));//str5是否包含"This"字符
      print(str5.substring(0,3));//截取str5第0个字符到第3个字符
      print(str5.startsWith("a"));//str5是否以字母a开头
      print(str5.endsWith("e"));//str5是否以字母e结尾
    
      var list = str5.split(" ");//str5以字符空格分割成数组
      print(list);//输出: [This, is, my, favorite, language]
      
      print(str5.replaceAll("This","That"));//将str5中的This字符替换为That
    

    布尔型-bool

    1. 使用bool表示布尔类型
    2. 布尔值只有true和false
      bool isTrue = true;
      bool isFalse = false;
      print("Hello".isEmpty);
    

    List( 数组)创建

    1. 创建List: var list = [1,2,3];
    2. 创建不可变的List: var list = const[1,2,3];
    3. 构造创建:var list = new List();
      ///List数组
      var list1 = [1,"Dart",true];
      print(list1);
      print(list1[1]);
      list[1] = "Hello";
      print(list1);
    
      var list2 = const [1,2,3];
      // list2[0] = 5;
    
      var list3 = new List();//list的创建
    

    List-常用操作

    1. [],length
    2. add(),insert()
    3. remove(),clear()
    4. indexOf(),lastIndexOf()
    5. sort(),sublist()
    6. shuffle()数组打乱顺序,asMap(),forEach()
      var list4 = ["hello","dart"];
      print(list4.length);//数组元素个数
      list4.add("new");//数组添加元素
      print(list4);
      list4.insert(1,"java");//插入java字符到数组1位置
      print(list4);
      list4.remove("java");//数组移除java字符
      print(list4);
    
      // list4.clear();//数组清空元素
      // print(list4);
    
      print(list4.indexOf("dart"));//如果找到的话,返回元素所在的位置;找不到的话,会返回-1
      list4.sort();//排序
      print(list4);
    
      print(list4.sublist(1));//截取从第二个元素开始
      list4.forEach(print);//对数组的每个元素执行一次提供的函数(传入函数作为参数)
    

    Map-创建

    1. 创建Map:var language = {'first':'Dart','second':'Java'};

    2. 创建不可变Map:var language = const{'first':'Dart','second':'Java'};

    3. 构造创建: var language = new Map();

    4.   var map1 = {"first":"dart",1:true};
        print(map1);
        print(map1["first"]);
        print(map1[1]);
        map1[1] =false;
        print(map1);
           
        var map2 =const{1:"Dart",2:"java"};
        // map2[1] = "python";//不能给不可变Map赋值
           
        var map3 = new Map()
      

    Map-常用操作

    1. [],length
    2. isEmpty(),isNotEmpty()
    3. Keys,values
    4. containsKey(),containsValue()
    5. remove()
    6. forEach()
      void main() {
        var map = {"first":"dart","second":"java","third":"python"};
        print(map.length);
        // map.isEmpty;
        print(map.keys);//打印所有map的key
        print(map.values);//打印所有map的值
        print(map.containsKey("first"));//map是否包含某个key
        print(map.containsValue("C"));//map是否包含某个值
        map.remove("third");//移除third对应的值
        print(map);
        map.forEach(f);//给每个值增加f方法
        var listMap = ["1","2","3"];//list转Map
        print(listMap.asMap());
      }
      void f(key,value){
        print("key=$key,value=$value");
      }
      

    dynamic

    /// dynamic 指任意类型
      dynamic bcde = 20;
      bcde = "JavaScript";
    
      var listW =new List<dynamic>();//泛型
      listW.add(1);
      listW.add("hello");
      listW.add(true);
      print(listW);
    

    运算符

    算术运算符

    1. 加减乘除: +,-,*,/,~/,%
    2. 递增递减: ++var,var++,--var,var--

    关系运算符

    1. 运算符: ==,!=,>,<,>=,<=
    2. 判断内容是否相同使用==

    逻辑运算符

    1. 运算符: !,&&,||
    2. 针对布尔类型运算
    /// 逻辑运算符
       bool isTrue = true;
       print(!isTrue);
    
       bool isFalse =false;
       print(isTrue && isFalse);
       print(isTrue || isFalse);
    
       String str = "";
       print(!str.isEmpty);
    

    赋值运算符

    1. 基础运算符: =,??=
    2. 复合运算符: +=,-=,*=,/=,%=,~/=
    /// 赋值运算符
       double acc = 10;
       int bcc;
       bcc ??= 10;//如果bcc值为空,则bcc=10
       print(bcc);
      
       acc /= 2;//复合运算的一个例子
       print(acc);
    

    条件表达式

    1. 三目运算符: condition ? expr1 : expr2
    2. ??运算符: expr1 ?? expr2
       int gender = 0;
       String strcc = gender == 0 ? "Male=$gender" : "Female=$gender";//三目运算符
       print(strcc);
    
       String aee ;
       String bee = "Java";
       String cee = aee ?? bee;//如果aee为空就等于bee
       print(cee);
    

    控制流语句

    条件语句

    1. if语句
    2. if...else if语句
    3. if...else if…else语句
    int score = 90;
    if (score >= 90) {
      print("优秀");
    }else if (score > 60) {
      print("良好");
    }else if (score == 60) {
      print("及格");
    }else {
      print("不及格");
    }
    

    循环语句

    1. for循环
    2. for...in循环
    var listff = [1,2,3,4,5];
    for (var i = 0; i < listff.length; i++) {
      print(listff[i]);
    }
    for (var item in listff) {
      print(item);
    }
    

    while语句

    1. while循环
    2. do...while循环
    /// while语句
    int countff = 0;
    while (countff<5) {
      print(countff ++);
    }
    
    print("--$countff----");
    
    do {//先执行do语句再执行while里面的判断
      print(countff--);
    } while (countff > 0 && countff<5);
    

    break和continue

    1. 终止循环: break
    2. 跳出当前循环: continue
    var listgg = [1,2,3];
    for (var item in listgg) {
      if (item == 2) {
        //break;
        continue;//跳出当前循环,继续执行下个循环
      }
      print(item);
    }
    print("-------------");
    for (var item1 in listgg) {
      for (var item2 in listgg) {
        if (item2==5) {
          break;//break是终止它所在的for循环(离它最近的for循环)
        }
        print(item2);
      }
    }
    

    switch…case语句

    1. 比较类型: num,String,编译期常量,对象,枚举
    2. 非空case必须有一个break
    3. default处理默认情况
    4. continue跳转标签
    /// switch...case语句
    String languagegg = "Dart";
    switch (languagegg) {
      case "Dart":
        print("Dart is my favorite");
        break;
      case "Java":
        print("Java is my favorite");
        break;
      case "Python":
        print("Python is my favorite");
        break;
      default:
        print("None");
    }
    
    switch (languagegg) {
      case "Dart":
        print("Dart is my favorite");
        continue Testgg;//跳转到Testgg标签去执行操作
        // break;
      case "Java":
        print("Java is my favorite");
        break;
      Testgg:
      case "Python":
        print("Python is my favorite");
        break;
      default:
        print("None");
    }
    

    方法

    方法定义

    返回类型 方法名 (参数1, 参数2,....) {

    ​ 方法体...

    ​ return 返回值

    }

    void main() {
    /// 方法
      print(getPerson("张三", 18)); 
    }
    
    void f(key,value){
      print("key=$key,value=$value");
    }
    

    方法特性

    1. 方法也是对象,并且有具体类型Function
    2. 返回值类型、参数类型都可以省略
    3. 箭头语法: =>expr 是{return expr;}缩写.只适用于一个表达式
    4. 方法都有返回值.如果没有指定,默认return null最后一句执行
    String getPerson(String name,int age){
      return "name = $name,age=$age";
    }
    getPersonJX(name,age) => "name=$name,age=$age";//箭头函数简写上面函数
    
    int gender = 1;
    getPrentJX2(name,age) => gender == 1 ? "name=$name,age=$age" : "test";//箭头函数加表达式
    
    void canNotGetPerson(String name,int age){//无返回值类型
      print("name=$name,age=$age");
    }
    printPerson(name,age){//方法简写
      print("name=$name,age=$age");
    }
    

    可选参数

    1. 可选命名参数:{param1,param2,...}
    2. 可选位置参数:[param1,param2,...]
    3. 如果存在具体参数,可选参数声明,必须在参数后面
    void main() {
    //可选命名参数
      newPerson("小强");
      newPerson("小红",age:20);
      newPerson("小红",age:20,gender: "Male");
      //可选位置参数
      newPerson2("小绿",18,"Male");
    }
    
    newPerson(String name,{int age,String gender}){//基于命名可选参数(多用)
      print("name=$name,age=$age,gender=$gender");
    }
    newPerson2(String name,[int age,String gender]){//基于位置可选参数
      print("name=$name,age=$age,gender=$gender");
    }
    

    默认参数值

    1. 使用 = 在可选参数指定默认值
    2. 默认值只能是编译时常量
    newDefault(String name,{int age,String gender = "Female"}){//默认参数值
      print("name=$name,age=$age,gender=$gender");
    }
    

    方法对象

    1. 方法可以作为对象赋值给其他变量
    2. 方法可作为参数传递给其它方法
    void main() {
    //方法作为对象
      var func = printHello;
      func();
      Function func2 = printHello;
      func2();
    
      //方法作为函数参数使用
      var listhh = [1,2,3,4];
      listhh.forEach(print);
    
      var listii = ["h","e","l","l","0"];
      print(listTimes(listii,times));
    }
    
    void printHello() {
      print("hello");
    }
    
    List listTimes(List list,String t(str)){
      for (var i = 0; i < list.length; i++) {
        list[i] =t(list[i]);
      }
      return list;
    }
    String times(str){
      return str*3;
    }
    

    匿名方法

    (参数1,参数2,...) {

    ​ 方法体...

    ​ return 返回值

    }

    匿名方法特性

    1. 可赋值给变量,通过变量进行调用
    2. 可在其它方法中直接调用或传递给其它方法
    void main() { 
      //匿名函数
      var funcii = (str){
        print("hello---$str");
      };
      funcii(30);
    
      // ((){
      //   print("Test");
      // })();
    
      var listll = ["h","e","l","l","o"];
      var result = listTimes(listll, (str){return str * 3;});
      print(result);
    }
    
    List listTimes(List list,String t(str)){
      for (var i = 0; i < list.length; i++) {
        list[i] =t(list[i]);
      }
      return list;
    }
    

    闭包

    1. 闭包是一个方法(对象)
    2. 闭包定义在其它方法内部
    3. 闭包能够访问外部方法内的局部变量,并持有其状态
    void main() {
    ///闭包
      var funcmm =ann();
      funcmm();
      funcmm();
      funcmm();
      funcmm();
    }
    
    amm(){
      int count = 0;
    
      printCount(){
        print(count++);
      }
      return printCount;
    }
    ann(){
      int count = 0;
    
      // printCount(){
      //   print(count++);
      // }
      return (){
        print(count++);
      };
    }
    

    相关文章

      网友评论

          本文标题:Dart编程语言入门

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