1. 程式人生 > >Flutter 系列之Dart語言概述

Flutter 系列之Dart語言概述

Dart語言與其他語言究竟有什麼不同呢?在已有的程式語言經驗的基礎上,我們該如何快速上手呢?本篇文章從程式語言中最重要的組成部分,也就是基礎語法與型別變量出發,一起來學習Dart吧

一、Dart語言之初體驗

Dart可以在編譯器(Android Studio)、命令列(前提是安裝了Dart SDK)及網頁repl.it中除錯編譯,由於本次內容比較簡單,我們直接在網頁中除錯編譯即可。

我們定義一個輸出當前時間的函式,並輸出當前時間

//輸出當前時間
void nowTime() {
  int year = DateTime.now().year;
  int month = DateTime.now().month;
  int day = DateTime.now().day;
  int hour = DateTime.now().hour;
  int minute = DateTime.now().minute;
  int second = DateTime.now().second;
  String str = 'Hello World, This is $year-$month-$day $hour:$minute:$second';
  print(str);
}

和絕大多數其他語言一樣,Dart要求以main函式作為執行的入口,我們再定義main函式,並將輸出當時時間的函式放入main函式中

void main() {
	nowTime();
}

點選“run”按鈕,命令就會輸出

Hello World, This is 2019-8-11 10:45:46

我們已經可以簡單的執行Dart程式碼了,我們接下來再看一下Dart的基本變數型別

二、Dart的變數與型別

在Dart中,所有的變數都可以用var來申明,當然,也可以指定具體的型別來申明一個變數。當使用var申明變數時,表示型別是交由編譯器推斷決定的。雖然Dart支援用var來申明變數,但我還是建議使用具體的型別來申明變數,這樣編輯器和編譯器就能使用這些具體的型別,向你提供程式碼補全或編譯告警的提示了。

注意:在預設情況下,所有未初始化的變數值都是null,因此,我們判斷變數是否初始化時只用和null比較即可。

Dart是型別安全的語言,並且所有型別都是物件型別,都繼承自頂層型別Object,因此一切變數的值都是累的例項(即物件),其中包括數字、布林值、函式和null也都是繼承自Object物件。

Dart內建了一些基本型別,如num、bool、String、List及Map。

num、bool及String

num、bool及String基本上是程式語言中最常用的型別

Dart的數值型別num只有兩種子類:int(整數型別)和double(浮點型別)

void numVerb() {
  int x = 100;
  double y = 5.2;
  double xy=x*y;
  int roundY = xy.round();
  print('x = $x, y = $y, xy = $xy, roundY = $roundY');
}
x = 100, y = 5.2, xy = 520.0, roundY = 520

除了常見的基本運算子(比如:+、-、*、/,以及位運算子)外,還能使用繼承自num的abs()、round()等方法來實現求絕對值、取整等功能。

Dart的布林型別bool也只有兩種取值:true和false,他們都是編譯時常量。 Dart是型別安全的,因此我們需要顯示的檢查值

void checkValue() {
  bool isTrue = true;
  assert(isTrue == true);
  //assert(isTrue);//錯誤
}

Dart的String由UTF-16de字串組成,定義字串時我們既能使用單引號也能使用雙引號,並且還能在字串中嵌入變數或表示式(可以使用${express}把一個表示式的值放進字串,而如果是一個識別符號,則可以省略{})。

/**
 * 將一個字串中的字母全部轉換為大寫
 */
void upperCase() {
  String str = 'toUpperCase';
  String str2 = "toUpperCase";
  String str3 = 'str = $str, str2 = $str2, str to upperCase: ${str.toUpperCase()}';
  print(str3);
}
str = toUpperCase, str2 = toUpperCase, str to upperCase: TOUPPERCASE

為了獲得內嵌物件的字串,Dart會呼叫物件的toString()方法,而常見字串的拼接,Dart則通過內建運算子“+”實現。

void stringVerb() {
  int year = DateTime.now().year;
  int month = DateTime.now().month;
  int day = DateTime.now().day;
  int hour = DateTime.now().hour;
  int minute = DateTime.now().minute;
  int second = DateTime.now().second;
  String str = 'Hello World, This is ' +
      year.toString() +
      '-' +
      month.toString() +
      '-' +
      day.toString() +
      ' ' +
      hour.toString() +
      ':' +
      minute.toString() +
      ':' +
      second.toString();
  print(str);
}
Hello World, This is 2019-8-11 12:19:31

