Flutter/Dart第08天:Dart類型(內置類型、記錄、集合、泛型和類型別名)

来源:https://www.cnblogs.com/obullxl/archive/2023/10/03/NTopic2023100301.html
-Advertisement-
Play Games

我們來繼續學習Dart語言的類型,包括Dart內置類型、Record記錄類型(Dart 3開始支持)、集合類型、泛型和typedef類型別名。在前面的學習中,基礎內置類型、集合和泛型都有所涉及和應用,本文我們和其他類型逐一進行介紹…… ...


Dart內置類型(共10類)

Dart官網文檔:https://dart.dev/language/built-in-types

Dart內置類型即Dart SDK自帶的類型,我們編程過程中可直接使用的類型,主要分為10類:

  1. 數值類型:包括int類、double類等。
  2. 字元串類型:即String類。
  3. 布爾類型:即bool類。
  4. 記錄類型:即Record類,Dart 3中開始支持(最新版本的Java 21也支持)。
  5. 列表類型:即List類,同時也是數組。
  6. Set類型:即Set類。
  7. 映射類型:即Map類。
  8. 字元類型:與字元相關處理。
  9. 符合類型:即Symbol類。
  10. 特殊值:null空值。

Dart中類型的其他一些規則:

  1. Object類是Dart中除Null之外的所有類的基類。擴展問題:Dart中頂層類是什麼呢?
  2. Enum類是Dart中所有枚舉類的基類。擴展問題:Enum類是Object的子類嗎?答案:是。
  3. dynamic類型Dart的靜態檢測會失效,容易引發空安全等其他運行時錯誤,建議使用Object或者Object?代替。
  4. FutureStream支持非同步編程。
  5. Never一般用於總是拋出異常的函數,表明表達式用於無法成功執行。
  6. void表明值不會被再次使用,一般用戶函數返回值。

數字類型(int和double)

Dart中數字類型類結構如下:

image

intdouble都是num類的子類。int不超過64位的整數,double為64位雙精度浮點數。

num類型支持操作:加+,減-,乘*,除/abs()絕對值,ceil()向上取整,floor()向下取整操作。特別註意:操作,如>>右移或者<<左移等位操作,僅int類型支持。

代碼樣例:如下代碼,數字類型定義。

// int類型
var x = 1;
var hex = 0xDEADBEEF;

// double類型
var y = 1.1;
var exponents = 1.42e5;
double z = 1; // 等同於:double z = 1.0;

// num類型:既可以是整數,又可以是浮點數
num x = 1;
x += 2.5;

代碼樣例:如下代碼,數字類型和字元串相互轉換。

// String -> int
var one = int.parse('1');
assert(one == 1);

// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);

// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');

// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');

代碼樣例:如下代碼,int類型操作。

assert((3 << 1) == 6); // 0011 << 1 == 0110
assert((3 | 4) == 7); // 0011 | 0100 == 0111
assert((3 & 4) == 0); // 0011 & 0100 == 0000

代碼樣例:如下代碼,字面量數字屬於編譯時常量,因此字面量數字表達式也可以作為常量。

const msPerSecond = 1000;
const secondsUntilRetry = 5;
const msUntilRetry = secondsUntilRetry * msPerSecond;

字元串類型(String)

