美文网首页
基础学习

基础学习

作者: 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);

}

相关文章

  • react学习路线图

    基础 HTML学习 HTML 基础学习 HTML 基础CSS学习 CSS 基础在上一步练习的基础上为页面添加样式使...

  • RxJava——基础学习(三),简单实践

    RxJava——基础学习(一)RxJava——基础学习(二)前两篇基础学习,了解了RxJava最基础的部分知识。这...

  • 花书第五章笔记

    [TOC] 第五章 机器学习基础 机器学习基础 掌握机器学习的基本知识和基础原理 机器学习基础[p87-p142]...

  • RobotFramework接口测试分享(一)

    基础条件 1、Python的基础:学习Python的基础教程(可参考各大学习网站) 基础部分需要学习,后续接入实际...

  • 谈话档案

    问题类 时间 姓名 学习基础 表现基础 近期问题 问题分析 解决措施 成长类 时间 姓名 学习基础 表现基础 近期...

  • Java 初中级程序员如何快速成长???

    Java 研发技术学习路线 一、Java 基础阶段 基础阶段的学习说白了就是 Java SE 的学习,这是基础的阶...

  • 浅谈语音识别基础

    承接前面的《浅谈机器学习基础》、《浅谈深度学习基础》和《浅谈自然语言处理基础》,主要参考了《解析深度学习:语音识别...

  • 零基础学习UI设计电脑需要什么配置

    零基础学习UI设计电脑需要什么配置零基础学习UI设计电脑需要什么配置零基础学习UI设计电脑需要什么配置零基础学习U...

  • 深度学习基础教程

    深度学习基础教程 [tag]深度学习,机器学习,数据分析,挖掘,算法, [content]深度学习的入门基础。 [...

  • 线上思维导图课程总结

    一、学习内容 学习的内容:基础篇、学习篇、运用篇。包括基础篇的:思维导图开启全新思维、开通基础篇学习了思维导图...

网友评论

      本文标题:基础学习

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