Dart编程语言入门学习

2,808 阅读4分钟

1.数据类型

Boolean

void main(){
  bool isTrue = true;
  bool isFalse = false;

  print("Hello".isEmpty);
}

Number

void main(){
  num a = 10;
  a = 12.5;

  int b = 20;
//  b = 20.5;

  double c = 10.5;
//  c = 30;

  print(b + c);
  print(b - c);
  print(b * c);
  print(b / c);
  print(b ~/ c);
  print(b % c);

  print(0.0 / 0.0);

  print(b.isEven);
  print(b.isOdd);
  int d = 11;
  print(d.isEven);
  print(d.isOdd);

  int e = -100;
  print(e.abs());

  double f = 10.5;
  print(f.round());
  print(f.floor());
  print(f.ceil());

  print(f.toInt());
  print(d.toDouble());

}

String

void main(){
  String str1 = 'Hello';//""
  String str2 = '''Hello
                  Dart''';//"""
  print(str2);

//  String str3 = 'Hello \n Dart';
  String str3 = r'Hello \n Dart';
  print(str3);

  String str4 = "This is my favorite language";
  print(str4 + "New");
  print(str4 * 5);
  print(str3 == str4);
  print(str4[1]);

  int a = 1;
  int b = 2;
  print("a + b = ${a + b}");
  print("a = $a");

  print(str4.length);
  print(str4.isEmpty);

  print(str4.contains("This"));
  print(str4.substring(0,3));
  print(str4.startsWith("a"));
  print(str4.endsWith("ge"));

  var list = str4.split(" ");
  print(list);

  print(str4.replaceAll("This", "That"));
}

Const

void main(){
  var a;
  print(a);

  a = 10;
  print(a);

  a = 'Hello Dart';
  print(a);

  var b = 20;
  print(b);

  final c = 30;
//  c = 50;

  const d = 20;
//  d = 50;

}

List

void main(){
  var list1 = [1,2,3,"Dart",true];
  print(list1);
  print(list1[2]);
  list1[1] = "Hello";
  print(list1);

  var list2 = const [1,2,3];  //不可变
//  list2[0] = 5;

  var list3 = new List();

  var list = ["hello","dart"];
  print(list.length);
  list.add("New");
  print(list);

  list.insert(1, "Java");
  print(list);

  list.remove("Java");
  print(list);

//  list.clear();
//  print(list);

  print(list.indexOf("dart1"));
  list.sort();
  print(list);

  print(list.sublist(1));

  list.forEach(print);
}

Map

void main(){
  var map1 = {"first":"Dart",1:true,true:"2"};
  print(map1);

  print(map1["first"]);
  print(map1[true]);
  map1[1] = false;
  print(map1);

  var map2 = const {1:"Dart",2:"Java"};//不可变
//  map2[1] = "Python";

  var map3 = new Map();

  var map = {"first":"Dart","second":"Java","third":"Python"};
  print(map.length);
//  map.isEmpty;

  print(map.keys);
  print(map.values);

  print(map.containsKey("first"));
  print(map.containsValue("C"));

  map.remove("third");
  print(map);

  map.forEach(f);

  var list = ["1","2","3"];
  print(list.asMap());
}

void f(key,value){
  print("key=$key,value=$value");
}

dynamic

void main(){
  var a;
  a = 10;
  a = "Dart";

  dynamic b = 20;
  b = "JavaScript";

  var list = new List<dynamic>();
  list.add(1);
  list.add("hello");
  list.add(true);
  print(list);
}

2.运算符

operator_arithmetic

void main(){
  int a = 10;
  int b = 2;

  print(a + b);
  print(a - b);
  print(a * b);
  print(a / b);
  print(a ~/ b);
  print(a % b);

  print(a++);//11
  print(++a);//12

  print(a--);//11
  print(--a);//10
}

operator_asignment