Dart中字元串是一個UTF-16的序列碼,我們可以通過'單引號或者"雙引號定義一個字元串、通過${}進行字元串插值、通過相鄰字元串連接、使用+符號進行連接,通過3個單引號'''或者3個雙引號"""定義多行字元串,還可以通過增加首碼r定義原始字元串。

代碼樣例:如下代碼,字元串的各種定義方式。

// 引號:單引號或雙引號
var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";
var s3 = 'It\'s easy to escape the string delimiter.';
var s4 = "It's even easier to use the other delimiter.";

// 插值
final name = 'Tom';
var s5 = 'My name is $name.';
assert(s5 == 'My name is Tome.');

// 相鄰字元串
var s6 = 'String '
    'concatenation'
    " works even over line breaks.";
assert(s6 ==
    'String concatenation works even over '
        'line breaks.');

var s7 = 'The + operator ' + 'works, as well.';
assert(s7 == 'The + operator works, as well.');

// 多行字元串:3個單引號或3個雙引號
var s8 = '''
My name is Tom.
I am a boy.
''';

var s9 = """
My name is Tom.
I am a boy.
""";

// 原始字元串
var s10 = r'My name is Tome.\nI am a boy.';

特別註意:==雙等於號操作符在Dart中用於檢測2個對象是否相等,如果是字元串,則是校驗它們的序列碼是否相同(這與Java有很多的區別)。

代碼樣例:如下代碼,字面量字元串是編譯時常量,如果字元串插值表達式中的變數是常量,那麼插值字元串也是常量。

// 字面量字元串
const aConstString = 'a constant string';

// 插值字元串常量
const aConstNum = 0;
const aConstBool = true;
const validConstString = '$aConstNum $aConstBool $aConstString';

布爾類型(bool)

Dart中只有2個對象是bool類型:truefalse,且他們都是常量。

代碼樣例:如下代碼,在表達式中的布爾類型。

// Check for an empty string.
var fullName = '';
assert(fullName.isEmpty);

// Check for zero.
var hitPoints = 0;
assert(hitPoints <= 0);

// Check for null.
var unicorn = null;
assert(unicorn == null);

// Check for NaN.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);

字元和符號(characters)

Dart中字元代表字元串中一個Unicode編碼單元。Unicode為世界上的每個字母、數字和符合定義了一個唯一數字值。

由於Dart的字元串是UTF-16編碼,因此Dart中表示Unicode有其對應的語法格式,常用的方式為\uXXXX代表一個字元,其中XXXX4位16進位的值。

舉例說明:心形字元♥的值為\u2665,如果少於或者超過4位16禁止值,則用{}包裹起來,如笑臉字元

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 很多想學Java的人不知道怎樣選教程,本文對Java自學網站進行評測。 本文不帶主觀傾向,只客觀分析各個網站的區別。 ...
  • 此LIN UDS bootloader的上位機是zFlash, LIN盒子是自己開發的,更新應用程式時bootloader和上位機zFlash間通訊採用UDS協議 ...
  • 索引原理 倒排索引 倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地來講,正向索引是通過key找value,反向索引則是通過value找key。ES底層在檢索時底層使用的就是倒排索引。 索引模型 現有索引和映射如下: { "products" : { "mappi ...
  • 安裝導入 npm npm i three 導入 並非所有功能都在three,還需從子目錄導入 // three模塊 import * as three from 'three' // 一些不在three模塊的功能,這裡是OrbitControls導入示例 import { OrbitControls ...
  • 大家好,我是王天~ 今天咱們用 reac+reactRouter來實現頁面級的按鈕許可權功能。這篇文章分三部分,實現思路、代碼實現、踩坑記錄。 嫌啰嗦的朋友,直接拖到第二章節看代碼哦。 前言 通常情況下,咱們為用戶添加許可權時,除了頁面許可權,還會細化到按鈕級別,比如、新增、刪除、查看等許可權。 如下效果, ...
  • 觀察者模式在實際開發過程中是非常常見的一種設計模式。 Spring Event的原理就是觀察者模式,只不過有Spring的加持,讓我們更加方便的使用這一設計模式。 一、什麼是觀察者模式 概念: 觀察者模式又叫發佈-訂閱模式。 發佈指的是當目標對象的狀態改變時,它就向它所有的觀察者對象發佈狀態更改的消 ...
  • Redis作為當今最流行的記憶體資料庫,已經成為服務端加速的必備工具之一。對於Redis為什麼那麼快?以及Redis採用單線程,但為什麼反而獲得更高的性能的疑問,在之前的Redis為什麼那麼快?一文中,已經有所介紹。 今天通過這篇,我們來瞭解一下Redis最常見的5種應用場景。您可以通過視頻來學習,如 ...
  • 大家好,我是深碼青年,作為一名迄今為止已經有四年碼齡的人來說,springboot已經深入了自己的腦子裡面,所以藉此機會,我們來仔細說一說關於springboot2.0的那些事兒 一、Spring Boot 是什麼 以下截圖自 [Spring Boot 官方文檔](https://spring.io ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...