欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

包含flutter冒號的詞條

現(xiàn)代配置指南——YAML 比 JSON 高級在哪

一直以來,前端工程中的配置大多都是 .js 文件或者 .json 文件,最常見的比如:

創(chuàng)新互聯(lián)公司于2013年創(chuàng)立,先為赤峰等服務(wù)建站,赤峰等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為赤峰企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

這些配置對前端非常友好,因為都是我們熟悉的 JS 對象結(jié)構(gòu)。一般靜態(tài)化的配置會選擇 json 文件,而動態(tài)化的配置,涉及到引入其他模塊,因此會選擇 js 文件。

還有現(xiàn)在許多新工具同時支持多種配置,比如 Eslint ,兩種格式的配置任你選擇:

后來不知道什么時候,突然出現(xiàn)了一種以 .yaml 或 .yml 為后綴的配置文件。一開始以為是某個程序的專有配置,后來發(fā)現(xiàn)這個后綴的文件出現(xiàn)的頻率越來越高,甚至 Eslint 也支持了第三種格式的配置 .eslintrc.yml 。

既然遇到了,那就去 探索 它!

下面我們從 YAML 的 出現(xiàn)背景 , 使用場景 , 具體用法 , 高級操作 四個方面,看一下這個流行的現(xiàn)代化配置的神秘之處。

一個新工具的出現(xiàn)避免不了有兩個原因:

YAML 這種新工具就屬于后者。其實在 yaml 出現(xiàn)之前 js+json 用得也不錯,也沒什么特別難以處理的問題;但是 yaml 出現(xiàn)以后,開始覺得它好亂呀什么東西,后來了解它后,越用越喜歡,一個字就是優(yōu)雅。

很多文章說選擇 yaml 是因為 json 的各種問題,json 不適合做配置文件,這我覺得有些言過其實了。我更愿意將 yaml 看做是 json 的升級,因為 yaml 在格式簡化和體驗上表現(xiàn)確實不錯,這個得承認(rèn)。

下面我們對比 YAML 和 JSON,從兩方面分析:

JSON 比較繁瑣的地方是它嚴(yán)格的格式要求。比如這個對象:

在 JSON 中以下寫法通通都是錯的:

字符串的值必須 k-v 都是 "" 才行:

雖然是統(tǒng)一格式,但是使用上確實有不便利的地方。比如我在瀏覽器上測出了接口錯誤。然后把參數(shù)拷貝到 Postman 里調(diào)試,這時就我要手動給每個屬性和值加 "" 號,非常繁瑣。

YAML 則是另辟蹊徑,直接把字符串符號干掉了。上面對象的同等 yaml 配置如下:

沒錯,就這么簡單!

除了 "" 號,yaml 覺得 {} 和 [] 這種符號也是多余的,不如一起干掉。

于是呢,以這個對象數(shù)組為例:

轉(zhuǎn)換成 yaml 是這樣的:

對比一下這個精簡程度,有什么理由不愛它?

說起增加的部分,最值得一提的,是 YAML 支持了 注釋 。

用 JSON 寫配置是不能有注釋的,這就意味著我們的配置不會有備注,配置多了會非常凌亂,這是最不人性化的地方。

現(xiàn)在 yaml 支持了備注,以后配置可以是這樣的:

把這種配置丟給新同事,還怕他看不懂配了啥嗎?

除注釋外,還支持配置復(fù)用的相關(guān)功能,這個后面說。

我接觸的第一個 yaml 配置是 Flutter 項目的包管理文件 pubspec.yaml ,這個文件的作用和前端項目中的 package.json 一樣,用于存放一些全局配置和應(yīng)用依賴的包和版本。

看一下它的基本結(jié)構(gòu):

你看這個結(jié)構(gòu)和 package.json 是不是基本一致? dependencies 下列出應(yīng)用依賴和版本, dev_dependencies 下的則是開發(fā)依賴。

后來在做 CI/CD 自動化部署的時候,我們用到了 GitHub Action。它需要多個 yaml 文件來定義不同的工作流,這個配置可比 flutter 復(fù)雜得多。

其實不光 GitHub Action,其他流行的類似的構(gòu)建工具如 GitLab CI/CD,circleci,全部都是齊刷刷的 yaml 配置,因此如果你的項目要做 CI/CD 持續(xù)集成,不懂 yaml 語法肯定是不行的。