對於多行字串對的構建,你可以通過三個單引號或三個雙引號的方式申明

void stringVerb() {
  int year = DateTime.now().year;
  int month = DateTime.now().month;
  int day = DateTime.now().day;
  int hour = DateTime.now().hour;
  int minute = DateTime.now().minute;
  int second = DateTime.now().second;
  String str = """Hello World, This is
  $year-$month-$day $hour:$minute:$second""";
  print(str);

  String str2 = '''Hello World, This is
  $year-$month-$day $hour:$minute:$second''';
  print(str2);
}
Hello World, This is
  2019-8-11 12:32:5
Hello World, This is
  2019-8-11 12:32:5
List和Map

List和Map分別對應其他程式語言中的陣列和字典型別,統稱為集合型別

void listTest() {
  List<String> arr1 = ['name', 'age', 'sex'];
  for (var value in arr1) {
    print(value);
  }
  List<int> aar2 = List.of([1, 2, 3]);
  aar2.add(4);
  for (var value2 in aar2) {
    print(value2);
  }
  List<num> nums = new List<num>();
  nums.add(1);
  nums.add(1.1);
  nums.add(3);
  nums.add(5.20);
  for (var value3 in nums) {
    print(value3);
  }
}
name
age
sex
1
2
3
4
1
1.1
3
5.2

如上程式碼所示,我們申明並初始化了三個List變數,並呼叫其各自的迭代方法依次打印出其內部元素

void mapTest() {
  Map<String, String> map = {'name': 'Jack', 'age': '18', 'sex': '男'};
  map['name'] = 'Tom';
  map['age'] = '20';
  map['sex'] = '男';
  map.forEach((k, v) => print('$k:$v'));

  Map map2=new Map<String,String>();
  map2['name']='Dart';
  map2['age']='2';
  map2.forEach((k,v)=>print('$k:$v'));
}
name:Tom
age:20
sex:男
name:Dart
age:2

如上程式碼所示,我們申明並初始化了兩個Map變數,同樣呼叫其各自的迭代方法依次打印出其內部的元素

定義常量

如果你想定義不可變的變數,則需要在定義前加上final或const關鍵字

const:表示變數在編譯期間既能確定的值

final:表示變數可以在執行時確定值,但一旦確定後就不可改變

const與final區別:在定義const常量時,必須直接賦值,且只能是一個固定值,不能為一個變數或公式;在定義final常量時,可以賦值也可以不賦值,賦值時可以賦值為一個固定值,也可以賦值為一個變數或公式,但一旦賦值後就不能再改變

已同步更新至微信公眾號,歡迎關注“Android小白營”

相關推薦

Flutter&nbsp;系列Dart語言概述

Dart語言與其他語言究竟有什麼不同呢?在已有的程式語言經驗的基礎上,我們該如何快速上手呢?本篇文章從程式語言中最重要的組成部分,

Flutter系列Dart語法基礎

今天開始分享下Flutter移動開發的相關知識,下面是部分的Dart基礎語法知識。 Dart中所有東西都是物件,包括數字、函式等, 它們都繼承自Object,並且預設值都是null(包括數字)因此數字、字串都可以呼叫各種方法。 Dart中支援以下資料型別: Number

Flutter Dart語言基礎詳解 上篇

開發十年,就只剩下這套架構體系了! >>>   

SpringMVC 框架系列組件概述與配置詳解

align 概述 handle ont htm 配置文件 掃描器 springmvc 解析 在上一篇文章 SpringMVC 框架系列之初識與入門實例 的實例中,我們已經知道,SpringMVC 框架是一個 web 層的框架,本篇文章就詳細解釋一下 SpringMVC 框架

Gradle系列三 Gradle概述以及生命週期

1 Gradle是一種程式設計框架 gradle主要由以下三部分組成 1 groovy核心語法 2 build script block 3 gradle api 注:本章所有的程式碼都在 https://github.com/jiulu313/gradl

Hive從入門到精通系列--0.Hive概述和安裝環境

  一 Hive概述 Hive是由Facebook開源用於解決海量結構化日誌的資料統計 Hive是基於Hadoop框架的一個數據倉庫分析工具,這裡對於資料倉庫,何為資料倉庫?mysql,orical,sqlserver我們叫這些為資料庫,所謂資料倉庫就是在這個資料倉庫中這些

Zookeeper從入門到精通系列--0.Zookeeper概述及安裝環境

