站点图标 Linux-技术共享

Dart 語言入門 1: 簡介、開發環境、變數、內建型別介紹

8315061

Dart 簡介

Dart 是由 google 主導並開發的語言。可搭配也是 google 主導的 flutter 平台框架,一套程式可以開發 Android、iOS App、Web、桌面應用程式等等,並可應用在 Windows、macOS、Linux、Fuchsia(Google下一代作業系統)。看到這麼多的優點,未來錢途不可限量,開始來好好研究一下吧。

Dart 開發環境

在前篇 Flutter 安裝 macOS開發環境 安裝 Flutter 開發環境後就可以使用 Dart 語言。
但對於初學者而言,有現成的Dart平台,不需要這麼麻煩,要安裝語言環境才能開始學習,只要連上網路,就即可使用,那就是DartPad。

也可以先安裝Homebrew軟體後,再安裝Dart SDK
先在終端機安裝Homebrew 輸入下面指令

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

接下來進行安裝 Dart SDK

brew tap dart-lang/dart
brew install dart -devel

安裝後執行

brew info dart

驗證是否安裝正確

Dart官網也有針對各個OS有詳細的安裝說明。

開始學習

變數

使用 var 來宣告 變數
要注意的是,若一開始未給值,變數 default 為 null,之後可以變換為其他型態;

void main() {
  var name;
  print(name);
  
  name = 'Dragon';
  print(name);
  
  name = 12345678;
  print(name);
}


反之,若是一開始給值,之後就只能使用該值的型態,不能變換型態。

void main() {
  var name = 'Dragon';
  print(name);

  name = 12345678;
  print(name);
}


不過個人還是建議,任何變數一開始就制定好其型態。

void main() {
  String name = 'Dragon';
  print(name);
}

常數

若想設置常數,可以使用 final、const 進行修飾,只能被給值一次。而const 是編譯時的常數,所以若是要宣告成const 的纇(class),則必須加上 static,即 static const (順序不可顛倒)。而實體變數則是要宣告成 final 而不可以是 const。

void main() {
  const PI = 3.1415926;
  var radius ;
  radius = 5;
  final circumference = 2 *radius* PI;
  print(circumference);
}

內建型別(Built-in types)

Dart 语言支持下列的类型:
numbers:分為兩種
int: 整數
double: 浮點數

var x = 1;               //整數
var hex = 0xDEADBEEF;    //整數
var y = 1.1;             //浮點數
var exponents = 1.42e5;  //浮點數
double z = 1;            //浮點數Equivalent to double z = 1.0.

strings: 字串

void main() {
  var s = '字符串插值';
  print('Dart 有$s,使用起来非常方便。'); //可用$帶變數到字串
  print('Dart 有字符串插值' ',使用起来非常方便'); //可以用“”或‘’串字串
  print('Dart 有字符串插值' + ',使用起来非常方便'); //可以用+串字串
  print('使用${s.substring(3, 5)}表達式也非常方便。'); //可用${}處理字串
  s = '''  多行   
  字串''';                             //使用 ‘’‘ 或 """ 展現多行字串
  print(s);
}


booleans: 布林值,使用 bool 關鍵字表示布林型態。布林值只有: true、false。

void main() {
  var t = true;
  var f = false;
  print(t);
  print(f);
}

lists: 清單(arrays)類似矩陣

void main() {
  //宣告固定長度
  var fixedList1 = new List(2);
  fixedList1[0] = 1;
  fixedList1[1] = 'a';
  print(fixedList1);
  var fixedList2 = [1,2,3,"Hello",'World'];
  print(fixedList2);
  //宣告可變長度
  var growableList = [];
  growableList.add("x");
  growableList.add("y");
  growableList.add("z");
  print(growableList.length);
  print(growableList);
  growableList.forEach(print);
}


sets:集合,集合中的元素是沒有順序且不能重複,因此不能使用索引值去取值(如set[0]),但可以列舉出來。
因為是集合,所以可以使用交集、聯集等等運算。

void main() {
  var colorSet1 = {'green', 'blue', 'yellow', 'red'};
  var colorSet2 = {'red', 'black', 'white', 'yellow'};
  print(colorSet1);
  for (var color in colorSet1) {
    print(color); //不可使用 colorSet1[0]    
  }
  print("交集:"+colorSet1.intersection(colorSet2).toString());
  print("聯集:"+colorSet1.union(colorSet2).toString());
  print("差集:"+colorSet1.difference(colorSet2).toString());
}


maps: Map 是以 key-value的形式儲存,Map中的key是不可以重複,如果key不存在則回傳null。

void main() {
  var gifts = Map();
  gifts['first'] = 'partridge';
  gifts['second'] = 'turtledoves';
  gifts['fifth'] = 'golden rings';
  print(gifts);
  var nobleGases = Map();
  nobleGases[2] = 'helium';
  nobleGases[10] = 'neon';
  nobleGases[18] = 'argon';
  print(nobleGases);
  var colorMap = {
    'black': '#000000',
    'yellow': '#FFFF00',
    'white': '#FFFFFF',
    'red': '#FF0000'
  };
  print(colorMap['red']);
}


runes: (用于在字符串中表示 Unicode 字符),要先安裝Characters package。
首先於 pubspec.yaml 檔案加上

dependencies:
characters: ^1.0.0


安裝

接下來就可以import 來使用

mport 'package:characters/characters.dart';

void main() {
  var hi = 'Hi ??';
  print(hi);
  print('The end of the string: ${hi.substring(hi.length - 1)}');
  print('The last character: ${hi.characters.last}\n');
}


symbols:符號,表示操作符或者標識符。也許從來不會用到Symbol,但是該功能對於通過名字來引用標識符的情況是非常有價值的,特別是混淆後的代碼,標識符的名字被混淆了,但是Symbol的名字不會改變,下面列下例子:

//在標識符前加 # 前缀,來獲取Symbol
//#radix
//#bar
void main() {
  print(#n == new Symbol('n')); //輸出:true
  var name = 'dragon';
  Symbol symbol = #name;
  print(symbol); //輸出:Symbol("name")
  print(#name); //輸出:Symbol("name")
  print(name);
}

退出移动版