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;
// }
}
複製程式碼