目錄 一 Zookeeper入門 1.1 概述 1.2 Zookeeper的特點 1.3Zookeeper的檔案系統 1.4 Zookeeper的下載 二 Zookeeper分散式安裝 2.1 解壓配置 三 叢集啟動 四 Zookeeper重點 4.1Zo

Spring Security系列體系結構概述(一)

文章來源 這篇文章是我Spring Security系列的第一篇,主要是根據Spring Security文件選擇性翻譯整理而成的一個架構概覽,配合自己的一些註釋方便大家理解。寫作本系列文章時,參考版本為Spring Security 4.2.3.RELEASE。 核心元件 這一節主要

Gradle系列三 Gradle概述以及生命週期

1 Gradle是一種程式設計框架 gradle主要由以下三部分組成 1 groovy核心語法 2 build script block 3 gradle api 如下圖 2 Gradle的優勢 1 更加的靈活,因為gradle是程式設計框架,所以功能要強大的多 2 粒度性上,原始碼的編譯,資源的編

Flutter App開發基礎Dart語言入門一個文件就夠了

很多人可能聽說過React Native 聽說過Weex但是沒有聽說過Flutter,相比之下Flutter的出現比較晚。因為在2018年2月27日才出現的Flutter的bate1版本。而在2015年Dart開發者峰會上亮相了Flutter的第一個版本叫

現代C語言程式設計C語言概述

1.1 資訊科技發展趨勢 目前資訊科技主要經歷了網際網路、移動網際網路以及以大資料、雲端計算、物聯網、人工智慧、區塊鏈為代表的新興技術三個階段。 網際網路 網際網路從20世紀90年代逐漸興起,主要是通過網路連線了世界各地的筆記本、桌上型電腦以及背後提供後臺資料服務的伺服器

Linux系列更改語言為中文

檢視當前系統語言環境:    echo $LANG 檢視安了哪些中文語言包    locale -a |grep "zh_CN" 沒有輸出,說明沒有安裝,輸入下面的命令安裝    yum groupinstall "fonts"

Aerospike-Architecture系列資料管理概述

資料管理概述 Aerospike支援增強的鍵值對操作。除了基本的put()和get()操作,Aerospike支援"CAS"(安全讀/修改/寫)操作,資料庫內計數器,快取操作。資料被結構化放入bin(型別傳統資料庫中的列),每個bin有一個型別。型別可以是整型,字串,二進

C語言系列C語言如何返回字串陣列

問題出在如此 想了一下C語言如何實現返回一個字串陣列,答之:沒有這種功能,但是吧,還是有辦法實現的。 那就是指向陣列的指標 解釋 char **p 這個p就是指向陣列的指標,它指向一個數組的起始地址. 想要引用裡面的陣列時,直接使用p[i] 即可

VALSE2017系列七:視覺與語言領域年度進展概述

點選上方“深度學習大講堂”可訂閱哦!編者按:視覺和自然語言處理長期以來是兩個獨立的課題,而深度學

R語言數據分析系列

r語 來看 tab barplot code 繪制 ber map lib R語言數據分析系列之五 —— by comaple.zhang 本節來討論一下R語言的基本圖形展示,先來看一張效果圖吧。 這是一張用R語言生成的,虛擬的wordcloud雲圖,詳細

C++語言筆記系列十八——虛函數(1)

自己 語言 數據類型 說明 出現 adium 重定義 angle rac 1.C++中的多態 (1)多態性:同一個函數的調用能夠進行不同的操作,函數重載是實現多態的一種手段。 (2)聯編:在編譯階段進行聯接。即是在編譯階段將一個函數的調用點和函數

C++語言筆記系列二十——模版

輸出 類模板 pos 有一個 class 初始 個數 創建對象 example 1.隨意輸入兩個數x和y,輸出最大值max。 int max(int x, int y) {return x>y?x:y;} 2.函數模版 (1)用一種或者多

前端系列HTML基礎知識概述

漸變 技術分享 isa select spl 文件上傳 右鍵 文本標簽 markup 1、什麽是HTML HTML:Hyper Text Markup Language :超文本標記語言。超文本:功能比普通文本更加強大。標記語言:使用一組標簽對內容進行描述的語言,它不是編程

前端系列JavaScript基礎知識概述

div spa func 大小寫 doc space 留言 布爾 java ?微信公眾號:compassblog 歡迎關註,歡迎轉發,互相學習,共同進步! 有任何問題,請後臺留言聯系! 1、什麽是JavaScript (1)、JavaScript是web上一種功能強大的