dart語言基礎知識

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

      • / ~/ (取整) %(取餘)
        關係運算符
        == != > < >= <=
        邏輯運算符
        ! && ||
        賦值運算符
        基礎賦值運算符 = ??=
        複合賦值運算符 += -= *= /= %= ~/=
        條件表達式
        if else switch case
        三目運算符
        ??運算符:
        二、類型轉換
        一、Number與String類型之間的轉換
        二、其餘類型轉換成Booleans類型

    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?value
2: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.height
this.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}在工做...");}

相關文章
相關標籤/搜索