1、Dart入口方法介紹Dart打印Dart註釋 Dart變量 常量 命名規則
main(){
print('hello world');
}
function set:void(){
}
dart是個強大的腳本類語言,能夠不預先定義變量類型,自動會i類型變量
dart 中定義變量能夠經過var關鍵字能夠經過類型來申明變量
Dart 常量: final 和 const修飾符
const值不變 一開始就得賦值
final 能夠開始不賦值 只能賦一次 ; 而final不只有const的編譯時常量的特性,最重要的它是運行時常量,而且final是惰性初始化,即在運行時第一次使用前才初始化
永遠不改量的量,請使用final或const修飾它,而不是使用var或其餘變量類型。
final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';編程
const bar = 1000000; // Unit of pressure (dynes/cm2) const double atm = 1.01325 * bar; // Standard atmosphere
Dart的命名規則:數組
一、變量名稱必須由數字、字母、下劃線和美圓符($)組成。 2.注意:標識符開頭不能是數字 3.標識符不能是保留字和關鍵字。 4.變量的名字是區分大小寫的如: age和Age是不一樣的變量。在實際的運用中,也建議,不要用一個 單詞大小寫區分兩個變量。 五、標識符(變量名稱)必定要見名思意 :變量名稱建議用名詞,方法名稱建議用動詞
Dart數據類型
Numbers(數值):
int
double
Strings(字符串)
String
Booleans(布爾)
bool
List(數組)
在Dart中,數組是列表對象,因此大多數人只是稱它們爲列表
Maps(字典)
一般來講,Map 是一個鍵值對相關的對象。 鍵和值能夠是任何類型的對象。每一個 鍵 只出現一次, 而一個值則能夠出現屢次閉包
String str1='你好';ide
String str2='Dart';函數
print("$str1 $str2");
2、算數運行符
一、Dart運算符:
算術運算符this
print(a+b); //加
print(a-b); //減
print(a*b); //乘
print(a/b); //除
print(a%b); //其他
print(a~/b); //取整指針
3、常量和變量
一、List 和數組
List裏面經常使用的屬性和方法:code
經常使用屬性: length 長度 reversed 翻轉 isEmpty 是否爲空 isNotEmpty 是否不爲空 經常使用方法: add 增長 addAll 拼接數組 indexOf 查找 傳入具體值 remove 刪除 傳入具體值 removeAt 刪除 傳入索引值 fillRange 修改 insert(index,value); 指定位置插入 insertAll(index,list) 指定位置插入List toList() 其餘類型轉換成List join() List轉換成字符串 split() 字符串轉化成List forEach map where any every
二、Set集合
//Set 對象
//用它最主要的功能就是去除數組重複內容繼承
//Set是沒有順序且不能重複的集合,因此不能經過索引去獲取值
三、Map
映射(Maps)是無序的鍵值對:
經常使用屬性: keys 獲取全部的key值 values 獲取全部的value值 isEmpty 是否爲空 isNotEmpty 是否不爲空 經常使用方法: remove(key) 刪除指定key的數據 addAll({...}) 合併映射 給映射內增長屬性 containsValue 查看映射內的值 返回true/false forEach map where any every
3、函數
*
內置方法/函數:
print();
自定義方法:
自定義方法的基本格式:
返回類型 方法名稱(參數1,參數2,...){ 方法體 return 返回值; }
*/
//調用方法傳參
main() {
//一、定義一個方法 求1到這個數的全部數的和 60 1+2+3+。。。+60
/*
int sumNum(int n){
var sum=0;
for(var i=1;i<=n;i++)
{
sum+=i;
}
return sum;
}
var n1=sumNum(5); print(n1); var n2=sumNum(100); print(n2);
*/
//二、定義一個方法而後打印用戶信息
// String printUserInfo(String username,int age){ //行參 // return "姓名:$username---年齡:$age"; // } // print(printUserInfo('張三',20)); //實參
//三、定義一個帶可選參數的方法
// String printUserInfo(String username,[int age]){ //行參 // if(age!=null){ // return "姓名:$username---年齡:$age"; // } // return "姓名:$username---年齡保密"; // } // // print(printUserInfo('張三',21)); //實參 // print(printUserInfo('張三'))
//四、定義一個帶默認參數的方法
// String printUserInfo(String username,[String sex='男',int age]){ //行參
// if(age!=null){
// return "姓名:$username---性別:$sex--年齡:$age";
// }
// return "姓名:$username---性別:$sex--年齡保密";
// }
// print(printUserInfo('張三'));
// print(printUserInfo('小李','女'));
// print(printUserInfo('小李','女',30));
//五、定義一個命名參數的方法
// String printUserInfo(String username,{int age,String sex='男'}){ //行參
// if(age!=null){
// return "姓名:$username---性別:$sex--年齡:$age";
// }
// return "姓名:$username---性別:$sex--年齡保密";
// }
// print(printUserInfo('張三',age:20,sex:'未知'));
//六、實現一個 把方法當作參數的方法
// var fn=(){
// print('我是一個匿名方法');
// };
// fn();
//方法
fn1(){
print('fn1');
}
//方法
fn2(fn){
fn();
}
//調用fn2這個方法 把fn1這個方法當作參數傳入
fn2(fn1);
使用forEach打印下面List裏面的數據*/
// List list=['蘋果','香蕉','西瓜']; // list.forEach((value){ // print(value); // }); // list.forEach((value)=>print(value)); // list.forEach((value)=>{ // print(value) // });
/需求:修改下面List裏面的數據,讓數組中大於2的值乘以2/
List list=[4,1,2,3,4];
// var newList=list.map((value){
// if(value>2){
// return value2;
// }
// return value;
// });
// print(newList.toList());
// var newList=list.map((value)=>value>2?value2:value);
// print(newList.toList());
/
需求: 一、定義一個方法isEvenNumber來判斷一個數是不是偶數
二、定義一個方法打印1-n之內的全部偶數
/
//定義一個方法isEvenNumber來判斷一個數是不是偶數
bool isEvenNumber(int n){
if(n%2==0){
return true;
}
return false;
}
printNum(int n){
for(var i=1;i<=n;i++){
if(isEvenNumber(i)){
print(i);
}
}
}
printNum(10);
}
void main(){
// print(getNum(12));
//匿名方法
// var printNum=(){
// print(123);
// };
// printNum();
// var printNum=(int n){
// print(n+2);
// };
// printNum(12);
//自執行方法
// ((int n){
// print(n);
// print('我是自執行方法');
// })(12);
//方法的遞歸
// var sum=1;
// fn(n){
// sum=n;
// if(n==1){
// return ;
// }
// fn(n-1)
// }
// fn(5);
// print(sum);
//經過方法的遞歸 求1-100的和
var sum=0;
fn(int n){
sum+=n;
if(n==0){
return;
}
fn(n-1);
}
fn(100);
print(sum);
}
/
閉包:
一、全局變量特色: 全局變量常駐內存、全局變量污染全局 二、局部變量的特色: 不常駐內存會被垃圾機制回收、不會污染全局
/* 想實現的功能:
1.常駐內存 2.不污染全局 產生了閉包,閉包能夠解決這個問題..... 閉包: 函數嵌套函數, 內部函數會調用外部函數的變量或參數, 變量或參數不會被系統回收(不會釋放內存) 閉包的寫法: 函數嵌套函數,並return 裏面的函數,這樣就造成了閉包。 */
*/
/全局變量/
var a=123;
void main(){
// print(a);
// fn(){ // a++; // print(a); // } // fn(); // fn(); // fn();
//局部變量
// printInfo(){
// var myNum=123;
// myNum++;
// print(myNum);
// }
// printInfo();
// printInfo(); // printInfo();
//閉包
fn(){ var a=123; /*不會污染全局 常駐內存*/ return(){ a++; print(a); }; } var b=fn(); b(); b(); b();
}
01 Dart面向對象的介紹 以及Data內置對象
/*
面向對象編程(OOP)的三個基本特徵是:封裝、繼承、多態
封裝:封裝是對象和類概念的主要特性。封裝,把客觀事物封裝成抽象的類,而且把本身的部分屬性和方法提供給其餘對象調用, 而一部分屬性和方法則隱藏。 繼承:面向對象編程 (OOP) 語言的一個主要功能就是「繼承」。繼承是指這樣一種能力:它可使用現有類的功能,並在無需從新編寫原來的類的狀況下對這些功能進行擴展。 多態:容許將子類類型的指針賦值給父類類型的指針, 同一個函數調用會有不一樣的執行效果 。
Dart全部的東西都是對象,全部的對象都繼承自Object類。
Dart是一門使用類和單繼承的面嚮對象語言,全部的對象都是類的實例,而且全部的類都是Object的子類
一個類一般由屬性和方法組成。
*/
void main(){
List list=new List(); list.isEmpty; list.add('香蕉'); list.add('香蕉1'); Map m=new Map(); m["username"]="張三"; m.addAll({"age":20}); m.isEmpty; Object a=123; Object v=true; print(a); print(v);
}
02 Dart中建立義類使用類
/*
Dart是一門使用類和單繼承的面嚮對象語言,全部的對象都是類的實例,而且全部的類都是Object的子類
*/
class Person{
String name="張三";
int age=23;
void getInfo(){
// print("$name----$age");
print("${this.name}----${this.age}");
}
void setInfo(int age){
this.age=age;
}
}
void main(){
//實例化
// var p1=new Person();
// print(p1.name);
// p1.getInfo();
Person p1=new Person();
// print(p1.name);
p1.setInfo(28);
p1.getInfo();
}
03 Dart中自定義類的默認構造函數
// class Person{
// String name='張三';
// int age=20;
// //默認構造函數
// Person(){
// print('這是構造函數裏面的內容 這個方法在實例化的時候觸發');
// }
// void printInfo(){
// print("${this.name}----${this.age}");
// }
// }
//張三 李四 王五
// class Person{
// String name;
// int age;
// //默認構造函數
// Person(String name,int age){
// this.name=name;
// this.age=age;
// }
// void printInfo(){
// print("${this.name}----${this.age}");
// }
// }
class Person{
String name;
int age;
//默認構造函數的簡寫
Person(this.name,this.age);
void printInfo(){
print("${this.name}----${this.age}");
}
}
void main(){
Person p1=new Person('張三',20);
p1.printInfo();
Person p2=new Person('李四',25);
p2.printInfo();
}
04 Dart中自定義類的命名構造函數
/
dart裏面構造函數能夠寫多個
/
class Person{
String name;
int age;
//默認構造函數的簡寫
Person(this.name,this.age);
Person.now(){
print('我是命名構造函數');
}
Person.setInfo(String name,int age){
this.name=name;
this.age=age;
}
void printInfo(){
print("${this.name}----${this.age}");
}
}
void main(){
// var d=new DateTime.now(); //實例化DateTime調用它的命名構造函數
// print(d);
//Person p1=new Person('張三', 20); //默認實例化類的時候調用的是 默認構造函數
//Person p1=new Person.now(); //命名構造函數
Person p1=new Person.setInfo('李四',30);
p1.printInfo();
}
05 Dart中把類單獨抽離成一個模塊
import 'lib/Person.dart';
void main(){
Person p1=new Person.setInfo('李四1',30);
p1.printInfo();
}
06 Dart中的私有方法 和私有屬性
/
Dart和其餘面嚮對象語言不同,Data中沒有 public private protected這些訪問修飾符合
可是咱們可使用_把一個屬性或者方法定義成私有。
/
import 'lib/Animal.dart';
void main(){
Animal a=new Animal('小狗', 3);
print(a.getName());
a.execRun(); //間接的調用私有方法
}
07 類中的getter和setter修飾符的用法
// class Rect{
// int height;
// int width;
// getArea(){
// return this.height*this.width;
// }
// }
// class Rect{
// num height;
// num width;
// Rect(this.height,this.width);
// area(){
// return this.heightthis.width;
// }
// }
// void main(){
// Rect r=new Rect(10,4);
// print("面積:${r.area()}");
// }
// class Rect{
// num height;
// num width;
// Rect(this.height,this.width);
// get area{
// return this.heightthis.width;
// }
// }
// void main(){
// Rect r=new Rect(10,2);
// print("面積:${r.area}"); //注意調用直接經過訪問屬性的方式訪問area
// }
class Rect{
num height;
num width;
Rect(this.height,this.width);
get area{
return this.height*this.width;
}
set areaHeight(value){
this.height=value;
}
}
void main(){
Rect r=new Rect(10,4);
// print("面積:${r.area()}");
r.areaHeight=6;
print(r.area);
}
08 類中的初始化列表
// Dart中咱們也能夠在構造函數體運行以前初始化實例變量
class Rect{
int height;
int width;
Rect():height=2,width=10{
print("${this.height}---${this.width}");
}
getArea(){
return this.height*this.width;
}
}
void main(){
Rect r=new Rect();
print(r.getArea());
}
4、01Dart 類中的靜態成員 靜態方法
/*
一、Dart中的靜態成員:
一、使用static 關鍵字來實現類級別的變量和函數
二、靜態方法不能訪問非靜態成員,非靜態方法能夠訪問靜態成員
*/
// class Person {
// static String name = '張三';
// static void show() {
// print(name);
// }
// }
// main(){
// print(Person.name);
// Person.show();
// }
class Person {
static String name = '張三';
int age=20;
static void show() {
print(name);
}
void printInfo(){ /非靜態方法能夠訪問靜態成員以及非靜態成員/
// print(name); //訪問靜態屬性 // print(this.age); //訪問非靜態屬性 show(); //調用靜態方法
}
static void printUserInfo(){//靜態方法
print(name); //靜態屬性 show(); //靜態方法 //print(this.age); //靜態方法無法訪問非靜態的屬性 // this.printInfo(); //靜態方法無法訪問非靜態的方法 // printInfo();
}
}
main(){
// print(Person.name);
// Person.show();
// Person p=new Person();
// p.printInfo();
Person.printUserInfo();
}
二、02Dart 中的對象操做符
/*
Dart中的對象操做符:
? 條件運算符 (瞭解) as 類型轉換 is 類型判斷 .. 級聯操做 (連綴) (記住)
*/
class Person {
String name;
num age;
Person(this.name,this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
}
main(){
// Person p;
// p?.printInfo();
// Person p=new Person('張三', 20);
// p?.printInfo();
// Person p=new Person('張三', 20);
// if(p is Person){
// p.name="李四";
// }
// p.printInfo();
// print(p is Object);
// var p1;
// p1=''「
// p1=new Person('張三1', 20);
// // p1.printInfo();
// (p1 as Person).printInfo();
// Person p1=new Person('張三1', 20);
// p1.printInfo();
// p1.name='張三222';
// p1.age=40;
// p1.printInfo();
Person p1=new Person('張三1', 20);
p1.printInfo();
p1..name="李四"
..age=30
..printInfo();
}
三、03Dart 類的繼承-簡單繼承
/*
面向對象的三大特性:封裝 、繼承、多態
Dart中的類的繼承:
一、子類使用extends關鍵詞來繼承父類
二、子類會繼承父類裏面可見的屬性和方法 可是不會繼承構造函數
三、子類能複寫父類的方法 getter和setter
*/
class Person {
String name='張三';
num age=20;
void printInfo() {
print("${this.name}---${this.age}");
}
}
class Web extends Person{
}
main(){
Web w=new Web();
print(w.name);
w.printInfo();
}
四、04Dart 類的繼承 super關鍵詞的使用 實例化自類給父類構造函數傳參
五、
/*
面向對象的三大特性:封裝 、繼承、多態
Dart中的類的繼承:
一、子類使用extends關鍵詞來繼承父類
二、子類會繼承父類裏面可見的屬性和方法 可是不會繼承構造函數
三、子類能複寫父類的方法 getter和setter
/
class Person {
String name;
num age;
Person(this.name,this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
}
class Web extends Person{
String sex;
Web(String name, num age,String sex) : super(name, age){
this.sex=sex;
}
run(){
print("${this.name}---${this.age}--${this.sex}");
}
}
main(){
// Person p=new Person('李四',20);
// p.printInfo();
// Person p1=new Person('張三',20);
// p1.printInfo();
Web w=new Web('張三', 12,"男");
w.printInfo();
w.run();
}
六、06Dart 類的繼承 實例化自類給命名構造函數傳參
/
面向對象的三大特性:封裝 、繼承、多態
Dart中的類的繼承:
一、子類使用extends關鍵詞來繼承父類
二、子類會繼承父類裏面可見的屬性和方法 可是不會繼承構造函數
三、子類能複寫父類的方法 getter和setter
class Person {
String name;
num age;
Person(this.name,this.age);
Person.xxx(this.name,this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
}
class Web extends Person{
String sex;
Web(String name, num age,String sex) : super.xxx(name, age){
this.sex=sex;
}
run(){
print("${this.name}---${this.age}--${this.sex}");
}
}
main(){
// Person p=new Person('李四',20);
// p.printInfo();
// Person p1=new Person('張三',20);
// p1.printInfo();
Web w=new Web('張三', 12,"男");
w.printInfo();
w.run();
}
七、07Dart 類的繼承 覆寫父類的方法
/
面向對象的三大特性:封裝 、繼承、多態
Dart中的類的繼承:
一、子類使用extends關鍵詞來繼承父類
二、子類會繼承父類裏面可見的屬性和方法 可是不會繼承構造函數
三、子類能複寫父類的方法 getter和setter
/
class Person {
String name;
num age;
Person(this.name,this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
work(){
print("${this.name}在工做...");
}
}
class Web extends Person{
Web(String name, num age) : super(name, age);
run(){
print('run');
}
//覆寫父類的方法
@override //能夠寫也能夠不寫 建議在覆寫父類方法的時候加上 @override
void printInfo(){
print("姓名:${this.name}---年齡:${this.age}"); br/>}@overridework(){print("${this.name}的工做是寫代碼");}}main(){ Web w=new Web('李四',20);w.printInfo();w.work();}八、 Dart 自類裏面調用父類的方法/面向對象的三大特性:封裝 、繼承、多態Dart中的類的繼承: 一、子類使用extends關鍵詞來繼承父類二、子類會繼承父類裏面可見的屬性和方法 可是不會繼承構造函數三、子類能複寫父類的方法 getter和setter*class Person {String name;num age; Person(this.name,this.age);void printInfo() {print("${this.name}---${this.age}"); }work(){print("${this.name}在工做...");}