美文网首页
基础学习

基础学习

作者: iPhone | 来源:发表于2019-06-26 10:34 被阅读0次

    1.第一个世界级程序

    main() {
      print('Hello world!');
      new TestClass().display();
    }
    

    Dart面向对象编程

    Dart是一种面向对象的语言。面向对象是一种遵循真实世界建模的软件开发范例。面向对象将程序视为通过称为方法的机制相互通信的对象集合。

    对象 - 对象是任何实体的实时表示。根据Grady Brooch,每个对象必须具有三个功能 -
    1.状态 - 由对象的属性描述。
    2.行为 - 描述对象的行为方式。
    3.标识 - 将对象与一组类似此类对象区分开的唯一值。
    类 - 类是创建对象的蓝图/模板,类封装了对象的数据。
    方法 - 方法促进对象之间的通信。

    class TestClass {   
       void display() {     
          print("Dart and Object Orientation"); 
       } 
        void testFuc(){
            print("和java语言是不是很像呀");
        }
    }  
    void main() {   
       TestClass c = new TestClass();   
       c.display();  
       new TestClass().testFuc();
    }
    

    数据类型

    void test1 (){ //数据默认类型
        int a ;
        print(a); // null
        String b ;
        print(b); // null
        var c ;
        print(c); // null
      }
    
    void test2(){ // 数据类型推断 , swift相同
        var a = 10;
        if (a is int) {
          print("int 类型");
        }
        var  b = "hello world";
        if (b is String) {
          print("string 类型");
        }
      }
    
    //数字类型
    var x = 123;
    var hex = 0xDEADBEEF;
    // 小数,则为双精度数
    var y = 1.199;
    var exponents = 1.42e5;
    从Dart 2.1开始,必要时整数文字会自动转换为双精度数:
    double z = 10; // 相当于 double z = 10.0.
    
    // String  to number
    void test3(){ // string to num
        // String 转为 int
        var one = int.parse('1');
        assert(one == 1);
        // String 转为 double
        var dl = double.parse("1.12");
        assert(dl == 1.12);
        // int 转为 String
        var str = 10.toString();
        // double 转为 String
        String dlStr = 3.14.toStringAsFixed(2);
        assert(dlStr == '3.14');
      }
    
      void test4(){ // 位运算
        var a = 3; // 0011
        var b = a << 1; // 0110
        print(b); // 6
    
        var c = 3 >> 1; // 0001
        print(c ); // 1
    
        var m = 128;
        var m1 = m << 3;
        print(m1);
    
        var n = 1;
        var n1 = n >> 1;
        print(n1);
      }
    
     void test5(){ // 文字数字是编译时常量。许多算术表达式也是编译时常量,只要它们的操作数是编译为数字的编译时常量。
        const msPerSecond = 1000;
        const secondsUntilRetry = 5;
        const msUntilRetry = secondsUntilRetry * msPerSecond;
    
      }
    
    void test6(){ // String
        //Dart字符串是一系列UTF-16代码单元。符文用于表示UTF-32代码单元序列
        String str = "hello world"; // 声明
        var str1 = "你好!";
        String sum = str + str1;
        String rep = "这是一个插入表达式---${str}";
        String str2 = '单引号';
        String str3 = '''
         这是一个三引号的String
         可以表达多行
         这个swift的语法没有区别
        ''';
        print(str3);
    
        String os = r'In a raw string, not even \n gets special treatment.';//让转义字符不发生转义,即显示原始字符串,在引号前加上前缀r即可
        print(os);//可以通过在前面加上r来创建“原始”字符串:
      }
    
      void test7(){
        //文字字符串是编译时常量,只要任何插值表达式是一个编译时常量,其值为null或数值,字符串或布尔值都可以。
        // 在 const 字符串中。
        const aConstNum = 0;
        const aConstBool = true;
        const aConstString = 'a constant string';
    
        // 不在 const 字符串中。
        var aNum = 0;
        var aBool = true;
        var aString = 'a string';
        const aConstList = [1, 2, 3];
    
        const validConstString = '$aConstNum $aConstBool $aConstString';
        print(validConstString);
      }
    

    list

    void test8(){
        var list = [1, 2, 3];
        var list2 = [1,"2",3];
        var list3 = [0,...list,...list2];
        print(list3);
    
        var list4;
        var list5 = [0,...?list];
        print(list4);//null
      }
    
      void test9(){
        bool act = false;
        var nav= ["Home","Furniture",'Plants',if (act) 'Outlet'];
        print(nav);
    
        var listOfInts = [1, 2, 3];
        var listOfStrings = [
          '#0',
          for (var i in listOfInts) '#$i'
        ];
        assert(listOfStrings[1] == '#1');
      }
    

    set

    void test10(){
        var names = <String>{};
        Set<String> set = {};
    
        names.add("name1");
        names.addAll(set);
    
        names.length;//数量
    
        //要创建一个编译时常量的集合,请在set文字之前添加const
        final consSet = const {
          '1',
          '2'
        };
      }
    

    map

    //dart 一切都是对象
    void test11(){
        
        // 直接赋值
        var gifts = {
          // Key:    Value
          'first': 'partridge',
          'second': 'turtledoves',
          'fifth': 'golden rings'
        };
    
        var nobleGases = {
          2: 'helium',
          10: 'neon',
          18: 'argon',
        };
    
        // 构造
        var gifts1 = Map();
        gifts['first'] = 'partridge';
        gifts['second'] = 'turtledoves';
        gifts['fifth'] = 'golden rings';
    
        var nobleGases2 = Map();
        nobleGases[2] = 'helium';
        nobleGases[10] = 'neon';
        nobleGases[18] = 'argon';
    
        //一切操作参考JavaScript
        // 常量
        final consMap = const {
          1:'1',
          2:'2'
        };
        
      }
    
    ##变量
    
    /*
    1.Dart中的所有变量都存储对值的引用,而不是包含该值;
    2.未初始化的变量的初始值为null。即使是具有数字类型的变量的初始值也是null,因为数字与Dart中的其他变量一样,它们都是对象.
    3.声明没有未指定静态类型的变量则会隐式声明为 dynamic 。也可以使用dynamic关键字代替var关键字声明变量
    4.final和const关键字用于声明常量。在Dart中不能修改使用final或const关键字声明变量的值。这些关键字可以与变量的数据类型一起使用,也可以与var关键字一起使用
    5.const关键字用于表示编译时常量。使用const关键字声明的变量是隐式final。
    6.只有const变量可用于计算编译时常量。编译时常量是常量,其值将在编译时确定。
    */
    void test13(){
        dynamic x = "tom";
        print(x);
        final String name = "110";
        print(name);
        const String name1 = "120";
        print(name1);
    
        const num = 12;
        print(num);
    
        const test = "abx";
        print(test);
    
      }
    
    

    数字

      void test14(){
        // num类型被int和double类型继承;num 实现了Comparable 接口
        // String to num
        print(num.parse('12'));
        print(num.parse("12.12"));
        print(12.hashCode);
        print('12'.hashCode);
        print((-13).abs());
        print((13.13).toInt());
        print((14).toDouble());
      }
    

    String

    isEmpty:如果此字符串为空,则返回true。
    length:返回字符串的长度,包括空格,制表符和换行符。
    compareTo():将此对象与另一对象进行比较
    substring():返回此字符串的子字符串,字符串从startIndex(包括)延伸到endIndex,exclusive。
    

    枚举

      void test18(){
        print(Status.values);
        Status.values.forEach((val) => print('value:$val,index:${val.index}'));
      }
    
    }
    
    enum Status {
      connected,
      connecting,
      disConnected
    }
    

    函数

     void test18(){
        print(Status.values);
        Status.values.forEach((val) => print('value:$val,index:${val.index}'));
      }
    
      test19(int a,String c){
        print(a);
      }
    
      int test20(int b){
        print(b);
        return b;
      }
    
      //可选的位置参数
      void test21(a,[a1,a2]){
        print(a);
        print(a1);
      }
    
      //可选的命名参数
      test22(a,{a1,a2}){
        print(a);
        print(a1);
        print(a2);
      }
    
      test23(a,{s1:12}){
        print(a);
        print(s1);
      }
    
      //Lambda函数是表示函数的简洁机制。这些函数也称为箭头函数。
      int test24()=>123;
      var num = ()=>(1234);
    

    接口

    接口定义任何实体必须遵守的语法。接口定义了一组对象可用的方法。Dart没有声明接口的语法。类声明本身就是Dart中的接口
    类应该使用implements关键字来使用接口。实现类必须提供已实现接口的所有功能的具体实现。换句话说,类必须重新定义它希望实现的接口中的每个函数。
    
    

    class Name {
      String proName;
      String get name_proName{
        return 'get方法';
      }
      void set name_proName(String newVal){
          this.proName = newVla;
      }
     
      Name(){//无参构造
      }
      Name(String newVla){//带参
       this.proName = newVla;
      }
      Name.namedConst(String newVla) { 
          print("The name is : ${newVla}");    
       } 
    }
    // Dart this super static override 继承都类似java语言
    

    运算符

    1.句点运算符(.)与对象一起使用以访问类的数据成员
    2.级联(..)运算符可用于通过对象发出一系列调用。上述示例代码可以按以下方式重写。
    

    Dart包

    1.包是一种封装一组编程单元的机制。应用程序有时可能需要集成某些第三方库或插件。每种语言都有一种机制来管理外部软件包,如Maven或Gradle for Java,Nuget for .NET,npm for Node.js等。Dart的软件包管理器是`pub`。
    
    2.Pub有助于在存储库中安装包。托管软件包的存储库可以在 [https://pub.dartlang.org/](https://pub.dartlang.org/)找到。
    
    3.包元数据在文件`pubsec.yaml`中定义。YAML是Yet Another Markup Language的缩写。pub工具可用于下载应用程序所需的所有各种库。
    
    4.每个Dart应用程序都有一个`pubspec.yaml`文件,其中包含对其他库的应用程序依赖性以及应用程序的元数据,如应用程序名称,作者,版本和描述。
    
    5.`pubspec.yaml`文件的内容应该如下所示 -
    
    

    typedef

    //1.可用于指定希望特定函数匹配的函数签名。函数签名由函数的参数(包括其类型)定义。返回类型不是函数签名的一部分
    
    typedef ManyOperatiuon(int firtNo,int secondNo);
    Add(int firstNo,int second){
      print("Add result is ${firstNo+second}");
    }
    Subtract(int firstNo,int second){
      print("Subtract result is ${firstNo-second}");
    }
    Divide(int firstNo,int second){
      print("Add result is ${firstNo/second}");
    }
    
    main(List<String> arguments) {
    
       ManyOperatiuon oper;
       oper = Add;
       oper(10,20);
    
    }
    
    //实例2,也可以作为参数传递给函数
    ypedef ManyOperatiuon(int firtNo,int secondNo);
    Add(int firstNo,int second){
      print("Add result is ${firstNo+second}");
    }
    Subtract(int firstNo,int second){
      print("Subtract result is ${firstNo-second}");
    }
    Divide(int firstNo,int second){
      print("Add result is ${firstNo/second}");
    }
    Calculator(int a,int b ,ManyOperatiuon oper){ //参数传递
      print("Inside calculator");
      oper(a,b);
    }
    
    
    main(List<String> arguments) {
       ManyOperatiuon oper;
       oper = Add;
       oper(10,20);
       Calculator(5,5,Add);
    
    }
    

    相关文章

      网友评论

          本文标题:基础学习

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