void main(){
  int a = 10;
  int b = 5;

  b ??= 10;
  print(b);

  a += 2;
  print(a);

  a -= b;
  print(a);

  a *= b;
//  a /= b;
  a ~/= b;
  a %= b;

}

operator_conditional

void main(){
  int gender = 1;
  String str = gender == 0 ? "Male=$gender" :"Female=$gender";
  print(str);

  String a = "Dart";
  String b = "Java";
  String c = a ?? b;
  print(c);


}

operator_logical

void main(){
  bool isTrue = true;
  print(!isTrue);

  bool isFalse = false;
  print(isTrue && isFalse);
  print(isTrue || isFalse);

  String str = "";
  print(!str.isEmpty);

}

operator_relational

void main(){
  int a = 5;
  int b = 3;

  print(a == b);
  print(a !=b );
  print(a > b);
  print(a < b);
  print(a >= b);
  print(a <= b);

  String strA = "123";
  String strB = "123";
  print(strA == strB);
}

3.控制语句

break_and_continue

void main(){
  var list = [1,2,3];
  for(var item in list){
    if(item == 2) {
//      break;
      continue;
    }
    print(item);
  }

  print("-----");
  var list2 = [4,5,6];
  for(var item1 in list){
    if(item1 == 2){
      break;
    }

    for(var item2 in list2){
      if(item2 == 5){
        break;
      }
      print(item2);
    }
  }
  
}

stmt_assert

void main(){
  String str;
  assert(str != null);
}

stmt_for

void main(){
  var list = [1,2,3,4,5];

  for(var index = 0;index < list.length;index++){
    print(list[index]);
  }

  print("---------");
  for(var item in list){
    print(item);
  }

}

stmt_if

void main(){
  int score = 100;

  if(score >= 90){
    if(score == 100){
      print("完美");
    }else {
      print("优秀");
    }
  }else if(score > 60){
    print("良好");
  }else if(score == 60){
    print("及格");
  }else {
    print("不及格");
  }
}

stmt_switch

