網站首頁 編程語言 正文
正文
Dart是Google發布的開源編程語言,是一種面向對象的語言。其主要應用是Flutter框架開發(Android、IOS),此外,也可以用在服務器、腳本、Web開發中。隨著Flutter3.0開始支持全平臺開發,Dart也可以實現桌面應用。
關于Dart的介紹不再細說。下面開始Dart的使用介紹
首先記住一點:在Dart中一切皆對象。
Dart中,所有變量引用的都是 對象,每個對象都是一個 類 的實例。
字符串、數字、函數以及 null 都是對象。除去 null 以外(如果開啟了空安全), 所有的類都繼承于 Object 類。
Dart官方站點:dart.dev/
變量
語句:
語句是代碼中可以被執行的最小表達形式,類似于一句話。代碼的執行是以語句為單位進行的。
比如聲明語句聲明一個變量或函數、賦值語句進行賦值、調用語句執行一個方法等。
變量的聲明賦值
聲明語句用來表示一個變量名或方法名。賦值語句則通常是給一個變量賦值。
通常變量的聲明和賦值是一起的,其語法是 類型 變量名 = 對象;
,相當于為對象取了個名字(變量名)。
String name = "張三"; // 聲明賦值語句
在聲明時進行賦值也就是變量的初始化。
變量是一個引用。由于Dart中“萬物皆對象”的原則,變量存儲的都是對象的引用,變量指向的是對象。
Dart中不可空對象在聲明時必須賦值(即必須初始化)。只有函數內部的本地變量才可以在聲明時不需要初始化。 這是Dart的空安全機制的限制。
如下,如果之生命String變量。
比如,函數內部的本地變量可以先聲明后賦值使用。
變量的劃分
變量或數值,在編程中通常分為:可變量、不可變量(常量)、靜態變量(static)
默認聲明的變量都是可變量。
int a=10; a=a*2;
不可變量與可變量相對應,也叫常量,是初始化賦值(或第一次賦值)后不允許修改的變量。通過final
和const
修飾符進行限定。
通常推薦使用final
定義沒有修改需求的量。聲明后,final
量允許在運行期間根據需要賦值一次,之后不能修改。
const
通常用于修飾那些在程序運行前就已經確定的量。比如永恒不變的數字:圓周率、加速度等。需要在聲明時初始化賦值,之后不能修改。相對final
更為嚴格。
static
關鍵字用于修改一個類的靜態變量,只能用在類中。表示一個類上的變量。
默認值
在 Dart 中,未初始化以及可空類型的變量擁有一個默認的初始值 null。
即便數字也是如此,因為在 Dart 中一切皆為對象。
int? count; assert(count == null);
assert()
的調用將會在生產環境的代碼中被忽略掉。
在開發過程中,assert(condition)
將會在 條件判斷 為 false 時拋出一個異常。詳情請查閱 Assert。
變量的類型推斷修飾符
在變量聲明時,也可以不同指定變量類型,而是使用Dart的類型推斷(Dart分析器analyzer
的類型推斷),自動推斷出一個變量的類型?!救绻麩o法推斷出類型,將會作為dynamic
類型使用】
var
關鍵字用于普通變量的類型推斷。
比如下面,會自動推斷出變量a為String,b為int:
var a="a"; var b=1;
final
、const
用于修飾一個常量,但同時也可以起到var關鍵字的類型推斷的作用。
final
和const
變量只可以被賦值一次,之后不允許修改。
一個 const
變量是一個編譯時常量(const
變量同時也是 final
的),必須在聲明時賦值。final也可以稱作運行時常量。
void foo(){ final k; k=10; // k=20; // 只能賦值一次 const m="m"; // m="k"; // 不允許修改。 }
const可以用來創建常量值(值是常量,并不是前面的變量是常量。)?
var foo = const []; foo=[1,2];
實例變量可以是final的但不可以是const。const要修飾類中的變量,必須在前面加上static
關鍵字。
class MyClass{ var a="a"; static const c=10; final f="final"; }
通常,不是很推薦使用類型推斷,因為對于編寫者和閱讀者,明確變量類型非常重要。
Late變量
Dart 2.12引入了late修飾符,作用是:
- 聲明一個可以在聲明之后初始化的非空變量
- 懶初始化一個變量。
第一個作用主要針對頂層變量或實例變量,即上面所說的不可空變量必須在聲明時初始化的情況。
如果只是想聲明一個變量,僅僅在用到時再賦值,并且Dart不允許這樣做時,可以在該變量聲明前添加late修飾符:
late String name_late; void foo(){ name_late='late變量'; print(name_late); }
即使聲明late變量時初始化賦值,也只會在該變量第一次使用時進行初始化。一般在以下兩種情況時使用懶初始化(lazy initialization
)非常方便:
- 變量可能不是必須的,并且初始化非常耗時。
- 初始化的實例變量的初始化器需要訪問this。
比如下面的temperature
變量,如果從不使用,對應的開銷很大的readThermometer()
函數也將從不會被調用。
late String temperature = readThermometer(); // Lazily initialized.
類型判斷is和類型轉換as
is用于判斷變量的類型。如果對象是指定類型則返回 true。
if (p is Person) { p.Name = 'xxx'; }
as類型轉換:
(p as Person).Name = 'Bob';
一些重要概念
Dart中一切皆對象
空安全和可空類型?
如果開啟了空安全,變量在未聲明為可空類型時不能為 null。
在類型后添加問號(?
)可將類型聲明為可空。如int?
表示整型或null。
可以通過Object?
、Object
、dynamic
顯式聲明一個任意類型。
dynamic
會推遲到運行時執行類型檢查,通常應避免使用 dynamic 類型。
Dart支持頂層函數(如main()
)、類或對象的函數(靜態方法和實例方法),也可以在函數內創建函數(函數嵌套或本地函數)
top-level functions
Dart支持頂層變量、類或對象的變量(靜態變量和實例變量)。實例變量也稱為字段或屬性。
Instance variables are sometimes known as fields or properties
表達式和語句
Dart語法中分為
- 表達式(
expressions
)—— 有運行時值,即有返回值的是表達式。 - 語句(
statements
)—— 沒有運行時值,即語句沒有返回值。
一條語句通常包含一個或多個表達式,相反表達式不能直接包含語句。
例如,條件表達式 condition ? expr1 : expr2
的值可能是 expr1
或 expr2
。將其與 if-else
語句相比較,if-else
語句沒有值。
比如 a==null
、a!=null
就是一個條件表達式,其返回false或true值。
if(a==null){ }
就是一個if語句,或者條件語句。
Dart沒有public、protected和private類似的成員訪問限定符
如果一個標識符以下劃線 (_) 開頭,則表示該標識符在庫內是私有的。
underscore (_)
注釋
注釋是編程中的說明性文字,對代碼起到解釋說明的作用。不參與實際的代碼執行。
- 單行注釋:
//
- 多行注釋:
/*
開始,*/
結尾,中間的內容為注釋
DartPad
DartPad頁面是一個可以在瀏覽器中運行Dart語言的線上工具。
對于一些測試代碼、臨時運行的代碼,可以直接在DartPad運行查看。
也可以根據需要將DartPad
進入到自己的站點網頁內,方便查看運行代碼。
參考
Dart 開發語言概覽
原文鏈接:https://juejin.cn/post/7146357008848846862
相關推薦
- 2022-05-12 Ubuntu 20.04開啟root用戶并恢復rc.local開機自啟
- 2022-11-04 詳解Pytorch中的tensor數據結構_python
- 2022-10-20 C語言手寫集合List的示例代碼_C 語言
- 2022-04-15 C++中構造函數詳解_C 語言
- 2023-03-03 C++?高精度乘法運算的實現_C 語言
- 2022-02-17 Error: Network Error
- 2022-03-23 C語言新手初階教程之三子棋實現_C 語言
- 2021-12-01 C語言多維數組數據結構的實現詳解_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支