Dart語言開啟微信h5三公牛牛網站平臺開發研究之路

sinat_41802193發表於2018-03-07

dart語言一直不慍不火,默默成長,如微信h5三公牛牛網站平臺開發搭建聯絡Q1687054422前往h5.fanshubbs.com,但是隨著谷歌的慢慢發力,這種語言前景越來越光明,它屬於全棧式的語言,既能前端,也能後端。

我今天無聊開始研究下這門語言,dart算是什麼語言呢?它可以編譯成為JS,因此可以成為WEB開發的選擇,同時在本地它也可以擁有虛擬機器,也能開發伺服器之類的程式。

在目前多如毛的語言中,任何一門語言出來面世,都要和其他語言做比較,看看它有什麼優勢,有什麼樣的用途。

先看看執行效率。

目前執行效率第一的是C/C++(對於我們這種從事網際網路的人來說,相信極少人去用匯編),其次RUST,再次是GO,OBJECT-C等,這是大家公認的,緊隨其後的是JAVA、C#、或者delphi之類的等等。

拿JAVA做比較最好,因為JAVA語言在目前的網際網路中,用途極為廣泛:網站伺服器,遊戲伺服器、也能做科學資料分析,更能做出高效能的資料佇列快取,以上這麼多成功的例子中,說明它的執行速度極為不平凡。

至於安卓為什麼那麼卡,那是因為與蘋果的對比把安卓給踢下去了,造成不好的印象,仔細想想,當年蘋果手機6000元以上,而安卓手機那時候不過千元左右,甚至很多人購買幾百元的安卓手機,價格相差這麼大,安卓想不卡都不行,安卓一卡,結果JAVA背上了黑鍋。

1:整數計算對比

JAVA程式碼:

		long sum=0;
		long t = (System.currentTimeMillis());
		for (int i = 0; i <20000; i++) {
			for (int n = 0; n < 20000;n++) {
				sum=(sum+i*n);
			 }
			}
	
		System.out.println(sum);
		System.out.println((float) (System.currentTimeMillis() - t) );
	}

執行結果:

39996000100000000
1466.0 (備註:毫秒)

Dart語言程式碼如下:

import 'dart:math';
void main(){
  DateTime now = new DateTime.now();
  var sum=0;

for (var i = 0; i < 20000; i++) {
    for (var n = 0; n < 20000; n++) {
      sum=sum+i*n;
  }
}


DateTime now1 = new DateTime.now();

print(sum);
print(now1.difference(now).inMicroseconds/1000);
print(now);
print(now1);
}

執行結果

39996000100000000

982.608(備註:毫秒)

2018-03-07 02:04:18.102754

2018-03-07 02:04:19.085362

對照下來,整數型的計算中,dart的速度是快過JAVA,而浮點型的運算JAVA快很多了。

JAVA中把程式碼修改為:  sum=Math.sqrt(sum+i*n); Dart中把程式碼修改為:sum= sqrt( sum+i*n);

JAVA執行的速度為6755.0毫秒(6.8秒),而Dart的速度為9342.055 毫秒(9.3秒),可以看到JAVA的速度快了三分之一。

這足以說明Dart勝任伺服器語言開發了,因為連python這麼慢的語言,做為遊戲伺服器和網站伺服器開發的比例越來越高了,而PYTHON執行上面的浮點數的程式碼,需要5分鐘。

1:dart資料變數。

dart中定義變數,可用var,也可指定型別,為了開發方便,直接用var,假如伺服器開發中,儘量指定型別。

(為了程式能達到高效能,儘量指定型別,這樣可以減少編譯器的負擔和執行時間,比如上面的程式碼中,var sum=0,和double sum=0.0,它們執行的時間是不同的,指定了型別的執行時間為9.3秒,而用var關鍵詞,時間達到了11.3秒。)

在dart中,任何東西全是物件,比如函式、變數等、所有的物件繼承了Object類。

在dart中可以用final,它的值不能夠被更改,

比如下面程式碼:

final j=10;
j=10;
print(j);

編譯直接報錯,breaking at exception: NoSuchMethodError。即使J的值沒有改變,也會報錯,因為賦值操作使得物件改變了。

在dart中可以用const,它的值也不能夠被更改。

它們兩者的區別是:其中定義final的變數初始化就定義了,而const型別的為編譯時常量,因此也無法改變其值。const和final可以做運算的,比如下面的程式碼:

const aa=10;
const bb=20;
const cc=aa*bb;
print(cc);

final a=10;
final b=20;
final c=a*b;
print(c);


結果為:200,200

2:Dart的內建型別。

1:整型。

整形範圍:-9223372036854775808---9223372036854775807之間,包含這兩個數字。在64位系統上,也就是-2**63~2**63-1之間。

比如定義的時候,也可以用十六進位制:

int x = 110000;
int hex = 0xFFFF;

print(hex);

2:double型別

 定義要注意:

double a =10;//錯誤的定義
double B=3+5;//錯誤的定義
double c=3*5;//錯誤的定義

這樣的話定義是錯誤,會提示:A value of type 'int' can't be assigned to a variable of type 'double

必須要這樣定義才是正確的:

double a =10.0;
double b =1+2.5;
double c=3/6;

double和int相加的時候,要注意下面問題:

double a =1.2;
int d=10;
a=a+d;
print(a);
輸出11.2


double a =1.2;
int d=10;
d=a+d;
print(a);
編譯器報錯

double可以等於double+int的,在一些其他的語言中,型別必須嚴格控制的,比如GO語言中,這種寫法是錯誤的,必須double=double+double或者float64=float64+float64。

3:字串型別;

dart中的字串用的是utf-16的編碼格式,有點異類。

dart字串定義,可以用單引號,也可以雙引號。

var s1 = 'hello ';
var s2 = "world.";


print(s1);
print(s2);
print(s1+s2);

輸出結果:
hello 
world.
hello world.

char字元或者unicode編碼字元的轉換,有點不同其他的語言,看下面程式碼:

var s1 = 'hello ';
var s2 = "world.";
String a='A';

print(s1);
print(s2);
print(s1+s2);
print(a.codeUnitAt(0));
print((s1+s2).codeUnits);

-----------------
輸出結果:
hello 
world.
hello world.
65
[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 46]


相關文章