void main(){
  String language = "Java";

  switch(language){
    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(language){
    Test:
    case "Dart":
      print("Dart is my favorite");
      break;
    case "Java":
      print("Java is my favorite");
      continue Test;
//      break;
    case "Python":
      print("Python is my favorite");
      break;
    default:
      print("None");
  }
}

stmt_while

void main(){
  int count = 0;

  while(count < 5){
    print(count++);
  }

  print("---$count----");

  do{
    print(count--);
  }while(count > 0 && count < 5);


}

4.方法

function_declaration

void main(List args){
  print(args);

  print(getPerson("张三", 18));

  print(printPerson("李四", 20));
}

int gender = 1;
getPerson(name,age) => gender == 1 ? "name=$name,age=$age":"Test";

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

function_optional_param可选参数

void main(){

  printPerson("李四");
  printPerson("李四",age: 20);
  printPerson("李四",age: 20,gender: "Male");
  printPerson("李四",gender: "Male");

  printPerson2("张三");
  printPerson2("张三",18);
  printPerson2("张三",18,"Female");
}

printPerson(String name,{int age,String gender}){
  print("name=$name,age=$age,gender=$gender");
}

printPerson2(String name,[int age,String gender]){
  print("name=$name,age=$age,gender=$gender");
}

function_default_param默认参数

void main(){

  printPerson("李四");
  printPerson("李四",age: 20);
  printPerson("李四",gender: "Male");
}

printPerson(String name,{int age = 30,String gender = "Female"}){
  print("name=$name,age=$age,gender=$gender");
}

function_object方法对象

void main(){
  Function func = printHello;
  func();

  var list = [1,2,3,4];
  list.forEach(print);

  var list2 = ["h","e","l","l","o"];
  print(listTimes(list2, times));
}

void printHello(){
  print("Hello");
}

List listTimes(List list ,String times(str)){
  for(var index = 0;index < list.length;index++){
    list[index] = times(list[index]);
  }

  return list;
}


String times(str){
  return str*3;
}


function_anonymous匿名方法

void main(){

  var func = (str){
    print("Hello---$str");
  };
  func(30);

//  ((){
//    print("Test");
//  })();
  var list2 = ["h","e","l","l","o"];

  var result = listTimes(list2, (str){ return str * 3;});
  print(result);

  print(listTimes2(list2));

}

List listTimes(List list ,String times(str)){
  for(var index = 0;index < list.length;index++){
    list[index] = times(list[index]);
  }

  return list;
}

List listTimes2(List list ){
  var func = (str){ return str * 3;};

  for(var index = 0;index < list.length;index++){
    list[index] = func(list[index]);
  }

  return list;
}

function_closure闭包

void main(){
  var func = a();
  func();
  func();
  func();
  func();

}

a(){
  int count = 0;

//  printCount(){
//    print(count++);
//  }

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

5.面向对象

class_and_object类与对象

import 'person.dart';

void main() {
    var person = new Person();
    person.name = "Tom";
    person.age = 20;

    print(person.name);
    print(person.address);

    person.work();
}
//person.dart
class Person {
  String name;
  int age;
  final String address = "";

  void work(){
    print("Name is $name,Age is $age,He is working...");
  }
}

calculated_property计算属性

void main() {
    var rect = new Rectangle();
    rect.height = 20;
    rect.width = 10;

    print(rect.area);

    rect.area = 200;
    print(rect.width);

}

class Rectangle{
  num width,height;

  num get area => width * height;
      set area(value){
        width = value / 20;
      }
}

constructors构造方法

void main() {
    var person = new Person("Tom",20,"Male");
    new Person.withName("John");
    new Person.withAge(20);
}

class Person{
  String name;
  int age;

  final String gender;

  Person(this.name,this.age,this.gender);

  Person.withName(String name){
    this.name = name;
  }

  Person.withAge(this.age);

  void work(){
    print("Work...");
  }
}

const_constructors常量构造方法

void main() {
    const person = const Person("Tom",20,"Male");

    person.work();

}

class Person{
  final String name;
  final int age;

  final String gender;

  const Person(this.name,this.age,this.gender);

  void work(){
    print("Work...");
  }
}

factory_constructors工厂构造方法

class Logger {
  final String name;

  static final Map<String, Logger> _cache = <String, Logger>{};

  factory Logger(String name) {
    if (_cache.containsKey(name)) {
      return _cache[name];
    } else {
      final logger = Logger._internal(name);
      _cache[name] = logger;
      return logger;
    }
  }

  Logger._internal(this.name);

  void log(String msg) {
    print(msg);
  }
}

init_list初始化列表

void main() {
    var person = new Person("Tom", 20, "Male");
}

class Person{
  String name;
  int age;

  final String gender;

  Person(this.name,this.age,this.gender);

  Person.withMap(Map map): name = map["name"],gender = map["gender"]{
    age = map["age"];
  }

  void work(){
    print("Work...");
  }
}

static_member静态成员

void main() {
  var page = new Page();

  Page.scrollDown();
}

class Page{

  static const int maxPage = 10;

  static int currentPage = 1;

  //下滑
  static void scrollDown(){
    currentPage = 1;
    print("ScrollDown...");
  }

  //上滑
  void scrollUp(){
    currentPage++;
    print("scrollUp...");
  }

}

object_operator对象操作符

void main() {
//  Person person = new Person();
//  person?.name;
//  var person;
//  person = "";
//  person = new Person();

//  (person as Person).work();

//  if (person is Person){
//    person.work();
//  }

  new Person()
    ..name = "Tom"
        ..age = 20
        ..work();
}

class Person{
  String name;
  int age;

  void work(){
    print("Work...$name,$age");
  }
}

object_call对象call

void main() {
    var person = new Person();

    print(person("Test",30));

}

class Person{
  String name;
  int age;

//  void work(){
//    print("Name is $name,Age is $age");
//  }

  String call(String name,int age){
    return "Name is $name,Age is $age";
  }
}

6.面向对象扩展

继承

import 'person.dart';

void main() {
//  var student = new Student();
//  student.study();
//
//  student.name = "Tom";
//  student.age = 16;
//
//  print(student.isAdult);
//
//  student.run();

  Person person = new Student();
  person.name = "Tom";
  person.age = 18;

  if(person is Student){
    person.study();
  }

  print(person);
}

class Student extends Person{

  void study(){
    print("Student study...");
  }

  @override
  bool get isAdult => age > 15;


  @override
  void run() {
    print("Student run...");
  }

}


class Person {
  String name;
  int age;
  String _birthday;

  bool get isAdult => age > 18;

  void run(){
    print("Person run...");
  }

  @override
  String toString() {
    return "Name is $name,Age is $age";
  }
}

继承中的构造方法


void main() {
  var student = new Student("Tom","Male");

  print(student.name);
}

class Person{
  String name;

  Person(this.name);

  Person.withName(this.name);
}

class Student extends Person{
  int age;

  final String gender;

  Student(String name,String g) : gender = g, super.withName(name);
}

抽象类

void main() {
  var person = new Student();
  person.run();
}

abstract class Person{

  void run();
}

class Student extends Person{
  @override
  void run() {
    print("run...");
  }

}

接口

void main() {
  var student = new Student();
  student.run();
}

//class Person{
//  String name;
//
//  int get age => 18;
//
//  void run(){
//    print("Person run...");
//  }
//}

abstract class Person{

  void run();

}

class Student implements Person{

  @override
  void run() {
    print("Student run...");
  }

}

mixins

void main() {
//  var d = new D();
//  d.a();
}

//class A{
//  void a(){
//    print("A.a()...");
//  }
//}
//
//class B{
//
//  void a(){
//    print("B.a()...");
//  }
//
//  void b(){
//    print("B.b()...");
//  }
//}
//
//class Test{}
//
//
//class C{
//
//  void a(){
//    print("C.a()...");
//  }
//
//  void b(){
//    print("C.b()...");
//  }
//
//  void c(){
//    print("C.c()...");
//  }
//}
//
//class D  extends A with C,B{
//
//}




abstract class Engine{
  void work();
}

class OilEngine implements Engine{
  @override
  void work() {
    print("Work with oil...");
  }

}

class ElectricEngine implements Engine{

  @override
  void work() {
    print("Work with Electric...");
  }

}

class Tyre{
  String name;

  void run(){}
}

class Car = Tyre with ElectricEngine;

class Bus = Tyre with OilEngine;




操作符覆写

void main() {

  var person1 = new Person(20);
  var person2 = new Person(20);

  print(person1 > person2);

  person1.age;
  print(person1['age']);

  print(person1 == person2);
}

class Person{
  int age;

  Person(this.age);

  bool operator >(Person person){
    return this.age > person.age;
  }

  int operator [](String str){
    if("age" == str){
      return age;
    }

    return 0;
  }

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
          other is Person &&
              runtimeType == other.runtimeType &&
              age == other.age;

  @override
  int get hashCode => age.hashCode;


}

7.枚举

enum

void main() {
  var currentSeason  = Season.winter;

  print(currentSeason.index);

  switch(currentSeason){
    case Season.spring:
      print("1-3月");
      break;
    case Season.summer:
      print("4-6月");
      break;
    case Season.autumn:
      print("7-9月");
      break;
    case Season.winter:
      print("10-12月");
      break;
  }
}

enum Season{
  spring,
  summer,
  autumn,
  winter
}

8.泛型

generics

void main() {
  var list = new List<int>();
  list.add(1);

//  var utils = new Utils<int>();
//  utils.put(1);

  var utils = new Utils();
  utils.put<int>(1);
}

class Utils{

   void put<T>(T element){
    print(element);
  }

//  void putString(String element){
//    this.elementStr = element;
//  }
}