還有,接觸過 Docker 的同學(xué)肯定知道 Docker Compose,它是 Docker 官方的單機編排工具,其配置文件 docker-compose.yml 也是妥妥的 yaml 格式。現(xiàn)在 Docker 正是如日中天的時候,使用 Docker 必然免不了編排,因此 yaml 語法早晚也要攻克。

上面說的這 3 個案例,幾乎都是現(xiàn)代最新最流行的框架/工具。從它們身上可以看出來,yaml 必然是下一代配置文件的標(biāo)準(zhǔn),并且是 前端-后端-運維 的通用標(biāo)準(zhǔn)。

說了這么多,你躍躍欲試了嗎?下面我們詳細(xì)介紹 yaml 語法。

介紹 yaml 語法會對比 json 解釋,以便我們快速理解。

先看一下 yaml 的幾個特點:

相比于 JSON 來說,最大的區(qū)別是用 縮進 來表示層級,這個和 Python 非常接近。還有強化的一點是支持了注釋,JSON 默認(rèn)是不支持的(雖然 TS 支持),這也對配置文件非常重要。

YAML 支持以下幾種數(shù)據(jù)結(jié)構(gòu):

先看對象,上一個 json 例子:

轉(zhuǎn)換成 yaml:

對象是最核心的結(jié)構(gòu),key 值的表示方法是 [key]: ,注意這里 冒號后面有個空格,一定不能少 。value 的值就是一個 純量 ,且默認(rèn)不需要引號。

數(shù)組和對象的結(jié)構(gòu)差不多,區(qū)別是在 key 前用一個 - 符號標(biāo)識這個是數(shù)組項。注意這里 也有一個空格 ,同樣也不能少。

轉(zhuǎn)換成 JSON 格式如下:

了解了基本的對象和數(shù)組,我們再來看一個復(fù)雜的結(jié)構(gòu)。

眾所周知,在實際項目配置中很少有簡單的對象或數(shù)組,大多都是對象和數(shù)組相互嵌套而成。在 js 中我們稱之為對象數(shù)組,而在 yaml 中我們叫 復(fù)合結(jié)構(gòu) 。

比如這樣一個稍復(fù)雜的 JSON:

轉(zhuǎn)換成復(fù)合結(jié)構(gòu)的 YAML:

若你想嘗試更復(fù)雜結(jié)構(gòu)的轉(zhuǎn)換,可以在 這個 網(wǎng)頁中在線實踐。

純量比較簡單,對應(yīng)的就是 js 的基本數(shù)據(jù)類型,支持如下:

比較特殊的兩個,null 用 ~ 符號表示,時間大多用 2021-12-21 這種格式表示,如:

轉(zhuǎn)換成 JS 后:

在 yaml 實戰(zhàn)過程中,遇到過一些特殊場景,可能需要一些特殊的處理。

在 shell 中我們常見到一些參數(shù)很多,然后特別長的命令,如果命令都寫在一行的話可讀性會非常差。

假設(shè)下面的是一條長命令:

在 linux 中可以這樣處理:

就是在每行后加 符號標(biāo)識換行。然而在 YAML 中更簡單,不需要加任何符號,直接換行即可:

YAML 默認(rèn)會把換行符轉(zhuǎn)換成 空格 ,因此轉(zhuǎn)換后 JSON 如下,正是我們需要的:

然而有時候,我們的需求是 保留換行符 ,并不是把它轉(zhuǎn)換成空格,又該怎么辦呢?

這個也簡單,只需要在首行加一個 | 符號:

轉(zhuǎn)換成 JSON 變成了這樣:

獲取配置是指,在 YAML 文件中定義的某個配置,如何在代碼(JS)里獲取?

比如前端在 package.json 里有一個 version 的配置項表示應(yīng)用版本,我們要在代碼中獲取版本,可以這么寫:

JSON 是可以直接導(dǎo)入的,YAML 可就不行了,那怎么辦呢?我們分環(huán)境解析:

在瀏覽器中

瀏覽器中代碼用 webapck 打包,因此加一個 loader 即可:

然后配置 loader:

在組件中使用:

在 Node.js 中

Node.js 環(huán)境下沒有 Webpack,因此讀取 yaml 配置的方法也不一樣。

首先安裝一個 js-yaml 模塊:

然后通過模塊提供的方法獲取:

配置項復(fù)用的意思是,對于定義過的配置,在后面的配置直接引用,而不是再寫一遍,從而達(dá)到復(fù)用的目的。

YAML 中將定義的復(fù)用項稱為錨點,用 標(biāo)識;引用錨點則用 * 標(biāo)識。

對應(yīng)的 JSON 如下:

但是錨點有個弊端,就是不能作為 變量 在字符串中使用。比如:

此時 key2 的值就是普通字符串 _my name is *name_,引用變得無效了。

其實在實際開發(fā)中,字符串中使用變量還是很常見的。比如在復(fù)雜的命令中多次使用某個路徑,這個時候這個路徑就應(yīng)該是一個變量,在多個命令中復(fù)用。

GitHub Action 中有這樣的支持,定義一個環(huán)境變量,然后在其他的地方復(fù)用:

這種實現(xiàn)方式與 webpack 中使用環(huán)境變量類似,在構(gòu)建的時候?qū)⒆兞刻鎿Q成對應(yīng)的字符串。

如果本文對你有啟發(fā),請甩手一個贊

Flutter 6種構(gòu)造函數(shù)詳解

Flutter有生成構(gòu)造函數(shù)、默認(rèn)構(gòu)造函數(shù)、命名構(gòu)造函數(shù)、重定向構(gòu)造函數(shù)、常量構(gòu)造函數(shù)、工廠構(gòu)造函數(shù)

生成構(gòu)造函數(shù)是最常見的構(gòu)造函數(shù),即生成實體類對象。

如果未聲明構(gòu)造函數(shù),則會提供默認(rèn)構(gòu)造函數(shù)。 默認(rèn)構(gòu)造函數(shù)沒有參數(shù),并調(diào)用父類無參數(shù)構(gòu)造函數(shù)。

默認(rèn)情況下,子類中的構(gòu)造函數(shù)調(diào)用父類的未命名無參數(shù)構(gòu)造函數(shù)。 父類的構(gòu)造函數(shù)在子類構(gòu)造函數(shù)體的開頭被調(diào)用。 如果還使用初始化了列表,則會在調(diào)用父類構(gòu)造函數(shù)之前執(zhí)行。 執(zhí)行順序如下:

如果父類沒有未命名的無參數(shù)構(gòu)造函數(shù),則必須手動調(diào)用父類中的一個構(gòu)造函數(shù)。 在子類的構(gòu)造函數(shù)體之后用冒號(:)指定父類構(gòu)造函數(shù)

當(dāng)需要定義一個有特別含義的構(gòu)造函數(shù)的時候,可以通過命名構(gòu)造 形式:構(gòu)造函數(shù).XXX來命名構(gòu)造函數(shù)

有時構(gòu)造函數(shù)需要重定向到同一個類中的另一個構(gòu)造函數(shù),在冒號后面用this:

如果你的類需要成為永遠(yuǎn)不會更改的對象,則可以使這些對象成為編譯時常量。 定義const構(gòu)造函數(shù)要確保所有實例變量都是final。

不用直接創(chuàng)建對象(可以通過調(diào)用其他構(gòu)造函數(shù)創(chuàng)建)

Dart類(構(gòu)造函數(shù)、單例)

默認(rèn)是首先調(diào)用父類無參構(gòu)造函數(shù),然后子類的無參構(gòu)造函數(shù)

調(diào)用順序

在初始化列表中顯示調(diào)用父類構(gòu)造函數(shù)

了解調(diào)用順序前,首先明確一下什么是初始化列表, 初始化列表就是構(gòu)造函數(shù)名的冒號: 后面,大括號{ 前面的部分

初始化列表的執(zhí)行順序,在整個構(gòu)造函數(shù)的最前面, 它的作用就是

dart創(chuàng)建單例和java思想差不多,static,私有,dart沒有private,但是可以用_表示私有,除此之外dart可以借助factory來使正常的Test test = Test()這種寫法同樣獲取單例

控制臺輸出test1、test2、test3的hashcode,相同

DartPad(好用的dart在線編輯器)

Realank-Dart構(gòu)造函數(shù)介紹

馬嘉倫-在Flutter中使用dart的單例模式

標(biāo)題名稱:包含flutter冒號的詞條
鏈接分享:http://chinadenli.net/article22/dseijcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)網(wǎng)站排名域名注冊網(wǎng)站改版品牌網(wǎng)站設(shè)計微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司